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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Nov 11 20:39:12 EST 2008


Author: tirelli
Date: 2008-11-11 20:39:11 -0500 (Tue, 11 Nov 2008)
New Revision: 23825

Modified:
   labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
   labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DroolsSoftKeywords.java
   labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
   labs/jbossrules/branches/etirelli/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/branches/etirelli/drools-compiler/src/test/resources/org/drools/lang/pluggable_operators.drl
Log:
Trying to fix parser

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-11-12 01:39:11 UTC (rev 23825)
@@ -1,149 +1,146 @@
-// $ANTLR 3.0.1 src/main/resources/org/drools/lang/DRL.g 2008-10-18 17:54:42
+// $ANTLR 3.0.1 src/main/resources/org/drools/lang/DRL.g 2008-11-11 20:36:18
 
 	package org.drools.lang;
 
 
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
 import java.util.HashMap;
-
-import org.antlr.runtime.BaseRecognizer;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.DFA;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.Lexer;
-import org.antlr.runtime.MismatchedSetException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
 public class DRLLexer extends Lexer {
-    public static final int VT_ACCESSOR_ELEMENT=37;
-    public static final int ACCUMULATE=102;
-    public static final int VT_DATA_TYPE=38;
-    public static final int DOT_STAR=86;
+    public static final int COMMA=91;
+    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 VK_GLOBAL=66;
-    public static final int VK_AND=77;
-    public static final int EQUALS=94;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=127;
+    public static final int END=88;
+    public static final int HexDigit=124;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int MISC=120;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=117;
     public static final int VK_AUTO_FOCUS=49;
-    public static final int VK_SALIENCE=55;
-    public static final int EOF=-1;
-    public static final int VT_PATTERN_TYPE=39;
-    public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VT_OR_INFIX=26;
-    public static final int DOUBLE_AMPER=99;
-    public static final int EOL=121;
-    public static final int GREATER=107;
+    public static final int TILDE=128;
+    public static final int DOT=86;
     public static final int VK_IMPORT=60;
-    public static final int NOT_EQUAL=111;
-    public static final int VK_ACTION=80;
-    public static final int VK_RULE=58;
-    public static final int VK_MEMBEROF=72;
-    public static final int LESS=109;
-    public static final int GRAVE_ACCENT=112;
     public static final int VT_SLOT=15;
-    public static final int VK_OR=76;
-    public static final int VT_AND_PREFIX=23;
-    public static final int NULL=114;
-    public static final int BOOL=96;
-    public static final int VK_QUERY=63;
-    public static final int SEMICOLON=83;
-    public static final int INT=97;
-    public static final int VT_FUNCTION_ID=43;
-    public static final int VT_RHS_CHUNK=17;
-    public static final int VT_FACT_BINDING=32;
-    public static final int VK_ENTRY_POINT=73;
-    public static final int VK_RULEFLOW_GROUP=52;
-    public static final int VK_RESULT=82;
     public static final int VT_PACKAGE_ID=40;
+    public static final int LEFT_SQUARE=115;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=129;
+    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=118;
+    public static final int AT=93;
+    public static final int LEFT_PAREN=90;
+    public static final int DOUBLE_AMPER=100;
+    public static final int VT_QUERY_ID=9;
+    public static final int VT_ACCESSOR_PATH=36;
     public static final int VT_LABEL=8;
+    public static final int WHEN=96;
+    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=122;
-    public static final int VK_NO_LOOP=48;
-    public static final int LEFT_CURLY=118;
-    public static final int VT_FACT=6;
-    public static final int VT_PATTERN=31;
-    public static final int VK_IN=75;
-    public static final int LEFT_PAREN=89;
-    public static final int LESS_EQUAL=110;
-    public static final int VT_IMPORT_ID=41;
-    public static final int VT_RULE_ID=12;
-    public static final int MISC=120;
-    public static final int FROM=100;
-    public static final int END=87;
-    public static final int COLLECT=104;
-    public static final int INIT=103;
-    public static final int EscapeSequence=123;
-    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int OVER=102;
+    public static final int STRING=89;
+    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=81;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=127;
+    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 COLLECT=105;
     public static final int VK_ENABLED=56;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=128;
+    public static final int EQUALS=95;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=125;
     public static final int VK_PACKAGE=61;
-    public static final int OVER=101;
-    public static final int VK_EXTEND=59;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=107;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=62;
+    public static final int VT_AND_IMPLICIT=22;
+    public static final int NULL=114;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=131;
+    public static final int VT_RULE_ATTRIBUTES=16;
     public static final int RIGHT_SQUARE=116;
-    public static final int RIGHT_CURLY=119;
-    public static final int VK_MATCHES=69;
+    public static final int VK_AGENDA_GROUP=51;
     public static final int VT_FACT_OR=33;
-    public static final int VT_FIELD=35;
+    public static final int VK_NOT=74;
+    public static final int VK_DATE_EXPIRES=46;
+    public static final int ARROW=106;
     public static final int FLOAT=113;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
+    public static final int INIT=104;
+    public static final int VK_EXTEND=59;
+    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=99;
+    public static final int LESS=110;
+    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=123;
     public static final int VK_EXISTS=78;
-    public static final int VK_DATE_EXPIRES=46;
-    public static final int ID=84;
-    public static final int HexDigit=124;
-    public static final int VT_OR_PREFIX=24;
+    public static final int INT=98;
+    public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=58;
     public static final int VK_EVAL=67;
-    public static final int DOUBLE_PIPE=98;
-    public static final int AT=92;
-    public static final int RIGHT_PAREN=91;
-    public static final int THEN=117;
-    public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_EXPRESSION_CHAIN=30;
-    public static final int COMMA=90;
-    public static final int EQUAL=106;
-    public static final int VT_BEHAVIOR=21;
-    public static final int VT_QUERY_ID=9;
-    public static final int VK_DIALECT=54;
-    public static final int DOT=85;
-    public static final int VT_GLOBAL_ID=42;
-    public static final int VK_NOT=74;
+    public static final int GREATER=108;
+    public static final int VT_FACT_BINDING=32;
+    public static final int ID=85;
+    public static final int FROM=101;
+    public static final int NOT_EQUAL=112;
+    public static final int RIGHT_CURLY=119;
+    public static final int VK_OPERATOR=83;
+    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=97;
     public static final int VT_FROM_SOURCE=29;
-    public static final int VK_DECLARE=64;
-    public static final int VT_ENTRYPOINT_ID=13;
-    public static final int VT_PAREN_CHUNK=20;
     public static final int VK_CONTAINS=68;
-    public static final int VT_TYPE_DECLARE_ID=11;
-    public static final int VK_REVERSE=81;
     public static final int VK_LOCK_ON_ACTIVE=47;
-    public static final int VK_TEMPLATE=62;
-    public static final int VK_DURATION=53;
-    public static final int VT_RULE_ATTRIBUTES=16;
-    public static final int VT_AND_INFIX=25;
-    public static final int Tokens=130;
-    public static final int VT_ACCESSOR_PATH=36;
-    public static final int MULTI_LINE_COMMENT=129;
-    public static final int VK_FORALL=79;
-    public static final int COLON=93;
+    public static final int VT_FUNCTION_IMPORT=5;
+    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=109;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=111;
+    public static final int ACCUMULATE=103;
+    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=41;
+    public static final int EOL=121;
+    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int Tokens=132;
+    public static final int OctalEscape=126;
+    public static final int VK_ACTION=80;
     public static final int VK_EXCLUDES=70;
-    public static final int VK_SOUNDSLIKE=71;
-    public static final int VT_AND_IMPLICIT=22;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
-    public static final int VT_CURLY_CHUNK=18;
-    public static final int VT_SLOT_ID=14;
-    public static final int VK_ATTRIBUTES=57;
-    public static final int WHEN=95;
-    public static final int UnicodeEscape=125;
-    public static final int VT_SQUARE_CHUNK=19;
-    public static final int VK_DATE_EFFECTIVE=45;
+    public static final int RIGHT_PAREN=92;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VT_PARAM_LIST=44;
-    public static final int ARROW=105;
-    public static final int VT_BIND_FIELD=34;
-    public static final int VK_AGENDA_GROUP=51;
-    public static final int VT_CONSTRAINTS=7;
-    public static final int LEFT_SQUARE=115;
-    public static final int GREATER_EQUAL=108;
-    public static final int OctalEscape=126;
-    public static final int STRING=88;
-
+    public static final int VK_DECLARE=64;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=130;
+    
     	/** The standard method called to automatically emit a token at the
     	 *  outermost lexical rule.  The token object should point into the
     	 *  char buffer start..stop.  If there is a text override in 'text',
@@ -158,7 +155,7 @@
     		emit(t);
     		return t;
     	}
-
+    
     	/** Overrided this method to not output mesages */
     	public void emitErrorMessage(String msg) {
     	}
@@ -166,7 +163,7 @@
     public DRLLexer() {;} 
     public DRLLexer(CharStream input) {
         super(input);
-        ruleMemo = new HashMap[49+1];
+        ruleMemo = new HashMap[50+1];
      }
     public String getGrammarFileName() { return "src/main/resources/org/drools/lang/DRL.g"; }
 
@@ -174,10 +171,10 @@
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // src/main/resources/org/drools/lang/DRL.g:1693:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // src/main/resources/org/drools/lang/DRL.g:1693:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // src/main/resources/org/drools/lang/DRL.g:1731:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // src/main/resources/org/drools/lang/DRL.g:1731:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // src/main/resources/org/drools/lang/DRL.g:1693:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // src/main/resources/org/drools/lang/DRL.g:1731:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -209,28 +206,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1693:19: ' '
+            	    // src/main/resources/org/drools/lang/DRL.g:1731:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1694:19: '\\t'
+            	    // src/main/resources/org/drools/lang/DRL.g:1732:19: '\\t'
             	    {
             	    match('\t'); if (failed) return ;
 
             	    }
             	    break;
             	case 3 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1695:19: '\\f'
+            	    // src/main/resources/org/drools/lang/DRL.g:1733:19: '\\f'
             	    {
             	    match('\f'); if (failed) return ;
 
             	    }
             	    break;
             	case 4 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1696:19: EOL
+            	    // src/main/resources/org/drools/lang/DRL.g:1734:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -263,10 +260,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1702:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // src/main/resources/org/drools/lang/DRL.g:1703:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // src/main/resources/org/drools/lang/DRL.g:1740:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // src/main/resources/org/drools/lang/DRL.g:1741:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // src/main/resources/org/drools/lang/DRL.g:1703:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // src/main/resources/org/drools/lang/DRL.g:1741:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -285,13 +282,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1703:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1741:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1703:14: ( '\\r\\n' )=> '\\r\\n'
+                    // src/main/resources/org/drools/lang/DRL.g:1741:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -299,14 +296,14 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1704:25: '\\r'
+                    // src/main/resources/org/drools/lang/DRL.g:1742:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1705:25: '\\n'
+                    // src/main/resources/org/drools/lang/DRL.g:1743:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -328,10 +325,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // src/main/resources/org/drools/lang/DRL.g:1710:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // src/main/resources/org/drools/lang/DRL.g:1710:4: ( '-' )? ( '0' .. '9' )+
+            // src/main/resources/org/drools/lang/DRL.g:1748:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // src/main/resources/org/drools/lang/DRL.g:1748:4: ( '-' )? ( '0' .. '9' )+
             {
-            // src/main/resources/org/drools/lang/DRL.g:1710:4: ( '-' )?
+            // src/main/resources/org/drools/lang/DRL.g:1748:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -340,7 +337,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1710:5: '-'
+                    // src/main/resources/org/drools/lang/DRL.g:1748:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -349,7 +346,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:1710:10: ( '0' .. '9' )+
+            // src/main/resources/org/drools/lang/DRL.g:1748:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -363,7 +360,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1710:11: '0' .. '9'
+            	    // src/main/resources/org/drools/lang/DRL.g:1748:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -394,10 +391,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // src/main/resources/org/drools/lang/DRL.g:1714:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // src/main/resources/org/drools/lang/DRL.g:1714:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // src/main/resources/org/drools/lang/DRL.g:1752:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // src/main/resources/org/drools/lang/DRL.g:1752:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // src/main/resources/org/drools/lang/DRL.g:1714:4: ( '-' )?
+            // src/main/resources/org/drools/lang/DRL.g:1752:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -406,7 +403,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1714:5: '-'
+                    // src/main/resources/org/drools/lang/DRL.g:1752:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -415,7 +412,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:1714:10: ( '0' .. '9' )+
+            // src/main/resources/org/drools/lang/DRL.g:1752:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -429,7 +426,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1714:11: '0' .. '9'
+            	    // src/main/resources/org/drools/lang/DRL.g:1752:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -447,7 +444,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // src/main/resources/org/drools/lang/DRL.g:1714:26: ( '0' .. '9' )+
+            // src/main/resources/org/drools/lang/DRL.g:1752:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -461,7 +458,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1714:27: '0' .. '9'
+            	    // src/main/resources/org/drools/lang/DRL.g:1752:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -492,7 +489,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // src/main/resources/org/drools/lang/DRL.g:1718:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // src/main/resources/org/drools/lang/DRL.g:1756:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -505,19 +502,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1717:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1755:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1718:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // src/main/resources/org/drools/lang/DRL.g:1756:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // src/main/resources/org/drools/lang/DRL.g:1718:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // src/main/resources/org/drools/lang/DRL.g:1718:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // src/main/resources/org/drools/lang/DRL.g:1756:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // src/main/resources/org/drools/lang/DRL.g:1756:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // src/main/resources/org/drools/lang/DRL.g:1718:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // src/main/resources/org/drools/lang/DRL.g:1756:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -533,14 +530,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:1718:15: EscapeSequence
+                    	    // src/main/resources/org/drools/lang/DRL.g:1756:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:1718:32: ~ ( '\\\\' | '\"' )
+                    	    // src/main/resources/org/drools/lang/DRL.g:1756:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -570,13 +567,13 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1719:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // src/main/resources/org/drools/lang/DRL.g:1757:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // src/main/resources/org/drools/lang/DRL.g:1719:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // src/main/resources/org/drools/lang/DRL.g:1719:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // src/main/resources/org/drools/lang/DRL.g:1757:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // src/main/resources/org/drools/lang/DRL.g:1757:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // src/main/resources/org/drools/lang/DRL.g:1719:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // src/main/resources/org/drools/lang/DRL.g:1757:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -592,14 +589,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:1719:16: EscapeSequence
+                    	    // src/main/resources/org/drools/lang/DRL.g:1757:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:1719:33: ~ ( '\\\\' | '\\'' )
+                    	    // src/main/resources/org/drools/lang/DRL.g:1757:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -640,8 +637,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1723:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // src/main/resources/org/drools/lang/DRL.g:1723:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // src/main/resources/org/drools/lang/DRL.g:1761:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // src/main/resources/org/drools/lang/DRL.g:1761: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();
@@ -666,17 +663,12 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1727: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 )
+            // src/main/resources/org/drools/lang/DRL.g:1765: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);
 
             if ( (LA11_0=='\\') ) {
                 switch ( input.LA(2) ) {
-                case 'u':
-                    {
-                    alt11=2;
-                    }
-                    break;
                 case '\"':
                 case '$':
                 case '&':
@@ -723,6 +715,11 @@
                     alt11=1;
                     }
                     break;
+                case 'u':
+                    {
+                    alt11=2;
+                    }
+                    break;
                 case '0':
                 case '1':
                 case '2':
@@ -738,7 +735,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1725: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("1763: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;
                 }
@@ -747,13 +744,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1725: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("1763: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 :
-                    // src/main/resources/org/drools/lang/DRL.g:1727: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' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    // src/main/resources/org/drools/lang/DRL.g:1765: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)<='}') ) {
@@ -771,14 +768,14 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1731:9: UnicodeEscape
+                    // src/main/resources/org/drools/lang/DRL.g:1769:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1732:9: OctalEscape
+                    // src/main/resources/org/drools/lang/DRL.g:1770:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -795,7 +792,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1737:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // src/main/resources/org/drools/lang/DRL.g:1775:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -806,9 +803,9 @@
                     int LA12_2 = input.LA(3);
 
                     if ( ((LA12_2>='0' && LA12_2<='7')) ) {
-                        int LA12_5 = input.LA(4);
+                        int LA12_4 = input.LA(4);
 
-                        if ( ((LA12_5>='0' && LA12_5<='7')) ) {
+                        if ( ((LA12_4>='0' && LA12_4<='7')) ) {
                             alt12=1;
                         }
                         else {
@@ -829,7 +826,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1735:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1773:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -837,31 +834,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1735:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1773:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1737:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1775:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // src/main/resources/org/drools/lang/DRL.g:1737:14: ( '0' .. '3' )
-                    // src/main/resources/org/drools/lang/DRL.g:1737:15: '0' .. '3'
+                    // src/main/resources/org/drools/lang/DRL.g:1775:14: ( '0' .. '3' )
+                    // src/main/resources/org/drools/lang/DRL.g:1775:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:1737:25: ( '0' .. '7' )
-                    // src/main/resources/org/drools/lang/DRL.g:1737:26: '0' .. '7'
+                    // src/main/resources/org/drools/lang/DRL.g:1775:25: ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1775:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:1737:36: ( '0' .. '7' )
-                    // src/main/resources/org/drools/lang/DRL.g:1737:37: '0' .. '7'
+                    // src/main/resources/org/drools/lang/DRL.g:1775:36: ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1775:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -871,18 +868,18 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1738:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1776:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // src/main/resources/org/drools/lang/DRL.g:1738:14: ( '0' .. '7' )
-                    // src/main/resources/org/drools/lang/DRL.g:1738:15: '0' .. '7'
+                    // src/main/resources/org/drools/lang/DRL.g:1776:14: ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1776:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:1738:25: ( '0' .. '7' )
-                    // src/main/resources/org/drools/lang/DRL.g:1738:26: '0' .. '7'
+                    // src/main/resources/org/drools/lang/DRL.g:1776:25: ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1776:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -892,11 +889,11 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1739:9: '\\\\' ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1777:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // src/main/resources/org/drools/lang/DRL.g:1739:14: ( '0' .. '7' )
-                    // src/main/resources/org/drools/lang/DRL.g:1739:15: '0' .. '7'
+                    // src/main/resources/org/drools/lang/DRL.g:1777:14: ( '0' .. '7' )
+                    // src/main/resources/org/drools/lang/DRL.g:1777:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -916,8 +913,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1744:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // src/main/resources/org/drools/lang/DRL.g:1744:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // src/main/resources/org/drools/lang/DRL.g:1782:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // src/main/resources/org/drools/lang/DRL.g:1782:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -938,10 +935,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // src/main/resources/org/drools/lang/DRL.g:1748:2: ( ( 'true' | 'false' ) )
-            // src/main/resources/org/drools/lang/DRL.g:1748:4: ( 'true' | 'false' )
+            // src/main/resources/org/drools/lang/DRL.g:1786:2: ( ( 'true' | 'false' ) )
+            // src/main/resources/org/drools/lang/DRL.g:1786:4: ( 'true' | 'false' )
             {
-            // src/main/resources/org/drools/lang/DRL.g:1748:4: ( 'true' | 'false' )
+            // src/main/resources/org/drools/lang/DRL.g:1786:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -954,13 +951,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1748:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1786:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1748:5: 'true'
+                    // src/main/resources/org/drools/lang/DRL.g:1786:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -968,7 +965,7 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1748:12: 'false'
+                    // src/main/resources/org/drools/lang/DRL.g:1786:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -992,8 +989,8 @@
     public final void mACCUMULATE() throws RecognitionException {
         try {
             int _type = ACCUMULATE;
-            // src/main/resources/org/drools/lang/DRL.g:1752:2: ( 'accumulate' )
-            // src/main/resources/org/drools/lang/DRL.g:1752:4: 'accumulate'
+            // src/main/resources/org/drools/lang/DRL.g:1790:2: ( 'accumulate' )
+            // src/main/resources/org/drools/lang/DRL.g:1790:4: 'accumulate'
             {
             match("accumulate"); if (failed) return ;
 
@@ -1011,8 +1008,8 @@
     public final void mCOLLECT() throws RecognitionException {
         try {
             int _type = COLLECT;
-            // src/main/resources/org/drools/lang/DRL.g:1756:2: ( 'collect' )
-            // src/main/resources/org/drools/lang/DRL.g:1756:4: 'collect'
+            // src/main/resources/org/drools/lang/DRL.g:1794:2: ( 'collect' )
+            // src/main/resources/org/drools/lang/DRL.g:1794:4: 'collect'
             {
             match("collect"); if (failed) return ;
 
@@ -1030,8 +1027,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // src/main/resources/org/drools/lang/DRL.g:1759:5: ( 'end' )
-            // src/main/resources/org/drools/lang/DRL.g:1759:7: 'end'
+            // src/main/resources/org/drools/lang/DRL.g:1797:5: ( 'end' )
+            // src/main/resources/org/drools/lang/DRL.g:1797:7: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1049,8 +1046,8 @@
     public final void mFROM() throws RecognitionException {
         try {
             int _type = FROM;
-            // src/main/resources/org/drools/lang/DRL.g:1763:2: ( 'from' )
-            // src/main/resources/org/drools/lang/DRL.g:1763:4: 'from'
+            // src/main/resources/org/drools/lang/DRL.g:1801:2: ( 'from' )
+            // src/main/resources/org/drools/lang/DRL.g:1801:4: 'from'
             {
             match("from"); if (failed) return ;
 
@@ -1068,8 +1065,8 @@
     public final void mINIT() throws RecognitionException {
         try {
             int _type = INIT;
-            // src/main/resources/org/drools/lang/DRL.g:1767:2: ( 'init' )
-            // src/main/resources/org/drools/lang/DRL.g:1767:4: 'init'
+            // src/main/resources/org/drools/lang/DRL.g:1805:2: ( 'init' )
+            // src/main/resources/org/drools/lang/DRL.g:1805:4: 'init'
             {
             match("init"); if (failed) return ;
 
@@ -1087,8 +1084,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // src/main/resources/org/drools/lang/DRL.g:1771:2: ( 'null' )
-            // src/main/resources/org/drools/lang/DRL.g:1771:4: 'null'
+            // src/main/resources/org/drools/lang/DRL.g:1809:2: ( 'null' )
+            // src/main/resources/org/drools/lang/DRL.g:1809:4: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -1106,8 +1103,8 @@
     public final void mOVER() throws RecognitionException {
         try {
             int _type = OVER;
-            // src/main/resources/org/drools/lang/DRL.g:1775:2: ( 'over' )
-            // src/main/resources/org/drools/lang/DRL.g:1775:4: 'over'
+            // src/main/resources/org/drools/lang/DRL.g:1813:2: ( 'over' )
+            // src/main/resources/org/drools/lang/DRL.g:1813:4: 'over'
             {
             match("over"); if (failed) return ;
 
@@ -1125,8 +1122,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // src/main/resources/org/drools/lang/DRL.g:1779:2: ( 'then' )
-            // src/main/resources/org/drools/lang/DRL.g:1779:4: 'then'
+            // src/main/resources/org/drools/lang/DRL.g:1817:2: ( 'then' )
+            // src/main/resources/org/drools/lang/DRL.g:1817:4: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1144,8 +1141,8 @@
     public final void mWHEN() throws RecognitionException {
         try {
             int _type = WHEN;
-            // src/main/resources/org/drools/lang/DRL.g:1783:2: ( 'when' )
-            // src/main/resources/org/drools/lang/DRL.g:1783:4: 'when'
+            // src/main/resources/org/drools/lang/DRL.g:1821:2: ( 'when' )
+            // src/main/resources/org/drools/lang/DRL.g:1821:4: 'when'
             {
             match("when"); if (failed) return ;
 
@@ -1163,8 +1160,8 @@
     public final void mGRAVE_ACCENT() throws RecognitionException {
         try {
             int _type = GRAVE_ACCENT;
-            // src/main/resources/org/drools/lang/DRL.g:1787:2: ( '`' )
-            // src/main/resources/org/drools/lang/DRL.g:1787:4: '`'
+            // src/main/resources/org/drools/lang/DRL.g:1833:2: ( '`' )
+            // src/main/resources/org/drools/lang/DRL.g:1833:4: '`'
             {
             match('`'); if (failed) return ;
 
@@ -1177,12 +1174,30 @@
     }
     // $ANTLR end GRAVE_ACCENT
 
+    // $ANTLR start TILDE
+    public final void mTILDE() throws RecognitionException {
+        try {
+            int _type = TILDE;
+            // src/main/resources/org/drools/lang/DRL.g:1836:7: ( '~' )
+            // src/main/resources/org/drools/lang/DRL.g:1836:9: '~'
+            {
+            match('~'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end TILDE
+
     // $ANTLR start AT
     public final void mAT() throws RecognitionException {
         try {
             int _type = AT;
-            // src/main/resources/org/drools/lang/DRL.g:1790:4: ( '@' )
-            // src/main/resources/org/drools/lang/DRL.g:1790:6: '@'
+            // src/main/resources/org/drools/lang/DRL.g:1838:4: ( '@' )
+            // src/main/resources/org/drools/lang/DRL.g:1838:6: '@'
             {
             match('@'); if (failed) return ;
 
@@ -1199,8 +1214,8 @@
     public final void mEQUALS() throws RecognitionException {
         try {
             int _type = EQUALS;
-            // src/main/resources/org/drools/lang/DRL.g:1794:2: ( '=' )
-            // src/main/resources/org/drools/lang/DRL.g:1794:4: '='
+            // src/main/resources/org/drools/lang/DRL.g:1842:2: ( '=' )
+            // src/main/resources/org/drools/lang/DRL.g:1842:4: '='
             {
             match('='); if (failed) return ;
 
@@ -1217,8 +1232,8 @@
     public final void mSEMICOLON() throws RecognitionException {
         try {
             int _type = SEMICOLON;
-            // src/main/resources/org/drools/lang/DRL.g:1798:2: ( ';' )
-            // src/main/resources/org/drools/lang/DRL.g:1798:4: ';'
+            // src/main/resources/org/drools/lang/DRL.g:1846:2: ( ';' )
+            // src/main/resources/org/drools/lang/DRL.g:1846:4: ';'
             {
             match(';'); if (failed) return ;
 
@@ -1235,8 +1250,8 @@
     public final void mDOT_STAR() throws RecognitionException {
         try {
             int _type = DOT_STAR;
-            // src/main/resources/org/drools/lang/DRL.g:1802:2: ( '.*' )
-            // src/main/resources/org/drools/lang/DRL.g:1802:4: '.*'
+            // src/main/resources/org/drools/lang/DRL.g:1850:2: ( '.*' )
+            // src/main/resources/org/drools/lang/DRL.g:1850:4: '.*'
             {
             match(".*"); if (failed) return ;
 
@@ -1254,8 +1269,8 @@
     public final void mCOLON() throws RecognitionException {
         try {
             int _type = COLON;
-            // src/main/resources/org/drools/lang/DRL.g:1806:2: ( ':' )
-            // src/main/resources/org/drools/lang/DRL.g:1806:4: ':'
+            // src/main/resources/org/drools/lang/DRL.g:1854:2: ( ':' )
+            // src/main/resources/org/drools/lang/DRL.g:1854:4: ':'
             {
             match(':'); if (failed) return ;
 
@@ -1272,8 +1287,8 @@
     public final void mEQUAL() throws RecognitionException {
         try {
             int _type = EQUAL;
-            // src/main/resources/org/drools/lang/DRL.g:1810:2: ( '==' )
-            // src/main/resources/org/drools/lang/DRL.g:1810:4: '=='
+            // src/main/resources/org/drools/lang/DRL.g:1858:2: ( '==' )
+            // src/main/resources/org/drools/lang/DRL.g:1858:4: '=='
             {
             match("=="); if (failed) return ;
 
@@ -1291,8 +1306,8 @@
     public final void mNOT_EQUAL() throws RecognitionException {
         try {
             int _type = NOT_EQUAL;
-            // src/main/resources/org/drools/lang/DRL.g:1814:2: ( '!=' )
-            // src/main/resources/org/drools/lang/DRL.g:1814:4: '!='
+            // src/main/resources/org/drools/lang/DRL.g:1862:2: ( '!=' )
+            // src/main/resources/org/drools/lang/DRL.g:1862:4: '!='
             {
             match("!="); if (failed) return ;
 
@@ -1310,8 +1325,8 @@
     public final void mGREATER() throws RecognitionException {
         try {
             int _type = GREATER;
-            // src/main/resources/org/drools/lang/DRL.g:1818:2: ( '>' )
-            // src/main/resources/org/drools/lang/DRL.g:1818:4: '>'
+            // src/main/resources/org/drools/lang/DRL.g:1866:2: ( '>' )
+            // src/main/resources/org/drools/lang/DRL.g:1866:4: '>'
             {
             match('>'); if (failed) return ;
 
@@ -1328,8 +1343,8 @@
     public final void mGREATER_EQUAL() throws RecognitionException {
         try {
             int _type = GREATER_EQUAL;
-            // src/main/resources/org/drools/lang/DRL.g:1822:2: ( '>=' )
-            // src/main/resources/org/drools/lang/DRL.g:1822:4: '>='
+            // src/main/resources/org/drools/lang/DRL.g:1870:2: ( '>=' )
+            // src/main/resources/org/drools/lang/DRL.g:1870:4: '>='
             {
             match(">="); if (failed) return ;
 
@@ -1347,8 +1362,8 @@
     public final void mLESS() throws RecognitionException {
         try {
             int _type = LESS;
-            // src/main/resources/org/drools/lang/DRL.g:1826:2: ( '<' )
-            // src/main/resources/org/drools/lang/DRL.g:1826:4: '<'
+            // src/main/resources/org/drools/lang/DRL.g:1874:2: ( '<' )
+            // src/main/resources/org/drools/lang/DRL.g:1874:4: '<'
             {
             match('<'); if (failed) return ;
 
@@ -1365,8 +1380,8 @@
     public final void mLESS_EQUAL() throws RecognitionException {
         try {
             int _type = LESS_EQUAL;
-            // src/main/resources/org/drools/lang/DRL.g:1830:2: ( '<=' )
-            // src/main/resources/org/drools/lang/DRL.g:1830:4: '<='
+            // src/main/resources/org/drools/lang/DRL.g:1878:2: ( '<=' )
+            // src/main/resources/org/drools/lang/DRL.g:1878:4: '<='
             {
             match("<="); if (failed) return ;
 
@@ -1384,8 +1399,8 @@
     public final void mARROW() throws RecognitionException {
         try {
             int _type = ARROW;
-            // src/main/resources/org/drools/lang/DRL.g:1834:2: ( '->' )
-            // src/main/resources/org/drools/lang/DRL.g:1834:4: '->'
+            // src/main/resources/org/drools/lang/DRL.g:1882:2: ( '->' )
+            // src/main/resources/org/drools/lang/DRL.g:1882:4: '->'
             {
             match("->"); if (failed) return ;
 
@@ -1403,7 +1418,7 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // src/main/resources/org/drools/lang/DRL.g:1838:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* | '%' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+ '%' )
+            // src/main/resources/org/drools/lang/DRL.g:1886:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* | '%' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+ '%' )
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -1416,13 +1431,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1837:1: ID : ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* | '%' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+ '%' );", 16, 0, input);
+                    new NoViableAltException("1885:1: ID : ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* | '%' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+ '%' );", 16, 0, input);
 
                 throw nvae;
             }
             switch (alt16) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1838:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+                    // src/main/resources/org/drools/lang/DRL.g:1886: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();
@@ -1435,7 +1450,7 @@
                         recover(mse);    throw mse;
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:1838:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+                    // src/main/resources/org/drools/lang/DRL.g:1886:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
                     loop14:
                     do {
                         int alt14=2;
@@ -1474,7 +1489,7 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1839:4: '%' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+ '%'
+                    // src/main/resources/org/drools/lang/DRL.g:1887:4: '%' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+ '%'
                     {
                     match('%'); if (failed) return ;
                     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') ) {
@@ -1488,7 +1503,7 @@
                         recover(mse);    throw mse;
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:1839:54: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+
+                    // src/main/resources/org/drools/lang/DRL.g:1887:54: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )+
                     int cnt15=0;
                     loop15:
                     do {
@@ -1549,8 +1564,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // src/main/resources/org/drools/lang/DRL.g:1844:9: ( '(' )
-            // src/main/resources/org/drools/lang/DRL.g:1844:11: '('
+            // src/main/resources/org/drools/lang/DRL.g:1892:9: ( '(' )
+            // src/main/resources/org/drools/lang/DRL.g:1892:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1567,8 +1582,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // src/main/resources/org/drools/lang/DRL.g:1848:9: ( ')' )
-            // src/main/resources/org/drools/lang/DRL.g:1848:11: ')'
+            // src/main/resources/org/drools/lang/DRL.g:1896:9: ( ')' )
+            // src/main/resources/org/drools/lang/DRL.g:1896:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1585,8 +1600,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // src/main/resources/org/drools/lang/DRL.g:1852:9: ( '[' )
-            // src/main/resources/org/drools/lang/DRL.g:1852:11: '['
+            // src/main/resources/org/drools/lang/DRL.g:1900:9: ( '[' )
+            // src/main/resources/org/drools/lang/DRL.g:1900:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1603,8 +1618,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // src/main/resources/org/drools/lang/DRL.g:1856:9: ( ']' )
-            // src/main/resources/org/drools/lang/DRL.g:1856:11: ']'
+            // src/main/resources/org/drools/lang/DRL.g:1904:9: ( ']' )
+            // src/main/resources/org/drools/lang/DRL.g:1904:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -1621,8 +1636,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // src/main/resources/org/drools/lang/DRL.g:1860:9: ( '{' )
-            // src/main/resources/org/drools/lang/DRL.g:1860:11: '{'
+            // src/main/resources/org/drools/lang/DRL.g:1908:9: ( '{' )
+            // src/main/resources/org/drools/lang/DRL.g:1908:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -1639,8 +1654,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // src/main/resources/org/drools/lang/DRL.g:1864:9: ( '}' )
-            // src/main/resources/org/drools/lang/DRL.g:1864:11: '}'
+            // src/main/resources/org/drools/lang/DRL.g:1912:9: ( '}' )
+            // src/main/resources/org/drools/lang/DRL.g:1912:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -1657,8 +1672,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // src/main/resources/org/drools/lang/DRL.g:1867:7: ( ',' )
-            // src/main/resources/org/drools/lang/DRL.g:1867:9: ','
+            // src/main/resources/org/drools/lang/DRL.g:1915:7: ( ',' )
+            // src/main/resources/org/drools/lang/DRL.g:1915:9: ','
             {
             match(','); if (failed) return ;
 
@@ -1675,8 +1690,8 @@
     public final void mDOT() throws RecognitionException {
         try {
             int _type = DOT;
-            // src/main/resources/org/drools/lang/DRL.g:1870:5: ( '.' )
-            // src/main/resources/org/drools/lang/DRL.g:1870:7: '.'
+            // src/main/resources/org/drools/lang/DRL.g:1918:5: ( '.' )
+            // src/main/resources/org/drools/lang/DRL.g:1918:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -1693,8 +1708,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // src/main/resources/org/drools/lang/DRL.g:1874:2: ( '&&' )
-            // src/main/resources/org/drools/lang/DRL.g:1874:4: '&&'
+            // src/main/resources/org/drools/lang/DRL.g:1922:2: ( '&&' )
+            // src/main/resources/org/drools/lang/DRL.g:1922:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -1712,8 +1727,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // src/main/resources/org/drools/lang/DRL.g:1878:2: ( '||' )
-            // src/main/resources/org/drools/lang/DRL.g:1878:4: '||'
+            // src/main/resources/org/drools/lang/DRL.g:1926:2: ( '||' )
+            // src/main/resources/org/drools/lang/DRL.g:1926:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -1731,11 +1746,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // src/main/resources/org/drools/lang/DRL.g:1882:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // src/main/resources/org/drools/lang/DRL.g:1882:4: '#' ( options {greedy=false; } : . )* EOL
+            // src/main/resources/org/drools/lang/DRL.g:1930:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // src/main/resources/org/drools/lang/DRL.g:1930:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // src/main/resources/org/drools/lang/DRL.g:1882:8: ( options {greedy=false; } : . )*
+            // src/main/resources/org/drools/lang/DRL.g:1930:8: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -1754,7 +1769,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1882:35: .
+            	    // src/main/resources/org/drools/lang/DRL.g:1930:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1784,12 +1799,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // src/main/resources/org/drools/lang/DRL.g:1888:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // src/main/resources/org/drools/lang/DRL.g:1888:4: '//' ( options {greedy=false; } : . )* EOL
+            // src/main/resources/org/drools/lang/DRL.g:1936:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // src/main/resources/org/drools/lang/DRL.g:1936:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // src/main/resources/org/drools/lang/DRL.g:1888:9: ( options {greedy=false; } : . )*
+            // src/main/resources/org/drools/lang/DRL.g:1936:9: ( options {greedy=false; } : . )*
             loop18:
             do {
                 int alt18=2;
@@ -1808,7 +1823,7 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1888:36: .
+            	    // src/main/resources/org/drools/lang/DRL.g:1936:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1838,12 +1853,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // src/main/resources/org/drools/lang/DRL.g:1893:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // src/main/resources/org/drools/lang/DRL.g:1893:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // src/main/resources/org/drools/lang/DRL.g:1941:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // src/main/resources/org/drools/lang/DRL.g:1941:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // src/main/resources/org/drools/lang/DRL.g:1893:9: ( options {greedy=false; } : . )*
+            // src/main/resources/org/drools/lang/DRL.g:1941:9: ( options {greedy=false; } : . )*
             loop19:
             do {
                 int alt19=2;
@@ -1868,7 +1883,7 @@
 
                 switch (alt19) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1893:35: .
+            	    // src/main/resources/org/drools/lang/DRL.g:1941:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1899,7 +1914,7 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // src/main/resources/org/drools/lang/DRL.g:1897:7: ( '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // src/main/resources/org/drools/lang/DRL.g:1945:7: ( '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // 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)=='|' ) {
@@ -1924,8 +1939,8 @@
     // $ANTLR end MISC
 
     public void mTokens() throws RecognitionException {
-        // src/main/resources/org/drools/lang/DRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | ACCUMULATE | COLLECT | END | FROM | INIT | NULL | OVER | THEN | WHEN | 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 alt20=42;
+        // src/main/resources/org/drools/lang/DRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | ACCUMULATE | COLLECT | END | FROM | INIT | NULL | OVER | THEN | WHEN | GRAVE_ACCENT | TILDE | 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 alt20=43;
         alt20 = dfa20.predict(input);
         switch (alt20) {
             case 1 :
@@ -2034,190 +2049,197 @@
                 }
                 break;
             case 16 :
-                // src/main/resources/org/drools/lang/DRL.g:1:101: AT
+                // src/main/resources/org/drools/lang/DRL.g:1:101: TILDE
                 {
-                mAT(); if (failed) return ;
+                mTILDE(); if (failed) return ;
 
                 }
                 break;
             case 17 :
-                // src/main/resources/org/drools/lang/DRL.g:1:104: EQUALS
+                // src/main/resources/org/drools/lang/DRL.g:1:107: AT
                 {
-                mEQUALS(); if (failed) return ;
+                mAT(); if (failed) return ;
 
                 }
                 break;
             case 18 :
-                // src/main/resources/org/drools/lang/DRL.g:1:111: SEMICOLON
+                // src/main/resources/org/drools/lang/DRL.g:1:110: EQUALS
                 {
-                mSEMICOLON(); if (failed) return ;
+                mEQUALS(); if (failed) return ;
 
                 }
                 break;
             case 19 :
-                // src/main/resources/org/drools/lang/DRL.g:1:121: DOT_STAR
+                // src/main/resources/org/drools/lang/DRL.g:1:117: SEMICOLON
                 {
-                mDOT_STAR(); if (failed) return ;
+                mSEMICOLON(); if (failed) return ;
 
                 }
                 break;
             case 20 :
-                // src/main/resources/org/drools/lang/DRL.g:1:130: COLON
+                // src/main/resources/org/drools/lang/DRL.g:1:127: DOT_STAR
                 {
-                mCOLON(); if (failed) return ;
+                mDOT_STAR(); if (failed) return ;
 
                 }
                 break;
             case 21 :
-                // src/main/resources/org/drools/lang/DRL.g:1:136: EQUAL
+                // src/main/resources/org/drools/lang/DRL.g:1:136: COLON
                 {
-                mEQUAL(); if (failed) return ;
+                mCOLON(); if (failed) return ;
 
                 }
                 break;
             case 22 :
-                // src/main/resources/org/drools/lang/DRL.g:1:142: NOT_EQUAL
+                // src/main/resources/org/drools/lang/DRL.g:1:142: EQUAL
                 {
-                mNOT_EQUAL(); if (failed) return ;
+                mEQUAL(); if (failed) return ;
 
                 }
                 break;
             case 23 :
-                // src/main/resources/org/drools/lang/DRL.g:1:152: GREATER
+                // src/main/resources/org/drools/lang/DRL.g:1:148: NOT_EQUAL
                 {
-                mGREATER(); if (failed) return ;
+                mNOT_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 24 :
-                // src/main/resources/org/drools/lang/DRL.g:1:160: GREATER_EQUAL
+                // src/main/resources/org/drools/lang/DRL.g:1:158: GREATER
                 {
-                mGREATER_EQUAL(); if (failed) return ;
+                mGREATER(); if (failed) return ;
 
                 }
                 break;
             case 25 :
-                // src/main/resources/org/drools/lang/DRL.g:1:174: LESS
+                // src/main/resources/org/drools/lang/DRL.g:1:166: GREATER_EQUAL
                 {
-                mLESS(); if (failed) return ;
+                mGREATER_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 26 :
-                // src/main/resources/org/drools/lang/DRL.g:1:179: LESS_EQUAL
+                // src/main/resources/org/drools/lang/DRL.g:1:180: LESS
                 {
-                mLESS_EQUAL(); if (failed) return ;
+                mLESS(); if (failed) return ;
 
                 }
                 break;
             case 27 :
-                // src/main/resources/org/drools/lang/DRL.g:1:190: ARROW
+                // src/main/resources/org/drools/lang/DRL.g:1:185: LESS_EQUAL
                 {
-                mARROW(); if (failed) return ;
+                mLESS_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 28 :
-                // src/main/resources/org/drools/lang/DRL.g:1:196: ID
+                // src/main/resources/org/drools/lang/DRL.g:1:196: ARROW
                 {
-                mID(); if (failed) return ;
+                mARROW(); if (failed) return ;
 
                 }
                 break;
             case 29 :
-                // src/main/resources/org/drools/lang/DRL.g:1:199: LEFT_PAREN
+                // src/main/resources/org/drools/lang/DRL.g:1:202: ID
                 {
-                mLEFT_PAREN(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 30 :
-                // src/main/resources/org/drools/lang/DRL.g:1:210: RIGHT_PAREN
+                // src/main/resources/org/drools/lang/DRL.g:1:205: LEFT_PAREN
                 {
-                mRIGHT_PAREN(); if (failed) return ;
+                mLEFT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 31 :
-                // src/main/resources/org/drools/lang/DRL.g:1:222: LEFT_SQUARE
+                // src/main/resources/org/drools/lang/DRL.g:1:216: RIGHT_PAREN
                 {
-                mLEFT_SQUARE(); if (failed) return ;
+                mRIGHT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 32 :
-                // src/main/resources/org/drools/lang/DRL.g:1:234: RIGHT_SQUARE
+                // src/main/resources/org/drools/lang/DRL.g:1:228: LEFT_SQUARE
                 {
-                mRIGHT_SQUARE(); if (failed) return ;
+                mLEFT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 33 :
-                // src/main/resources/org/drools/lang/DRL.g:1:247: LEFT_CURLY
+                // src/main/resources/org/drools/lang/DRL.g:1:240: RIGHT_SQUARE
                 {
-                mLEFT_CURLY(); if (failed) return ;
+                mRIGHT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 34 :
-                // src/main/resources/org/drools/lang/DRL.g:1:258: RIGHT_CURLY
+                // src/main/resources/org/drools/lang/DRL.g:1:253: LEFT_CURLY
                 {
-                mRIGHT_CURLY(); if (failed) return ;
+                mLEFT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 35 :
-                // src/main/resources/org/drools/lang/DRL.g:1:270: COMMA
+                // src/main/resources/org/drools/lang/DRL.g:1:264: RIGHT_CURLY
                 {
-                mCOMMA(); if (failed) return ;
+                mRIGHT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 36 :
-                // src/main/resources/org/drools/lang/DRL.g:1:276: DOT
+                // src/main/resources/org/drools/lang/DRL.g:1:276: COMMA
                 {
-                mDOT(); if (failed) return ;
+                mCOMMA(); if (failed) return ;
 
                 }
                 break;
             case 37 :
-                // src/main/resources/org/drools/lang/DRL.g:1:280: DOUBLE_AMPER
+                // src/main/resources/org/drools/lang/DRL.g:1:282: DOT
                 {
-                mDOUBLE_AMPER(); if (failed) return ;
+                mDOT(); if (failed) return ;
 
                 }
                 break;
             case 38 :
-                // src/main/resources/org/drools/lang/DRL.g:1:293: DOUBLE_PIPE
+                // src/main/resources/org/drools/lang/DRL.g:1:286: DOUBLE_AMPER
                 {
-                mDOUBLE_PIPE(); if (failed) return ;
+                mDOUBLE_AMPER(); if (failed) return ;
 
                 }
                 break;
             case 39 :
-                // src/main/resources/org/drools/lang/DRL.g:1:305: SH_STYLE_SINGLE_LINE_COMMENT
+                // src/main/resources/org/drools/lang/DRL.g:1:299: DOUBLE_PIPE
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mDOUBLE_PIPE(); if (failed) return ;
 
                 }
                 break;
             case 40 :
-                // src/main/resources/org/drools/lang/DRL.g:1:334: C_STYLE_SINGLE_LINE_COMMENT
+                // src/main/resources/org/drools/lang/DRL.g:1:311: SH_STYLE_SINGLE_LINE_COMMENT
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 41 :
-                // src/main/resources/org/drools/lang/DRL.g:1:362: MULTI_LINE_COMMENT
+                // src/main/resources/org/drools/lang/DRL.g:1:340: C_STYLE_SINGLE_LINE_COMMENT
                 {
-                mMULTI_LINE_COMMENT(); if (failed) return ;
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 42 :
-                // src/main/resources/org/drools/lang/DRL.g:1:381: MISC
+                // src/main/resources/org/drools/lang/DRL.g:1:368: MULTI_LINE_COMMENT
                 {
+                mMULTI_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 43 :
+                // src/main/resources/org/drools/lang/DRL.g:1:387: MISC
+                {
                 mMISC(); if (failed) return ;
 
                 }
@@ -2229,8 +2251,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:1703:14: ( '\\r\\n' )
-        // src/main/resources/org/drools/lang/DRL.g:1703:16: '\\r\\n'
+        // src/main/resources/org/drools/lang/DRL.g:1741:14: ( '\\r\\n' )
+        // src/main/resources/org/drools/lang/DRL.g:1741:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 
@@ -2257,71 +2279,71 @@
 
     protected DFA20 dfa20 = new DFA20(this);
     static final String DFA20_eotS =
-        "\2\uffff\1\46\1\50\1\uffff\1\46\11\45\2\uffff\1\66\1\uffff\1\70"+
-        "\1\uffff\1\46\1\73\1\75\1\uffff\1\46\7\uffff\2\46\1\uffff\1\46\5"+
-        "\uffff\13\45\15\uffff\6\45\1\123\4\45\1\130\1\131\1\45\1\133\2\45"+
-        "\1\uffff\1\136\1\137\1\140\1\141\2\uffff\1\130\1\uffff\2\45\4\uffff"+
-        "\3\45\1\147\1\45\1\uffff\1\45\1\152\1\uffff";
+        "\2\uffff\1\47\1\52\1\uffff\1\47\11\46\3\uffff\1\67\1\uffff\1\71"+
+        "\1\uffff\1\47\1\74\1\76\1\uffff\1\47\7\uffff\2\47\1\uffff\1\47\5"+
+        "\uffff\13\46\15\uffff\6\46\1\124\4\46\1\131\1\132\1\133\3\46\1\uffff"+
+        "\1\137\1\140\1\141\1\142\3\uffff\1\131\2\46\4\uffff\3\46\1\150\1"+
+        "\46\1\uffff\1\46\1\153\1\uffff";
     static final String DFA20_eofS =
-        "\153\uffff";
+        "\154\uffff";
     static final String DFA20_minS =
         "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\150\1\141\1\143\1\157\2\156"+
-        "\1\165\1\166\1\150\2\uffff\1\75\1\uffff\1\52\1\uffff\3\75\1\uffff"+
-        "\1\44\7\uffff\1\46\1\174\1\uffff\1\52\5\uffff\1\165\1\145\1\154"+
-        "\1\157\1\143\1\154\1\144\1\151\1\154\2\145\15\uffff\1\145\1\156"+
-        "\1\163\1\155\1\165\1\154\1\60\1\164\1\154\1\162\1\156\2\60\1\145"+
-        "\1\60\1\155\1\145\1\uffff\4\60\2\uffff\1\60\1\uffff\1\165\1\143"+
-        "\4\uffff\1\154\1\164\1\141\1\60\1\164\1\uffff\1\145\1\60\1\uffff";
+        "\1\165\1\166\1\150\3\uffff\1\75\1\uffff\1\52\1\uffff\3\75\1\uffff"+
+        "\1\44\7\uffff\1\46\1\174\1\uffff\1\52\5\uffff\1\165\1\145\1\157"+
+        "\1\154\1\143\1\154\1\144\1\151\1\154\2\145\15\uffff\1\145\1\156"+
+        "\1\155\1\163\1\165\1\154\1\60\1\164\1\154\1\162\1\156\3\60\1\145"+
+        "\1\155\1\145\1\uffff\4\60\3\uffff\1\60\1\165\1\143\4\uffff\1\154"+
+        "\1\164\1\141\1\60\1\164\1\uffff\1\145\1\60\1\uffff";
     static final String DFA20_maxS =
-        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\2\162\1\143\1\157\2"+
-        "\156\1\165\1\166\1\150\2\uffff\1\75\1\uffff\1\52\1\uffff\3\75\1"+
-        "\uffff\1\u00ff\7\uffff\1\46\1\174\1\uffff\1\57\5\uffff\1\165\1\145"+
-        "\1\154\1\157\1\143\1\154\1\144\1\151\1\154\2\145\15\uffff\1\145"+
-        "\1\156\1\163\1\155\1\165\1\154\1\u00ff\1\164\1\154\1\162\1\156\2"+
-        "\u00ff\1\145\1\u00ff\1\155\1\145\1\uffff\4\u00ff\2\uffff\1\u00ff"+
-        "\1\uffff\1\165\1\143\4\uffff\1\154\1\164\1\141\1\u00ff\1\164\1\uffff"+
-        "\1\145\1\u00ff\1\uffff";
+        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\2\162\1\143\1\157\2\156"+
+        "\1\165\1\166\1\150\3\uffff\1\75\1\uffff\1\52\1\uffff\3\75\1\uffff"+
+        "\1\u00ff\7\uffff\1\46\1\174\1\uffff\1\57\5\uffff\1\165\1\145\1\157"+
+        "\1\154\1\143\1\154\1\144\1\151\1\154\2\145\15\uffff\1\145\1\156"+
+        "\1\155\1\163\1\165\1\154\1\u00ff\1\164\1\154\1\162\1\156\3\u00ff"+
+        "\1\145\1\155\1\145\1\uffff\4\u00ff\3\uffff\1\u00ff\1\165\1\143\4"+
+        "\uffff\1\154\1\164\1\141\1\u00ff\1\164\1\uffff\1\145\1\u00ff\1\uffff";
     static final String DFA20_acceptS =
-        "\1\uffff\1\1\2\uffff\1\4\12\uffff\1\17\1\20\1\uffff\1\22\1\uffff"+
-        "\1\24\3\uffff\1\34\1\uffff\1\35\1\36\1\37\1\40\1\41\1\42\1\43\2"+
-        "\uffff\1\47\1\uffff\1\34\1\52\1\33\1\2\1\3\13\uffff\1\25\1\21\1"+
-        "\23\1\44\1\26\1\30\1\27\1\32\1\31\1\45\1\46\1\51\1\50\21\uffff\1"+
-        "\10\4\uffff\1\5\1\15\1\uffff\1\11\2\uffff\1\12\1\13\1\14\1\16\5"+
-        "\uffff\1\7\2\uffff\1\6";
+        "\1\uffff\1\1\2\uffff\1\4\12\uffff\1\17\1\20\1\21\1\uffff\1\23\1"+
+        "\uffff\1\25\3\uffff\1\35\1\uffff\1\36\1\37\1\40\1\41\1\42\1\43\1"+
+        "\44\2\uffff\1\50\1\uffff\1\35\1\53\1\34\1\3\1\2\13\uffff\1\26\1"+
+        "\22\1\24\1\45\1\27\1\31\1\30\1\33\1\32\1\46\1\47\1\52\1\51\21\uffff"+
+        "\1\10\4\uffff\1\5\1\15\1\11\3\uffff\1\12\1\13\1\14\1\16\5\uffff"+
+        "\1\7\2\uffff\1\6";
     static final String DFA20_specialS =
-        "\153\uffff}>";
+        "\154\uffff}>";
     static final String[] DFA20_transitionS = {
-            "\2\1\1\uffff\2\1\22\uffff\1\1\1\25\1\4\1\43\1\30\1\31\1\41"+
-            "\1\5\1\32\1\33\2\46\1\40\1\2\1\23\1\44\12\3\1\24\1\22\1\27\1"+
-            "\21\1\26\1\46\1\20\32\45\1\34\1\46\1\35\1\46\1\30\1\17\1\10"+
-            "\1\45\1\11\1\45\1\12\1\7\2\45\1\13\4\45\1\14\1\15\4\45\1\6\2"+
-            "\45\1\16\3\45\1\36\1\42\1\37\102\uffff\100\45",
+            "\2\1\1\uffff\2\1\22\uffff\1\1\1\26\1\4\1\44\1\31\1\32\1\42\1"+
+            "\5\1\33\1\34\2\47\1\41\1\2\1\24\1\45\12\3\1\25\1\23\1\30\1\22"+
+            "\1\27\1\47\1\21\32\46\1\35\1\47\1\36\1\47\1\31\1\17\1\10\1\46"+
+            "\1\11\1\46\1\12\1\7\2\46\1\13\4\46\1\14\1\15\4\46\1\6\2\46\1"+
+            "\16\3\46\1\37\1\43\1\40\1\20\101\uffff\100\46",
             "",
-            "\12\3\4\uffff\1\47",
+            "\12\3\4\uffff\1\50",
             "\1\51\1\uffff\12\3",
             "",
             "\uffff\4",
-            "\1\53\11\uffff\1\52",
-            "\1\54\20\uffff\1\55",
-            "\1\56",
+            "\1\54\11\uffff\1\53",
+            "\1\56\20\uffff\1\55",
             "\1\57",
             "\1\60",
             "\1\61",
             "\1\62",
             "\1\63",
             "\1\64",
+            "\1\65",
             "",
             "",
-            "\1\65",
             "",
-            "\1\67",
+            "\1\66",
             "",
-            "\1\71",
+            "\1\70",
+            "",
             "\1\72",
-            "\1\74",
+            "\1\73",
+            "\1\75",
             "",
-            "\1\45\34\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
+            "\1\46\34\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
             "",
             "",
             "",
@@ -2329,16 +2351,15 @@
             "",
             "",
             "",
-            "\1\76",
             "\1\77",
+            "\1\100",
             "",
-            "\1\100\4\uffff\1\101",
+            "\1\101\4\uffff\1\102",
             "",
             "",
             "",
             "",
             "",
-            "\1\102",
             "\1\103",
             "\1\104",
             "\1\105",
@@ -2349,6 +2370,7 @@
             "\1\112",
             "\1\113",
             "\1\114",
+            "\1\115",
             "",
             "",
             "",
@@ -2362,57 +2384,57 @@
             "",
             "",
             "",
-            "\1\115",
             "\1\116",
             "\1\117",
             "\1\120",
             "\1\121",
             "\1\122",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\1\124",
+            "\1\123",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
             "\1\125",
             "\1\126",
             "\1\127",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\1\132",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
+            "\1\130",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
             "\1\134",
             "\1\135",
+            "\1\136",
             "",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
             "",
             "",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
             "",
-            "\1\142",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
             "\1\143",
+            "\1\144",
             "",
             "",
             "",
             "",
-            "\1\144",
             "\1\145",
             "\1\146",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
-            "\1\150",
+            "\1\147",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
+            "\1\151",
             "",
-            "\1\151",
-            "\12\45\7\uffff\32\45\4\uffff\1\45\1\uffff\32\45\105\uffff"+
-            "\100\45",
+            "\1\152",
+            "\12\46\7\uffff\32\46\4\uffff\1\46\1\uffff\32\46\105\uffff\100"+
+            "\46",
             ""
     };
 
@@ -2446,9 +2468,9 @@
             this.transition = DFA20_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( WS | INT | FLOAT | STRING | BOOL | ACCUMULATE | COLLECT | END | FROM | INIT | NULL | OVER | THEN | WHEN | 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 );";
+            return "1:1: Tokens : ( WS | INT | FLOAT | STRING | BOOL | ACCUMULATE | COLLECT | END | FROM | INIT | NULL | OVER | THEN | WHEN | GRAVE_ACCENT | TILDE | 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 );";
         }
     }
  
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-11-12 01:39:11 UTC (rev 23825)
@@ -1,170 +1,158 @@
-// $ANTLR 3.0.1 src/main/resources/org/drools/lang/DRL.g 2008-10-18 17:54:42
+// $ANTLR 3.0.1 src/main/resources/org/drools/lang/DRL.g 2008-11-11 20:36:17
 
 	package org.drools.lang;
 	
-	import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
+	import java.util.List;
+	import java.util.LinkedList;
+	import org.drools.compiler.DroolsParserException;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
 import java.util.List;
+import java.util.ArrayList;
 import java.util.Map;
-import java.util.Stack;
+import java.util.HashMap;
 
-import org.antlr.runtime.BaseRecognizer;
-import org.antlr.runtime.BitSet;
-import org.antlr.runtime.DFA;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.FailedPredicateException;
-import org.antlr.runtime.IntStream;
-import org.antlr.runtime.MismatchedSetException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.Parser;
-import org.antlr.runtime.ParserRuleReturnScope;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
-import org.antlr.runtime.TokenStream;
-import org.antlr.runtime.tree.CommonTreeAdaptor;
-import org.antlr.runtime.tree.RewriteEarlyExitException;
-import org.antlr.runtime.tree.RewriteEmptyStreamException;
-import org.antlr.runtime.tree.RewriteRuleSubtreeStream;
-import org.antlr.runtime.tree.RewriteRuleTokenStream;
-import org.antlr.runtime.tree.TreeAdaptor;
-import org.drools.compiler.DroolsParserException;
+import org.antlr.runtime.tree.*;
 
 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_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_RULE", "VK_EXTEND", "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_ACTION", "VK_REVERSE", "VK_RESULT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "AT", "COLON", "EQUALS", "WHEN", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "FROM", "OVER", "ACCUMULATE", "INIT", "COLLECT", "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_RULE", "VK_EXTEND", "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_ACTION", "VK_REVERSE", "VK_RESULT", "VK_OPERATOR", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "AT", "COLON", "EQUALS", "WHEN", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "FROM", "OVER", "ACCUMULATE", "INIT", "COLLECT", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "GRAVE_ACCENT", "TILDE", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int ACCUMULATE=102;
-    public static final int VT_ACCESSOR_ELEMENT=37;
-    public static final int VT_DATA_TYPE=38;
-    public static final int DOT_STAR=86;
+    public static final int COMMA=91;
+    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 VK_GLOBAL=66;
-    public static final int VK_AND=77;
-    public static final int EQUALS=94;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=127;
+    public static final int END=88;
+    public static final int HexDigit=124;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int MISC=120;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=117;
     public static final int VK_AUTO_FOCUS=49;
-    public static final int VK_SALIENCE=55;
-    public static final int EOF=-1;
-    public static final int VT_PATTERN_TYPE=39;
-    public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VT_OR_INFIX=26;
-    public static final int EOL=121;
-    public static final int GREATER=107;
-    public static final int DOUBLE_AMPER=99;
+    public static final int TILDE=128;
+    public static final int DOT=86;
     public static final int VK_IMPORT=60;
-    public static final int NOT_EQUAL=111;
-    public static final int VK_ACTION=80;
-    public static final int VK_RULE=58;
-    public static final int LESS=109;
-    public static final int VK_MEMBEROF=72;
-    public static final int GRAVE_ACCENT=112;
     public static final int VT_SLOT=15;
-    public static final int VK_OR=76;
-    public static final int VT_AND_PREFIX=23;
-    public static final int NULL=114;
-    public static final int BOOL=96;
-    public static final int VK_QUERY=63;
-    public static final int INT=97;
-    public static final int SEMICOLON=83;
-    public static final int VT_FUNCTION_ID=43;
-    public static final int VT_RHS_CHUNK=17;
-    public static final int VT_FACT_BINDING=32;
-    public static final int VK_RULEFLOW_GROUP=52;
-    public static final int VK_ENTRY_POINT=73;
     public static final int VT_PACKAGE_ID=40;
-    public static final int VK_RESULT=82;
-    public static final int VT_LABEL=8;
-    public static final int WS=122;
-    public static final int VK_NO_LOOP=48;
-    public static final int LEFT_CURLY=118;
+    public static final int LEFT_SQUARE=115;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=129;
+    public static final int VT_DATA_TYPE=38;
     public static final int VT_FACT=6;
-    public static final int VT_PATTERN=31;
-    public static final int VK_IN=75;
-    public static final int LEFT_PAREN=89;
-    public static final int LESS_EQUAL=110;
-    public static final int VT_IMPORT_ID=41;
-    public static final int VT_RULE_ID=12;
-    public static final int MISC=120;
-    public static final int FROM=100;
-    public static final int END=87;
-    public static final int COLLECT=104;
-    public static final int INIT=103;
-    public static final int EscapeSequence=123;
-    public static final int VK_ACTIVATION_GROUP=50;
-    public static final int VK_ENABLED=56;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=128;
-    public static final int VK_PACKAGE=61;
-    public static final int OVER=101;
-    public static final int VK_EXTEND=59;
-    public static final int RIGHT_SQUARE=116;
-    public static final int RIGHT_CURLY=119;
     public static final int VK_MATCHES=69;
-    public static final int VT_FACT_OR=33;
-    public static final int VT_FIELD=35;
-    public static final int FLOAT=113;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
-    public static final int VK_EXISTS=78;
-    public static final int VK_DATE_EXPIRES=46;
-    public static final int ID=84;
-    public static final int HexDigit=124;
-    public static final int VT_OR_PREFIX=24;
-    public static final int VK_EVAL=67;
-    public static final int DOUBLE_PIPE=98;
-    public static final int AT=92;
-    public static final int RIGHT_PAREN=91;
-    public static final int THEN=117;
-    public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_EXPRESSION_CHAIN=30;
-    public static final int COMMA=90;
-    public static final int EQUAL=106;
-    public static final int VT_BEHAVIOR=21;
+    public static final int LEFT_CURLY=118;
+    public static final int AT=93;
+    public static final int DOUBLE_AMPER=100;
+    public static final int LEFT_PAREN=90;
     public static final int VT_QUERY_ID=9;
-    public static final int VK_DIALECT=54;
-    public static final int DOT=85;
-    public static final int VT_GLOBAL_ID=42;
-    public static final int VK_NOT=74;
-    public static final int VT_FROM_SOURCE=29;
+    public static final int VT_ACCESSOR_PATH=36;
+    public static final int VT_LABEL=8;
+    public static final int WHEN=96;
     public static final int VT_ENTRYPOINT_ID=13;
-    public static final int VK_DECLARE=64;
-    public static final int VT_PAREN_CHUNK=20;
-    public static final int VK_CONTAINS=68;
-    public static final int VT_TYPE_DECLARE_ID=11;
+    public static final int WS=122;
+    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=102;
+    public static final int VK_AND=77;
+    public static final int STRING=89;
+    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=81;
-    public static final int VK_LOCK_ON_ACTIVE=47;
-    public static final int VK_TEMPLATE=62;
-    public static final int VT_AND_INFIX=25;
-    public static final int VT_RULE_ATTRIBUTES=16;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=127;
     public static final int VK_DURATION=53;
-    public static final int VT_ACCESSOR_PATH=36;
-    public static final int MULTI_LINE_COMMENT=129;
+    public static final int VT_SQUARE_CHUNK=19;
     public static final int VK_FORALL=79;
-    public static final int COLON=93;
-    public static final int VK_EXCLUDES=70;
+    public static final int VT_PAREN_CHUNK=20;
+    public static final int VT_COMPILATION_UNIT=4;
+    public static final int COLLECT=105;
+    public static final int VK_ENABLED=56;
+    public static final int EQUALS=95;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=125;
+    public static final int VK_PACKAGE=61;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=107;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=62;
     public static final int VT_AND_IMPLICIT=22;
-    public static final int VK_SOUNDSLIKE=71;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
-    public static final int VT_CURLY_CHUNK=18;
+    public static final int NULL=114;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=131;
+    public static final int VT_RULE_ATTRIBUTES=16;
+    public static final int RIGHT_SQUARE=116;
+    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=106;
+    public static final int FLOAT=113;
+    public static final int INIT=104;
+    public static final int VK_EXTEND=59;
     public static final int VT_SLOT_ID=14;
-    public static final int VK_ATTRIBUTES=57;
-    public static final int WHEN=95;
-    public static final int UnicodeEscape=125;
-    public static final int VT_SQUARE_CHUNK=19;
-    public static final int VT_TEMPLATE_ID=10;
+    public static final int VT_CURLY_CHUNK=18;
+    public static final int VT_OR_PREFIX=24;
+    public static final int DOUBLE_PIPE=99;
+    public static final int LESS=110;
+    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 VT_PARAM_LIST=44;
-    public static final int ARROW=105;
+    public static final int EscapeSequence=123;
+    public static final int VK_EXISTS=78;
+    public static final int INT=98;
     public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=58;
+    public static final int VK_EVAL=67;
+    public static final int GREATER=108;
+    public static final int VT_FACT_BINDING=32;
+    public static final int FROM=101;
+    public static final int ID=85;
+    public static final int NOT_EQUAL=112;
+    public static final int RIGHT_CURLY=119;
+    public static final int VK_OPERATOR=83;
+    public static final int BOOL=97;
+    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=75;
+    public static final int VT_RHS_CHUNK=17;
+    public static final int GREATER_EQUAL=109;
+    public static final int VK_MEMBEROF=72;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=111;
+    public static final int ACCUMULATE=103;
+    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 VK_AGENDA_GROUP=51;
-    public static final int LEFT_SQUARE=115;
+    public static final int EOL=121;
+    public static final int VT_IMPORT_ID=41;
+    public static final int VK_ACTIVATION_GROUP=50;
     public static final int OctalEscape=126;
-    public static final int GREATER_EQUAL=108;
-    public static final int STRING=88;
+    public static final int VK_ACTION=80;
+    public static final int VK_EXCLUDES=70;
+    public static final int RIGHT_PAREN=92;
+    public static final int VT_TEMPLATE_ID=10;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=130;
+    public static final int VK_DECLARE=64;
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[142+1];
+            ruleMemo = new HashMap[145+1];
          }
         
     protected TreeAdaptor adaptor = new CommonTreeAdaptor();
@@ -179,7 +167,7 @@
     public String[] getTokenNames() { return tokenNames; }
     public String getGrammarFileName() { return "src/main/resources/org/drools/lang/DRL.g"; }
 
-
+    
     	private Stack<Map<DroolsParaphraseTypes, String>> paraphrases = new Stack<Map<DroolsParaphraseTypes, String>>();
     	private List<DroolsParserException> errors = new ArrayList<DroolsParserException>();
     	private DroolsParserExceptionFactory errorMessageFactory = new DroolsParserExceptionFactory(tokenNames, paraphrases);
@@ -187,19 +175,19 @@
     	private boolean lookaheadTest = false;
     	private LinkedList<DroolsSentence> editorInterface = null;
     	private boolean isEditorInterfaceEnabled = false;
-
+    
     	public LinkedList<DroolsSentence> getEditorInterface(){
     		return editorInterface;
     	}
-
+    
     	public void enableEditorInterface(){
     		isEditorInterfaceEnabled = true;
     	}
-
+    
     	public void disableEditorInterface(){
     		isEditorInterfaceEnabled = false;
     	}
-
+    
     	private void beginSentence(DroolsSentenceType sentenceType){
     		if (isEditorInterfaceEnabled) {
     			if (null == editorInterface) {
@@ -210,11 +198,11 @@
     			editorInterface.add(sentence);
     		}
     	}
-
+    
     	private DroolsSentence getActiveSentence(){
     		return editorInterface.getLast();
     	}
-
+    
     	private void emit(List tokens, DroolsEditorType editorType){
     		if (isEditorInterfaceEnabled && tokens != null) {		
     			for (Object activeObject : tokens){
@@ -222,14 +210,14 @@
     			}
     		}
     	}
-
+    
     	private void emit(Token token, DroolsEditorType editorType){
     		if (isEditorInterfaceEnabled && token != null) {
     			((DroolsToken)token).setEditorType(editorType);
     			getActiveSentence().addContent((DroolsToken) token);
     		}
     	}
-
+    
     	private void emit(boolean forceEmit, int activeContext){
     		if (isEditorInterfaceEnabled) {
     				getActiveSentence().addContent(activeContext);
@@ -241,7 +229,7 @@
     			emit(false, activeContext);
     		}
     	}
-
+    
     	private DroolsToken getLastTokenOnList(LinkedList list){
     		DroolsToken lastToken = null;
     		for (Object object : list) {
@@ -251,7 +239,7 @@
     		}
     		return lastToken;
     	}
-
+    
     	private int getLastIntegerValue(LinkedList list) {
     		int lastIntergerValue = -1;
     		for (Object object : list) {
@@ -261,19 +249,32 @@
     		}
     		return lastIntergerValue;
     	}
-
-    	private boolean validateLT(int LTNumber, String text) {
-    		if (null == input)
-    			return false;
+    	
+    	private String retrieveLT(int LTNumber) {
+          		if (null == input)
+    			return null;
     		if (null == input.LT(LTNumber))
-    			return false;
+    			return null;
     		if (null == input.LT(LTNumber).getText())
-    			return false;
+    			return null;
     	
-    		String text2Validate = input.LT(LTNumber).getText();
-    		return text2Validate.equalsIgnoreCase(text);
+    		return input.LT(LTNumber).getText();
     	}
+    
+    	private boolean validateLT(int LTNumber, String text) {
+    		String text2Validate = retrieveLT( LTNumber );
+    		return text2Validate == null ? false : text2Validate.equalsIgnoreCase(text);
+    	}
     	
+    	private boolean isPluggableEvaluator( int offset, boolean negated ) {
+    		String text2Validate = retrieveLT( offset );
+    	        return text2Validate == null ? false : DroolsSoftKeywords.isOperator( text2Validate, negated );
+    	}
+    	
+    	private boolean isPluggableEvaluator( boolean negated ) {
+    	        return isPluggableEvaluator( 1, negated );
+    	}
+    	
     	private boolean validateIdentifierKey(String text) {
     		return validateLT(1, text);
     	}
@@ -294,11 +295,11 @@
     		}
     		return false;
     	}
-
+    
     	private boolean validateRestr() {
     		int lookahead = 2;
     		int countParen = 1;
-
+    
     		while (true) {
     			if (input.LA(lookahead) == COMMA) {
     				break;
@@ -327,7 +328,7 @@
     			input.seek(activeIndex);
     		}
     		lookaheadTest = false;
-
+    
     		return returnValue;
     	}
     	
@@ -367,7 +368,7 @@
     	public boolean hasErrors() {
     		return !errors.isEmpty();
     	}
-
+    
     	/**
     	 * Method that adds a paraphrase type into paraphrases stack.
     	 * 
@@ -379,7 +380,7 @@
     		activeMap.put(type, "");
     		paraphrases.push(activeMap);
     	}
-
+    
     	/**
     	 * Method that sets paraphrase value for a type into paraphrases stack.
     	 * 
@@ -391,7 +392,7 @@
     	private void setParaphrasesValue(DroolsParaphraseTypes type, String value) {
     		paraphrases.peek().put(type, value);
     	}
-
+    
     	/**
     	 * Helper method that creates a string from a token list.
     	 * 
@@ -448,7 +449,7 @@
     };
 
     // $ANTLR start compilation_unit
-    // src/main/resources/org/drools/lang/DRL.g:396:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    // src/main/resources/org/drools/lang/DRL.g:410: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);
@@ -463,20 +464,20 @@
 
         Object EOF3_tree=null;
         RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
-        RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         RewriteRuleSubtreeStream stream_package_statement=new RewriteRuleSubtreeStream(adaptor,"rule package_statement");
+        RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:397:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
-            // src/main/resources/org/drools/lang/DRL.g:397:4: ( package_statement )? ( statement )* EOF
+            // src/main/resources/org/drools/lang/DRL.g:411:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // src/main/resources/org/drools/lang/DRL.g:411:4: ( package_statement )? ( statement )* EOF
             {
-            // src/main/resources/org/drools/lang/DRL.g:397:4: ( package_statement )?
+            // src/main/resources/org/drools/lang/DRL.g:411:4: ( package_statement )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
-            if ( (LA1_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(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.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(!
 DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierK!
 ey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.D
ECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(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)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((valid!
 ateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+            if ( (LA1_0==ID) ) {
                 int LA1_1 = input.LA(2);
 
-                if ( (LA1_1==ID) && ((((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.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.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywo!
 rds.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.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeyw!
 ords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||
((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1!
 , DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords!
 .TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((
validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+                if ( (LA1_1==ID) ) {
                     int LA1_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
@@ -486,9 +487,9 @@
             }
             switch (alt1) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:397:4: package_statement
+                    // src/main/resources/org/drools/lang/DRL.g:411:4: package_statement
                     {
-                    pushFollow(FOLLOW_package_statement_in_compilation_unit392);
+                    pushFollow(FOLLOW_package_statement_in_compilation_unit396);
                     package_statement1=package_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -499,22 +500,22 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:398:3: ( statement )*
+            // src/main/resources/org/drools/lang/DRL.g:412:3: ( statement )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
 
-                if ( (LA2_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION!
 ))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+                if ( (LA2_0==ID) ) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:398:3: statement
+            	    // src/main/resources/org/drools/lang/DRL.g:412:3: statement
             	    {
-            	    pushFollow(FOLLOW_statement_in_compilation_unit397);
+            	    pushFollow(FOLLOW_statement_in_compilation_unit401);
             	    statement2=statement();
             	    _fsp--;
             	    if (failed) return retval;
@@ -529,12 +530,12 @@
             } while (true);
 
             EOF3=(Token)input.LT(1);
-            match(input,EOF,FOLLOW_EOF_in_compilation_unit402); if (failed) return retval;
+            match(input,EOF,FOLLOW_EOF_in_compilation_unit407); if (failed) return retval;
             if ( backtracking==0 ) stream_EOF.add(EOF3);
 
 
             // AST REWRITE
-            // elements: statement, package_statement
+            // elements: package_statement, statement
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -544,20 +545,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 400:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // 414:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
-                // src/main/resources/org/drools/lang/DRL.g:400:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                // src/main/resources/org/drools/lang/DRL.g:414: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:400:28: ( package_statement )?
+                // src/main/resources/org/drools/lang/DRL.g:414:28: ( package_statement )?
                 if ( stream_package_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_package_statement.next());
 
                 }
                 stream_package_statement.reset();
-                // src/main/resources/org/drools/lang/DRL.g:400:47: ( statement )*
+                // src/main/resources/org/drools/lang/DRL.g:414:47: ( statement )*
                 while ( stream_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_statement.next());
 
@@ -581,16 +582,16 @@
             }
         }
         catch ( RecognitionException e ) {
-
+            
             		reportError( e );
             	
         }
         catch ( RewriteEmptyStreamException e ) {
-
+            
             	
         }
         finally {
-
+            
             	if (isEditorInterfaceEnabled && retval.tree == null) {
             		retval.tree = root_0;
             		root_0 = (Object) adaptor.nil();
@@ -630,7 +631,7 @@
     };
 
     // $ANTLR start package_statement
-    // src/main/resources/org/drools/lang/DRL.g:437:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
+    // src/main/resources/org/drools/lang/DRL.g:451: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);
@@ -649,23 +650,23 @@
         RewriteRuleSubtreeStream stream_package_id=new RewriteRuleSubtreeStream(adaptor,"rule package_id");
          pushParaphrases(DroolsParaphraseTypes.PACKAGE); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:440:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
-            // src/main/resources/org/drools/lang/DRL.g:441:2: package_key package_id ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:454:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // src/main/resources/org/drools/lang/DRL.g:455:2: package_key package_id ( SEMICOLON )?
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.PACKAGE);	
             }
-            pushFollow(FOLLOW_package_key_in_package_statement462);
+            pushFollow(FOLLOW_package_key_in_package_statement467);
             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_statement466);
+            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());
-            // src/main/resources/org/drools/lang/DRL.g:443:14: ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:457:14: ( SEMICOLON )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -674,10 +675,10 @@
             }
             switch (alt3) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:443:14: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:457:14: SEMICOLON
                     {
                     SEMICOLON6=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement468); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement473); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON6);
 
 
@@ -701,9 +702,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 445:3: -> ^( package_key package_id )
+            // 459:3: -> ^( package_key package_id )
             {
-                // src/main/resources/org/drools/lang/DRL.g:445:6: ^( package_key package_id )
+                // src/main/resources/org/drools/lang/DRL.g:459:6: ^( package_key package_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
@@ -745,7 +746,7 @@
     };
 
     // $ANTLR start package_id
-    // src/main/resources/org/drools/lang/DRL.g:448:1: package_id : id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
+    // src/main/resources/org/drools/lang/DRL.g:462: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);
@@ -760,17 +761,17 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:449:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
-            // src/main/resources/org/drools/lang/DRL.g:449:4: id+= ID (id+= DOT id+= ID )*
+            // src/main/resources/org/drools/lang/DRL.g:463:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // src/main/resources/org/drools/lang/DRL.g:463:4: id+= ID (id+= DOT id+= ID )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_id495); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_id500); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // src/main/resources/org/drools/lang/DRL.g:449:11: (id+= DOT id+= ID )*
+            // src/main/resources/org/drools/lang/DRL.g:463:11: (id+= DOT id+= ID )*
             loop4:
             do {
                 int alt4=2;
@@ -783,17 +784,17 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:449:13: id+= DOT id+= ID
+            	    // src/main/resources/org/drools/lang/DRL.g:463:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_package_id501); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_package_id506); 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_id505); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_package_id510); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -824,9 +825,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 452:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            // 466:3: -> ^( VT_PACKAGE_ID ( ID )+ )
             {
-                // src/main/resources/org/drools/lang/DRL.g:452:6: ^( VT_PACKAGE_ID ( ID )+ )
+                // src/main/resources/org/drools/lang/DRL.g:466: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);
@@ -872,7 +873,7 @@
     };
 
     // $ANTLR start statement
-    // src/main/resources/org/drools/lang/DRL.g:455:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );
+    // src/main/resources/org/drools/lang/DRL.g:469: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);
@@ -900,17 +901,17 @@
 
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:458:3: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query )
+            // src/main/resources/org/drools/lang/DRL.g:472: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) && ((((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(val!
 idateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoft!
 Keywords.ENABLED))||((validateLT(1, "import") && validateLT(2, "functi
on") )&&(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.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIde!
 ntifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+            if ( (LA5_0==ID) ) {
                 int LA5_1 = input.LA(2);
 
-                if ( (LA5_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-")!
  && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                if ( (LA5_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-")!
  && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
                     alt5=1;
                 }
-                else if ( (LA5_1==ID) && ((((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.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, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoft!
 Keywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSof!
 tKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLA
TE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((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)))||((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.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(Droo!
 lsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((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, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoft!
 Keywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL)
)||((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)))))) {
+                else if ( (LA5_1==ID) ) {
                     int LA5_3 = input.LA(3);
 
                     if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) ) {
@@ -940,12 +941,12 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("455:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 3, input);
+                            new NoViableAltException("469: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) && ((((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(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(Drool!
 sSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+                else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((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(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))) ) {
@@ -963,7 +964,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("455:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 4, input);
+                            new NoViableAltException("469:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 4, input);
 
                         throw nvae;
                     }
@@ -980,7 +981,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("455:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 1, input);
+                        new NoViableAltException("469:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 1, input);
 
                     throw nvae;
                 }
@@ -988,20 +989,20 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("455:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 0, input);
+                    new NoViableAltException("469: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 :
-                    // src/main/resources/org/drools/lang/DRL.g:459:2: rule_attribute
+                    // src/main/resources/org/drools/lang/DRL.g:473:2: rule_attribute
                     {
                     root_0 = (Object)adaptor.nil();
 
                     if ( backtracking==0 ) {
                       	beginSentence(DroolsSentenceType.RULE_ATTRIBUTE);	
                     }
-                    pushFollow(FOLLOW_rule_attribute_in_statement549);
+                    pushFollow(FOLLOW_rule_attribute_in_statement554);
                     rule_attribute7=rule_attribute();
                     _fsp--;
                     if (failed) return retval;
@@ -1010,7 +1011,7 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:461:3: {...}? => function_import_statement
+                    // src/main/resources/org/drools/lang/DRL.g:475:3: {...}? => function_import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -1018,7 +1019,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_statement556);
+                    pushFollow(FOLLOW_function_import_statement_in_statement561);
                     function_import_statement8=function_import_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -1027,11 +1028,11 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:462:4: import_statement
+                    // src/main/resources/org/drools/lang/DRL.g:476:4: import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_import_statement_in_statement562);
+                    pushFollow(FOLLOW_import_statement_in_statement567);
                     import_statement9=import_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -1040,11 +1041,11 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/lang/DRL.g:463:4: global
+                    // src/main/resources/org/drools/lang/DRL.g:477:4: global
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_global_in_statement568);
+                    pushFollow(FOLLOW_global_in_statement573);
                     global10=global();
                     _fsp--;
                     if (failed) return retval;
@@ -1053,11 +1054,11 @@
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/lang/DRL.g:464:4: function
+                    // src/main/resources/org/drools/lang/DRL.g:478:4: function
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_function_in_statement574);
+                    pushFollow(FOLLOW_function_in_statement579);
                     function11=function();
                     _fsp--;
                     if (failed) return retval;
@@ -1066,7 +1067,7 @@
                     }
                     break;
                 case 6 :
-                    // src/main/resources/org/drools/lang/DRL.g:465:4: {...}? => template
+                    // src/main/resources/org/drools/lang/DRL.g:479:4: {...}? => template
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -1074,7 +1075,7 @@
                         if (backtracking>0) {failed=true; return retval;}
                         throw new FailedPredicateException(input, "statement", "(validateLT(1, DroolsSoftKeywords.TEMPLATE))");
                     }
-                    pushFollow(FOLLOW_template_in_statement582);
+                    pushFollow(FOLLOW_template_in_statement587);
                     template12=template();
                     _fsp--;
                     if (failed) return retval;
@@ -1083,7 +1084,7 @@
                     }
                     break;
                 case 7 :
-                    // src/main/resources/org/drools/lang/DRL.g:466:4: {...}? => type_declaration
+                    // src/main/resources/org/drools/lang/DRL.g:480:4: {...}? => type_declaration
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -1091,7 +1092,7 @@
                         if (backtracking>0) {failed=true; return retval;}
                         throw new FailedPredicateException(input, "statement", "(validateLT(1, DroolsSoftKeywords.DECLARE))");
                     }
-                    pushFollow(FOLLOW_type_declaration_in_statement590);
+                    pushFollow(FOLLOW_type_declaration_in_statement595);
                     type_declaration13=type_declaration();
                     _fsp--;
                     if (failed) return retval;
@@ -1100,11 +1101,11 @@
                     }
                     break;
                 case 8 :
-                    // src/main/resources/org/drools/lang/DRL.g:467:4: rule
+                    // src/main/resources/org/drools/lang/DRL.g:481:4: rule
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_in_statement595);
+                    pushFollow(FOLLOW_rule_in_statement600);
                     rule14=rule();
                     _fsp--;
                     if (failed) return retval;
@@ -1113,11 +1114,11 @@
                     }
                     break;
                 case 9 :
-                    // src/main/resources/org/drools/lang/DRL.g:468:4: query
+                    // src/main/resources/org/drools/lang/DRL.g:482:4: query
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_query_in_statement600);
+                    pushFollow(FOLLOW_query_in_statement605);
                     query15=query();
                     _fsp--;
                     if (failed) return retval;
@@ -1150,7 +1151,7 @@
     };
 
     // $ANTLR start import_statement
-    // src/main/resources/org/drools/lang/DRL.g:471:1: import_statement : import_key import_name[DroolsParaphraseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) ;
+    // src/main/resources/org/drools/lang/DRL.g:485:1: import_statement : import_key import_name[DroolsParaphraseTypes.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);
@@ -1169,23 +1170,23 @@
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
          pushParaphrases(DroolsParaphraseTypes.IMPORT); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:474:2: ( import_key import_name[DroolsParaphraseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
-            // src/main/resources/org/drools/lang/DRL.g:475:2: import_key import_name[DroolsParaphraseTypes.IMPORT] ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:488:2: ( import_key import_name[DroolsParaphraseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
+            // src/main/resources/org/drools/lang/DRL.g:489:2: import_key import_name[DroolsParaphraseTypes.IMPORT] ( SEMICOLON )?
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.IMPORT_STATEMENT);	
             }
-            pushFollow(FOLLOW_import_key_in_import_statement627);
+            pushFollow(FOLLOW_import_key_in_import_statement632);
             import_key16=import_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_key.add(import_key16.getTree());
-            pushFollow(FOLLOW_import_name_in_import_statement629);
+            pushFollow(FOLLOW_import_name_in_import_statement634);
             import_name17=import_name(DroolsParaphraseTypes.IMPORT);
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_name.add(import_name17.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:476:56: ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:490:56: ( SEMICOLON )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -1194,10 +1195,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:476:56: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:490:56: SEMICOLON
                     {
                     SEMICOLON18=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement632); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement637); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON18);
 
 
@@ -1221,9 +1222,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 478:3: -> ^( import_key import_name )
+            // 492:3: -> ^( import_key import_name )
             {
-                // src/main/resources/org/drools/lang/DRL.g:478:6: ^( import_key import_name )
+                // src/main/resources/org/drools/lang/DRL.g:492:6: ^( import_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
@@ -1265,7 +1266,7 @@
     };
 
     // $ANTLR start function_import_statement
-    // src/main/resources/org/drools/lang/DRL.g:481:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphraseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
+    // src/main/resources/org/drools/lang/DRL.g:495:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphraseTypes.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);
@@ -1282,33 +1283,33 @@
 
         Object SEMICOLON21_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
-        RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
         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(DroolsParaphraseTypes.FUNCTION_IMPORT); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:484:2: (imp= import_key function_key import_name[DroolsParaphraseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
-            // src/main/resources/org/drools/lang/DRL.g:485:2: imp= import_key function_key import_name[DroolsParaphraseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:498:2: (imp= import_key function_key import_name[DroolsParaphraseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
+            // src/main/resources/org/drools/lang/DRL.g:499:2: imp= import_key function_key import_name[DroolsParaphraseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.FUNCTION_IMPORT_STATEMENT);	
             }
-            pushFollow(FOLLOW_import_key_in_function_import_statement675);
+            pushFollow(FOLLOW_import_key_in_function_import_statement680);
             imp=import_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_key.add(imp.getTree());
-            pushFollow(FOLLOW_function_key_in_function_import_statement677);
+            pushFollow(FOLLOW_function_key_in_function_import_statement682);
             function_key19=function_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_key.add(function_key19.getTree());
-            pushFollow(FOLLOW_import_name_in_function_import_statement679);
+            pushFollow(FOLLOW_import_name_in_function_import_statement684);
             import_name20=import_name(DroolsParaphraseTypes.FUNCTION_IMPORT);
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_name.add(import_name20.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:486:82: ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:500:82: ( SEMICOLON )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1317,10 +1318,10 @@
             }
             switch (alt7) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:486:82: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:500:82: SEMICOLON
                     {
                     SEMICOLON21=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement682); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement687); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON21);
 
 
@@ -1334,7 +1335,7 @@
             }
 
             // AST REWRITE
-            // elements: function_key, import_name
+            // elements: import_name, function_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1344,9 +1345,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 488:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            // 502:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
             {
-                // src/main/resources/org/drools/lang/DRL.g:488:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+                // src/main/resources/org/drools/lang/DRL.g:502: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);
@@ -1389,7 +1390,7 @@
     };
 
     // $ANTLR start import_name
-    // src/main/resources/org/drools/lang/DRL.g:491:1: import_name[DroolsParaphraseTypes importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    // src/main/resources/org/drools/lang/DRL.g:505:1: import_name[DroolsParaphraseTypes importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
     public final import_name_return import_name(DroolsParaphraseTypes importType) throws RecognitionException {
         import_name_return retval = new import_name_return();
         retval.start = input.LT(1);
@@ -1400,22 +1401,22 @@
         List list_id=null;
 
         Object id_tree=null;
+        RewriteRuleTokenStream stream_DOT_STAR=new RewriteRuleTokenStream(adaptor,"token DOT_STAR");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
-        RewriteRuleTokenStream stream_DOT_STAR=new RewriteRuleTokenStream(adaptor,"token DOT_STAR");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:492:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
-            // src/main/resources/org/drools/lang/DRL.g:492:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
+            // src/main/resources/org/drools/lang/DRL.g:506:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // src/main/resources/org/drools/lang/DRL.g:506:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_name716); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_name721); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // src/main/resources/org/drools/lang/DRL.g:492:11: (id+= DOT id+= ID )*
+            // src/main/resources/org/drools/lang/DRL.g:506:11: (id+= DOT id+= ID )*
             loop8:
             do {
                 int alt8=2;
@@ -1428,17 +1429,17 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:492:13: id+= DOT id+= ID
+            	    // src/main/resources/org/drools/lang/DRL.g:506:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_import_name722); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_import_name727); 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_name726); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_import_name731); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -1453,7 +1454,7 @@
                 }
             } while (true);
 
-            // src/main/resources/org/drools/lang/DRL.g:492:33: (id+= DOT_STAR )?
+            // src/main/resources/org/drools/lang/DRL.g:506:33: (id+= DOT_STAR )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1462,10 +1463,10 @@
             }
             switch (alt9) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:492:33: id+= DOT_STAR
+                    // src/main/resources/org/drools/lang/DRL.g:506:33: id+= DOT_STAR
                     {
                     id=(Token)input.LT(1);
-                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name733); if (failed) return retval;
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name738); if (failed) return retval;
                     if ( backtracking==0 ) stream_DOT_STAR.add(id);
 
                     if (list_id==null) list_id=new ArrayList();
@@ -1493,9 +1494,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 495:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // 509:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-                // src/main/resources/org/drools/lang/DRL.g:495:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+                // src/main/resources/org/drools/lang/DRL.g:509: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);
@@ -1508,7 +1509,7 @@
 
                 }
                 stream_ID.reset();
-                // src/main/resources/org/drools/lang/DRL.g:495:25: ( DOT_STAR )?
+                // src/main/resources/org/drools/lang/DRL.g:509:25: ( DOT_STAR )?
                 if ( stream_DOT_STAR.hasNext() ) {
                     adaptor.addChild(root_1, stream_DOT_STAR.next());
 
@@ -1547,7 +1548,7 @@
     };
 
     // $ANTLR start global
-    // src/main/resources/org/drools/lang/DRL.g:498:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
+    // src/main/resources/org/drools/lang/DRL.g:512: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);
@@ -1564,33 +1565,33 @@
 
         Object SEMICOLON25_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
-        RewriteRuleSubtreeStream stream_global_key=new RewriteRuleSubtreeStream(adaptor,"rule global_key");
         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(DroolsParaphraseTypes.GLOBAL); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:501:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
-            // src/main/resources/org/drools/lang/DRL.g:502:2: global_key data_type global_id ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:515:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // src/main/resources/org/drools/lang/DRL.g:516:2: global_key data_type global_id ( SEMICOLON )?
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.GLOBAL);	
             }
-            pushFollow(FOLLOW_global_key_in_global778);
+            pushFollow(FOLLOW_global_key_in_global783);
             global_key22=global_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_global_key.add(global_key22.getTree());
-            pushFollow(FOLLOW_data_type_in_global780);
+            pushFollow(FOLLOW_data_type_in_global785);
             data_type23=data_type();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_data_type.add(data_type23.getTree());
-            pushFollow(FOLLOW_global_id_in_global782);
+            pushFollow(FOLLOW_global_id_in_global787);
             global_id24=global_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_global_id.add(global_id24.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:503:34: ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:517:34: ( SEMICOLON )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1599,10 +1600,10 @@
             }
             switch (alt10) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:503:34: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:517:34: SEMICOLON
                     {
                     SEMICOLON25=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global784); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global789); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON25);
 
 
@@ -1616,7 +1617,7 @@
             }
 
             // AST REWRITE
-            // elements: global_id, global_key, data_type
+            // elements: global_key, global_id, data_type
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1626,9 +1627,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 505:3: -> ^( global_key data_type global_id )
+            // 519:3: -> ^( global_key data_type global_id )
             {
-                // src/main/resources/org/drools/lang/DRL.g:505:6: ^( global_key data_type global_id )
+                // src/main/resources/org/drools/lang/DRL.g:519:6: ^( global_key data_type global_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
@@ -1671,7 +1672,7 @@
     };
 
     // $ANTLR start global_id
-    // src/main/resources/org/drools/lang/DRL.g:508:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:522: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);
@@ -1684,11 +1685,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:509:2: (id= ID -> VT_GLOBAL_ID[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:509:4: id= ID
+            // src/main/resources/org/drools/lang/DRL.g:523:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:523:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_id813); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_id818); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -1707,7 +1708,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 512:3: -> VT_GLOBAL_ID[$id]
+            // 526:3: -> VT_GLOBAL_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
 
@@ -1740,7 +1741,7 @@
     };
 
     // $ANTLR start function
-    // src/main/resources/org/drools/lang/DRL.g:515:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:529: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);
@@ -1758,25 +1759,25 @@
         curly_chunk_return curly_chunk30 = null;
 
 
-        RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
-        RewriteRuleSubtreeStream stream_function_id=new RewriteRuleSubtreeStream(adaptor,"rule function_id");
-        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
+        RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
         RewriteRuleSubtreeStream stream_curly_chunk=new RewriteRuleSubtreeStream(adaptor,"rule curly_chunk");
+        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
+        RewriteRuleSubtreeStream stream_function_id=new RewriteRuleSubtreeStream(adaptor,"rule function_id");
          pushParaphrases(DroolsParaphraseTypes.FUNCTION); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:518:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:519:2: function_key ( data_type )? function_id parameters curly_chunk
+            // src/main/resources/org/drools/lang/DRL.g:532:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:533:2: function_key ( data_type )? function_id parameters curly_chunk
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.FUNCTION);	
             }
-            pushFollow(FOLLOW_function_key_in_function850);
+            pushFollow(FOLLOW_function_key_in_function855);
             function_key26=function_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_key.add(function_key26.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:520:16: ( data_type )?
+            // src/main/resources/org/drools/lang/DRL.g:534:16: ( data_type )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1789,9 +1790,9 @@
             }
             switch (alt11) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:520:16: data_type
+                    // src/main/resources/org/drools/lang/DRL.g:534:16: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_function852);
+                    pushFollow(FOLLOW_data_type_in_function857);
                     data_type27=data_type();
                     _fsp--;
                     if (failed) return retval;
@@ -1802,24 +1803,24 @@
 
             }
 
-            pushFollow(FOLLOW_function_id_in_function855);
+            pushFollow(FOLLOW_function_id_in_function860);
             function_id28=function_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_id.add(function_id28.getTree());
-            pushFollow(FOLLOW_parameters_in_function857);
+            pushFollow(FOLLOW_parameters_in_function862);
             parameters29=parameters();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_parameters.add(parameters29.getTree());
-            pushFollow(FOLLOW_curly_chunk_in_function859);
+            pushFollow(FOLLOW_curly_chunk_in_function864);
             curly_chunk30=curly_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk30.getTree());
 
             // AST REWRITE
-            // elements: parameters, curly_chunk, data_type, function_key, function_id
+            // elements: curly_chunk, parameters, data_type, function_id, function_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1829,14 +1830,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 521:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            // 535:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:521:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:535: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:521:21: ( data_type )?
+                // src/main/resources/org/drools/lang/DRL.g:535:21: ( data_type )?
                 if ( stream_data_type.hasNext() ) {
                     adaptor.addChild(root_1, stream_data_type.next());
 
@@ -1881,7 +1882,7 @@
     };
 
     // $ANTLR start function_id
-    // src/main/resources/org/drools/lang/DRL.g:524:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:538: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);
@@ -1894,11 +1895,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:525:2: (id= ID -> VT_FUNCTION_ID[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:525:4: id= ID
+            // src/main/resources/org/drools/lang/DRL.g:539:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:539:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_id889); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_id894); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -1917,7 +1918,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 528:3: -> VT_FUNCTION_ID[$id]
+            // 542:3: -> VT_FUNCTION_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
 
@@ -1950,7 +1951,7 @@
     };
 
     // $ANTLR start query
-    // src/main/resources/org/drools/lang/DRL.g:531:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
+    // src/main/resources/org/drools/lang/DRL.g:545: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);
@@ -1970,26 +1971,26 @@
 
         Object END35_tree=null;
         Object SEMICOLON36_tree=null;
-        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
         RewriteRuleSubtreeStream stream_query_key=new RewriteRuleSubtreeStream(adaptor,"rule query_key");
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
-        RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
         RewriteRuleSubtreeStream stream_query_id=new RewriteRuleSubtreeStream(adaptor,"rule query_id");
          pushParaphrases(DroolsParaphraseTypes.QUERY); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:534:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
-            // src/main/resources/org/drools/lang/DRL.g:535:2: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:548:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
+            // src/main/resources/org/drools/lang/DRL.g:549:2: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.QUERY);	
             }
-            pushFollow(FOLLOW_query_key_in_query926);
+            pushFollow(FOLLOW_query_key_in_query931);
             query_key31=query_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_query_key.add(query_key31.getTree());
-            pushFollow(FOLLOW_query_id_in_query928);
+            pushFollow(FOLLOW_query_id_in_query933);
             query_id32=query_id();
             _fsp--;
             if (failed) return retval;
@@ -1997,14 +1998,14 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:538:3: ( parameters )?
+            // src/main/resources/org/drools/lang/DRL.g:552:3: ( parameters )?
             int alt12=2;
             alt12 = dfa12.predict(input);
             switch (alt12) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:538:3: parameters
+                    // src/main/resources/org/drools/lang/DRL.g:552:3: parameters
                     {
-                    pushFollow(FOLLOW_parameters_in_query936);
+                    pushFollow(FOLLOW_parameters_in_query941);
                     parameters33=parameters();
                     _fsp--;
                     if (failed) return retval;
@@ -2018,16 +2019,16 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION);	
             }
-            pushFollow(FOLLOW_normal_lhs_block_in_query945);
+            pushFollow(FOLLOW_normal_lhs_block_in_query950);
             normal_lhs_block34=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block34.getTree());
             END35=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_query950); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_query955); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END35);
 
-            // src/main/resources/org/drools/lang/DRL.g:541:7: ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:555:7: ( SEMICOLON )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -2036,10 +2037,10 @@
             }
             switch (alt13) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:541:7: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:555:7: SEMICOLON
                     {
                     SEMICOLON36=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query952); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query957); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON36);
 
 
@@ -2054,7 +2055,7 @@
             }
 
             // AST REWRITE
-            // elements: parameters, query_id, query_key, normal_lhs_block, END
+            // elements: END, query_id, normal_lhs_block, query_key, parameters
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2064,15 +2065,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 544:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            // 558:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
             {
-                // src/main/resources/org/drools/lang/DRL.g:544:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
+                // src/main/resources/org/drools/lang/DRL.g:558: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());
-                // src/main/resources/org/drools/lang/DRL.g:544:27: ( parameters )?
+                // src/main/resources/org/drools/lang/DRL.g:558:27: ( parameters )?
                 if ( stream_parameters.hasNext() ) {
                     adaptor.addChild(root_1, stream_parameters.next());
 
@@ -2116,7 +2117,7 @@
     };
 
     // $ANTLR start query_id
-    // src/main/resources/org/drools/lang/DRL.g:547:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );
+    // src/main/resources/org/drools/lang/DRL.g:561: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);
@@ -2126,11 +2127,11 @@
         Token id=null;
 
         Object id_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:548:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:562:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -2143,16 +2144,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("547:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
+                    new NoViableAltException("561:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
 
                 throw nvae;
             }
             switch (alt14) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:548:5: id= ID
+                    // src/main/resources/org/drools/lang/DRL.g:562:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_query_id987); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_query_id992); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -2171,7 +2172,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 550:65: -> VT_QUERY_ID[$id]
+                    // 564:65: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -2182,10 +2183,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:551:5: id= STRING
+                    // src/main/resources/org/drools/lang/DRL.g:565:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_query_id1003); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_query_id1008); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -2204,7 +2205,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 553:65: -> VT_QUERY_ID[$id]
+                    // 567:65: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -2239,7 +2240,7 @@
     };
 
     // $ANTLR start parameters
-    // src/main/resources/org/drools/lang/DRL.g:556:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
+    // src/main/resources/org/drools/lang/DRL.g:570: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);
@@ -2257,22 +2258,22 @@
         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");
-        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_param_definition=new RewriteRuleSubtreeStream(adaptor,"rule param_definition");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:557:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
-            // src/main/resources/org/drools/lang/DRL.g:557:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:571:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
+            // src/main/resources/org/drools/lang/DRL.g:571:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
             {
             LEFT_PAREN37=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters1022); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters1027); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN37);
 
             if ( backtracking==0 ) {
               	emit(LEFT_PAREN37, DroolsEditorType.SYMBOL);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:558:4: ( param_definition ( COMMA param_definition )* )?
+            // src/main/resources/org/drools/lang/DRL.g:572:4: ( param_definition ( COMMA param_definition )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -2281,14 +2282,14 @@
             }
             switch (alt16) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:558:6: param_definition ( COMMA param_definition )*
+                    // src/main/resources/org/drools/lang/DRL.g:572:6: param_definition ( COMMA param_definition )*
                     {
-                    pushFollow(FOLLOW_param_definition_in_parameters1031);
+                    pushFollow(FOLLOW_param_definition_in_parameters1036);
                     param_definition38=param_definition();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_param_definition.add(param_definition38.getTree());
-                    // src/main/resources/org/drools/lang/DRL.g:558:23: ( COMMA param_definition )*
+                    // src/main/resources/org/drools/lang/DRL.g:572:23: ( COMMA param_definition )*
                     loop15:
                     do {
                         int alt15=2;
@@ -2301,16 +2302,16 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:558:24: COMMA param_definition
+                    	    // src/main/resources/org/drools/lang/DRL.g:572:24: COMMA param_definition
                     	    {
                     	    COMMA39=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters1034); if (failed) return retval;
+                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters1039); if (failed) return retval;
                     	    if ( backtracking==0 ) stream_COMMA.add(COMMA39);
 
                     	    if ( backtracking==0 ) {
                     	      	emit(COMMA39, DroolsEditorType.SYMBOL);	
                     	    }
-                    	    pushFollow(FOLLOW_param_definition_in_parameters1038);
+                    	    pushFollow(FOLLOW_param_definition_in_parameters1043);
                     	    param_definition40=param_definition();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -2331,7 +2332,7 @@
             }
 
             RIGHT_PAREN41=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters1047); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters1052); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN41);
 
             if ( backtracking==0 ) {
@@ -2339,7 +2340,7 @@
             }
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, param_definition
+            // elements: param_definition, RIGHT_PAREN
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2349,14 +2350,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 560:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            // 574:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
             {
-                // src/main/resources/org/drools/lang/DRL.g:560:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+                // src/main/resources/org/drools/lang/DRL.g:574: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:560:22: ( param_definition )*
+                // src/main/resources/org/drools/lang/DRL.g:574:22: ( param_definition )*
                 while ( stream_param_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_param_definition.next());
 
@@ -2396,7 +2397,7 @@
     };
 
     // $ANTLR start param_definition
-    // src/main/resources/org/drools/lang/DRL.g:563:1: param_definition : ( data_type )? argument ;
+    // src/main/resources/org/drools/lang/DRL.g:577: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);
@@ -2410,19 +2411,19 @@
 
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:564:2: ( ( data_type )? argument )
-            // src/main/resources/org/drools/lang/DRL.g:564:4: ( data_type )? argument
+            // src/main/resources/org/drools/lang/DRL.g:578:2: ( ( data_type )? argument )
+            // src/main/resources/org/drools/lang/DRL.g:578:4: ( data_type )? argument
             {
             root_0 = (Object)adaptor.nil();
 
-            // src/main/resources/org/drools/lang/DRL.g:564:4: ( data_type )?
+            // src/main/resources/org/drools/lang/DRL.g:578:4: ( data_type )?
             int alt17=2;
             alt17 = dfa17.predict(input);
             switch (alt17) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:564:4: data_type
+                    // src/main/resources/org/drools/lang/DRL.g:578:4: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_param_definition1073);
+                    pushFollow(FOLLOW_data_type_in_param_definition1078);
                     data_type42=data_type();
                     _fsp--;
                     if (failed) return retval;
@@ -2433,7 +2434,7 @@
 
             }
 
-            pushFollow(FOLLOW_argument_in_param_definition1076);
+            pushFollow(FOLLOW_argument_in_param_definition1081);
             argument43=argument();
             _fsp--;
             if (failed) return retval;
@@ -2464,7 +2465,7 @@
     };
 
     // $ANTLR start argument
-    // src/main/resources/org/drools/lang/DRL.g:567:1: argument : ID ( dimension_definition )* ;
+    // src/main/resources/org/drools/lang/DRL.g:581:1: argument : ID ( dimension_definition )* ;
     public final argument_return argument() throws RecognitionException {
         argument_return retval = new argument_return();
         retval.start = input.LT(1);
@@ -2478,13 +2479,13 @@
         Object ID44_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:568:2: ( ID ( dimension_definition )* )
-            // src/main/resources/org/drools/lang/DRL.g:568:4: ID ( dimension_definition )*
+            // src/main/resources/org/drools/lang/DRL.g:582:2: ( ID ( dimension_definition )* )
+            // src/main/resources/org/drools/lang/DRL.g:582:4: ID ( dimension_definition )*
             {
             root_0 = (Object)adaptor.nil();
 
             ID44=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument1087); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_argument1092); if (failed) return retval;
             if ( backtracking==0 ) {
             ID44_tree = (Object)adaptor.create(ID44);
             adaptor.addChild(root_0, ID44_tree);
@@ -2492,7 +2493,7 @@
             if ( backtracking==0 ) {
               	emit(ID44, DroolsEditorType.IDENTIFIER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:569:3: ( dimension_definition )*
+            // src/main/resources/org/drools/lang/DRL.g:583:3: ( dimension_definition )*
             loop18:
             do {
                 int alt18=2;
@@ -2505,9 +2506,9 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:569:3: dimension_definition
+            	    // src/main/resources/org/drools/lang/DRL.g:583:3: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_argument1093);
+            	    pushFollow(FOLLOW_dimension_definition_in_argument1098);
             	    dimension_definition45=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
@@ -2547,7 +2548,7 @@
     };
 
     // $ANTLR start type_declaration
-    // src/main/resources/org/drools/lang/DRL.g:572:1: type_declaration : declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) ;
+    // src/main/resources/org/drools/lang/DRL.g:586: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);
@@ -2567,28 +2568,28 @@
         Object END50_tree=null;
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
         RewriteRuleSubtreeStream stream_decl_field=new RewriteRuleSubtreeStream(adaptor,"rule decl_field");
-        RewriteRuleSubtreeStream stream_type_declare_id=new RewriteRuleSubtreeStream(adaptor,"rule type_declare_id");
-        RewriteRuleSubtreeStream stream_decl_metadata=new RewriteRuleSubtreeStream(adaptor,"rule decl_metadata");
         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(DroolsParaphraseTypes.TYPE_DECLARE); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:575:2: ( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) )
-            // src/main/resources/org/drools/lang/DRL.g:576:2: declare_key type_declare_id ( decl_metadata )* ( decl_field )* END
+            // src/main/resources/org/drools/lang/DRL.g:589:2: ( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) )
+            // src/main/resources/org/drools/lang/DRL.g:590:2: declare_key type_declare_id ( decl_metadata )* ( decl_field )* END
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.TYPE_DECLARATION);	
             }
-            pushFollow(FOLLOW_declare_key_in_type_declaration1121);
+            pushFollow(FOLLOW_declare_key_in_type_declaration1126);
             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_declaration1124);
+            pushFollow(FOLLOW_type_declare_id_in_type_declaration1129);
             type_declare_id47=type_declare_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_type_declare_id.add(type_declare_id47.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:578:3: ( decl_metadata )*
+            // src/main/resources/org/drools/lang/DRL.g:592:3: ( decl_metadata )*
             loop19:
             do {
                 int alt19=2;
@@ -2601,9 +2602,9 @@
 
                 switch (alt19) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:578:3: decl_metadata
+            	    // src/main/resources/org/drools/lang/DRL.g:592:3: decl_metadata
             	    {
-            	    pushFollow(FOLLOW_decl_metadata_in_type_declaration1128);
+            	    pushFollow(FOLLOW_decl_metadata_in_type_declaration1133);
             	    decl_metadata48=decl_metadata();
             	    _fsp--;
             	    if (failed) return retval;
@@ -2617,7 +2618,7 @@
                 }
             } while (true);
 
-            // src/main/resources/org/drools/lang/DRL.g:579:3: ( decl_field )*
+            // src/main/resources/org/drools/lang/DRL.g:593:3: ( decl_field )*
             loop20:
             do {
                 int alt20=2;
@@ -2630,9 +2631,9 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:579:3: decl_field
+            	    // src/main/resources/org/drools/lang/DRL.g:593:3: decl_field
             	    {
-            	    pushFollow(FOLLOW_decl_field_in_type_declaration1133);
+            	    pushFollow(FOLLOW_decl_field_in_type_declaration1138);
             	    decl_field49=decl_field();
             	    _fsp--;
             	    if (failed) return retval;
@@ -2647,7 +2648,7 @@
             } while (true);
 
             END50=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_type_declaration1138); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_type_declaration1143); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END50);
 
             if ( backtracking==0 ) {
@@ -2655,7 +2656,7 @@
             }
 
             // AST REWRITE
-            // elements: declare_key, decl_field, type_declare_id, decl_metadata, END
+            // elements: decl_field, END, type_declare_id, decl_metadata, declare_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2665,21 +2666,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 582:3: -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+            // 596:3: -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
             {
-                // src/main/resources/org/drools/lang/DRL.g:582:6: ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+                // src/main/resources/org/drools/lang/DRL.g:596: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());
-                // src/main/resources/org/drools/lang/DRL.g:582:36: ( decl_metadata )*
+                // src/main/resources/org/drools/lang/DRL.g:596:36: ( decl_metadata )*
                 while ( stream_decl_metadata.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_metadata.next());
 
                 }
                 stream_decl_metadata.reset();
-                // src/main/resources/org/drools/lang/DRL.g:582:51: ( decl_field )*
+                // src/main/resources/org/drools/lang/DRL.g:596:51: ( decl_field )*
                 while ( stream_decl_field.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_field.next());
 
@@ -2722,7 +2723,7 @@
     };
 
     // $ANTLR start type_declare_id
-    // src/main/resources/org/drools/lang/DRL.g:585:1: type_declare_id : id= ID -> VT_TYPE_DECLARE_ID[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:599: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);
@@ -2735,11 +2736,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:586:2: (id= ID -> VT_TYPE_DECLARE_ID[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:586:5: id= ID
+            // src/main/resources/org/drools/lang/DRL.g:600:2: (id= ID -> VT_TYPE_DECLARE_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:600:5: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_type_declare_id1173); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_type_declare_id1178); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -2758,7 +2759,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 588:72: -> VT_TYPE_DECLARE_ID[$id]
+            // 602:72: -> VT_TYPE_DECLARE_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_TYPE_DECLARE_ID, id));
 
@@ -2791,7 +2792,7 @@
     };
 
     // $ANTLR start decl_metadata
-    // src/main/resources/org/drools/lang/DRL.g:591:1: decl_metadata : AT ID paren_chunk -> ^( AT ID paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:605: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);
@@ -2809,31 +2810,31 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:592:2: ( AT ID paren_chunk -> ^( AT ID paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:592:4: AT ID paren_chunk
+            // src/main/resources/org/drools/lang/DRL.g:606:2: ( AT ID paren_chunk -> ^( AT ID paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:606:4: AT ID paren_chunk
             {
             AT51=(Token)input.LT(1);
-            match(input,AT,FOLLOW_AT_in_decl_metadata1192); if (failed) return retval;
+            match(input,AT,FOLLOW_AT_in_decl_metadata1197); if (failed) return retval;
             if ( backtracking==0 ) stream_AT.add(AT51);
 
             if ( backtracking==0 ) {
               	emit(AT51, DroolsEditorType.SYMBOL);	
             }
             ID52=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_decl_metadata1200); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_decl_metadata1205); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID52);
 
             if ( backtracking==0 ) {
               	emit(ID52, DroolsEditorType.IDENTIFIER);	
             }
-            pushFollow(FOLLOW_paren_chunk_in_decl_metadata1207);
+            pushFollow(FOLLOW_paren_chunk_in_decl_metadata1212);
             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
+            // elements: AT, ID, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2843,9 +2844,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 597:3: -> ^( AT ID paren_chunk )
+            // 611:3: -> ^( AT ID paren_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:597:6: ^( AT ID paren_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:611:6: ^( AT ID paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_AT.next(), root_1);
@@ -2885,7 +2886,7 @@
     };
 
     // $ANTLR start decl_field
-    // src/main/resources/org/drools/lang/DRL.g:600:1: decl_field : ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) ;
+    // src/main/resources/org/drools/lang/DRL.g:614: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);
@@ -2905,21 +2906,21 @@
         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");
-        RewriteRuleSubtreeStream stream_decl_metadata=new RewriteRuleSubtreeStream(adaptor,"rule decl_metadata");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:601:2: ( ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
-            // src/main/resources/org/drools/lang/DRL.g:601:4: ID ( decl_field_initialization )? COLON data_type ( decl_metadata )*
+            // src/main/resources/org/drools/lang/DRL.g:615:2: ( ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
+            // src/main/resources/org/drools/lang/DRL.g:615:4: ID ( decl_field_initialization )? COLON data_type ( decl_metadata )*
             {
             ID54=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_decl_field1230); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_decl_field1235); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID54);
 
             if ( backtracking==0 ) {
               	emit(ID54, DroolsEditorType.IDENTIFIER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:602:3: ( decl_field_initialization )?
+            // src/main/resources/org/drools/lang/DRL.g:616:3: ( decl_field_initialization )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -2928,9 +2929,9 @@
             }
             switch (alt21) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:602:3: decl_field_initialization
+                    // src/main/resources/org/drools/lang/DRL.g:616:3: decl_field_initialization
                     {
-                    pushFollow(FOLLOW_decl_field_initialization_in_decl_field1236);
+                    pushFollow(FOLLOW_decl_field_initialization_in_decl_field1241);
                     decl_field_initialization55=decl_field_initialization();
                     _fsp--;
                     if (failed) return retval;
@@ -2942,18 +2943,18 @@
             }
 
             COLON56=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_decl_field1242); if (failed) return retval;
+            match(input,COLON,FOLLOW_COLON_in_decl_field1247); if (failed) return retval;
             if ( backtracking==0 ) stream_COLON.add(COLON56);
 
             if ( backtracking==0 ) {
               	emit(COLON56, DroolsEditorType.SYMBOL);	
             }
-            pushFollow(FOLLOW_data_type_in_decl_field1248);
+            pushFollow(FOLLOW_data_type_in_decl_field1253);
             data_type57=data_type();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_data_type.add(data_type57.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:605:3: ( decl_metadata )*
+            // src/main/resources/org/drools/lang/DRL.g:619:3: ( decl_metadata )*
             loop22:
             do {
                 int alt22=2;
@@ -2966,9 +2967,9 @@
 
                 switch (alt22) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:605:3: decl_metadata
+            	    // src/main/resources/org/drools/lang/DRL.g:619:3: decl_metadata
             	    {
-            	    pushFollow(FOLLOW_decl_metadata_in_decl_field1252);
+            	    pushFollow(FOLLOW_decl_metadata_in_decl_field1257);
             	    decl_metadata58=decl_metadata();
             	    _fsp--;
             	    if (failed) return retval;
@@ -2984,7 +2985,7 @@
 
 
             // AST REWRITE
-            // elements: data_type, decl_field_initialization, ID, decl_metadata
+            // elements: ID, decl_metadata, data_type, decl_field_initialization
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2994,21 +2995,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 606:3: -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+            // 620:3: -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
             {
-                // src/main/resources/org/drools/lang/DRL.g:606:6: ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+                // src/main/resources/org/drools/lang/DRL.g:620: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:606:11: ( decl_field_initialization )?
+                // src/main/resources/org/drools/lang/DRL.g:620: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());
-                // src/main/resources/org/drools/lang/DRL.g:606:48: ( decl_metadata )*
+                // src/main/resources/org/drools/lang/DRL.g:620:48: ( decl_metadata )*
                 while ( stream_decl_metadata.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_metadata.next());
 
@@ -3047,7 +3048,7 @@
     };
 
     // $ANTLR start decl_field_initialization
-    // src/main/resources/org/drools/lang/DRL.g:609:1: decl_field_initialization : EQUALS paren_chunk -> ^( EQUALS paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:623: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);
@@ -3062,24 +3063,24 @@
         RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:610:2: ( EQUALS paren_chunk -> ^( EQUALS paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:610:4: EQUALS paren_chunk
+            // src/main/resources/org/drools/lang/DRL.g:624:2: ( EQUALS paren_chunk -> ^( EQUALS paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:624:4: EQUALS paren_chunk
             {
             EQUALS59=(Token)input.LT(1);
-            match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization1280); if (failed) return retval;
+            match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization1285); if (failed) return retval;
             if ( backtracking==0 ) stream_EQUALS.add(EQUALS59);
 
             if ( backtracking==0 ) {
               	emit(EQUALS59, DroolsEditorType.SYMBOL);	
             }
-            pushFollow(FOLLOW_paren_chunk_in_decl_field_initialization1286);
+            pushFollow(FOLLOW_paren_chunk_in_decl_field_initialization1291);
             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
+            // elements: paren_chunk, EQUALS
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3089,9 +3090,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 612:2: -> ^( EQUALS paren_chunk )
+            // 626:2: -> ^( EQUALS paren_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:612:5: ^( EQUALS paren_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:626:5: ^( EQUALS paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_EQUALS.next(), root_1);
@@ -3130,7 +3131,7 @@
     };
 
     // $ANTLR start template
-    // src/main/resources/org/drools/lang/DRL.g:615:1: template : template_key template_id (semi1= SEMICOLON )? ( template_slot )+ END (semi2= SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
+    // src/main/resources/org/drools/lang/DRL.g:629:1: template : template_key template_id (semi1= SEMICOLON )? ( template_slot )+ END (semi2= 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);
@@ -3150,30 +3151,30 @@
         Object semi1_tree=null;
         Object semi2_tree=null;
         Object END64_tree=null;
-        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
-        RewriteRuleSubtreeStream stream_template_slot=new RewriteRuleSubtreeStream(adaptor,"rule template_slot");
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_template_id=new RewriteRuleSubtreeStream(adaptor,"rule template_id");
+        RewriteRuleSubtreeStream stream_template_slot=new RewriteRuleSubtreeStream(adaptor,"rule template_slot");
         RewriteRuleSubtreeStream stream_template_key=new RewriteRuleSubtreeStream(adaptor,"rule template_key");
          pushParaphrases(DroolsParaphraseTypes.TEMPLATE); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:618:2: ( template_key template_id (semi1= SEMICOLON )? ( template_slot )+ END (semi2= SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
-            // src/main/resources/org/drools/lang/DRL.g:619:2: template_key template_id (semi1= SEMICOLON )? ( template_slot )+ END (semi2= SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:632:2: ( template_key template_id (semi1= SEMICOLON )? ( template_slot )+ END (semi2= SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
+            // src/main/resources/org/drools/lang/DRL.g:633:2: template_key template_id (semi1= SEMICOLON )? ( template_slot )+ END (semi2= SEMICOLON )?
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.TEMPLATE);	
             }
-            pushFollow(FOLLOW_template_key_in_template1323);
+            pushFollow(FOLLOW_template_key_in_template1328);
             template_key61=template_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_template_key.add(template_key61.getTree());
-            pushFollow(FOLLOW_template_id_in_template1325);
+            pushFollow(FOLLOW_template_id_in_template1330);
             template_id62=template_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_template_id.add(template_id62.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:621:8: (semi1= SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:635:8: (semi1= SEMICOLON )?
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -3182,10 +3183,10 @@
             }
             switch (alt23) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:621:8: semi1= SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:635:8: semi1= SEMICOLON
                     {
                     semi1=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1332); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1337); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(semi1);
 
 
@@ -3197,7 +3198,7 @@
             if ( backtracking==0 ) {
               	emit(semi1, DroolsEditorType.SYMBOL);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:623:3: ( template_slot )+
+            // src/main/resources/org/drools/lang/DRL.g:637:3: ( template_slot )+
             int cnt24=0;
             loop24:
             do {
@@ -3211,9 +3212,9 @@
 
                 switch (alt24) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:623:3: template_slot
+            	    // src/main/resources/org/drools/lang/DRL.g:637:3: template_slot
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template1340);
+            	    pushFollow(FOLLOW_template_slot_in_template1345);
             	    template_slot63=template_slot();
             	    _fsp--;
             	    if (failed) return retval;
@@ -3233,10 +3234,10 @@
             } while (true);
 
             END64=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_template1345); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_template1350); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END64);
 
-            // src/main/resources/org/drools/lang/DRL.g:624:12: (semi2= SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:638:12: (semi2= SEMICOLON )?
             int alt25=2;
             int LA25_0 = input.LA(1);
 
@@ -3245,10 +3246,10 @@
             }
             switch (alt25) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:624:12: semi2= SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:638:12: semi2= SEMICOLON
                     {
                     semi2=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1349); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1354); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(semi2);
 
 
@@ -3263,7 +3264,7 @@
             }
 
             // AST REWRITE
-            // elements: template_id, template_key, template_slot, END
+            // elements: END, template_key, template_id, template_slot
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3273,9 +3274,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 627:3: -> ^( template_key template_id ( template_slot )+ END )
+            // 641:3: -> ^( template_key template_id ( template_slot )+ END )
             {
-                // src/main/resources/org/drools/lang/DRL.g:627:6: ^( template_key template_id ( template_slot )+ END )
+                // src/main/resources/org/drools/lang/DRL.g:641: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);
@@ -3326,7 +3327,7 @@
     };
 
     // $ANTLR start template_id
-    // src/main/resources/org/drools/lang/DRL.g:630:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );
+    // src/main/resources/org/drools/lang/DRL.g:644: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);
@@ -3336,11 +3337,11 @@
         Token id=null;
 
         Object id_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:631:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:645:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
             int alt26=2;
             int LA26_0 = input.LA(1);
 
@@ -3353,16 +3354,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("630:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 26, 0, input);
+                    new NoViableAltException("644:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 26, 0, input);
 
                 throw nvae;
             }
             switch (alt26) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:631:5: id= ID
+                    // src/main/resources/org/drools/lang/DRL.g:645:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_template_id1382); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_template_id1387); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -3381,7 +3382,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 633:68: -> VT_TEMPLATE_ID[$id]
+                    // 647:68: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -3392,10 +3393,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:634:5: id= STRING
+                    // src/main/resources/org/drools/lang/DRL.g:648:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_template_id1398); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_template_id1403); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -3414,7 +3415,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 636:68: -> VT_TEMPLATE_ID[$id]
+                    // 650:68: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -3449,7 +3450,7 @@
     };
 
     // $ANTLR start template_slot
-    // src/main/resources/org/drools/lang/DRL.g:639:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
+    // src/main/resources/org/drools/lang/DRL.g:653: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);
@@ -3467,20 +3468,20 @@
         RewriteRuleSubtreeStream stream_slot_id=new RewriteRuleSubtreeStream(adaptor,"rule slot_id");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:640:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
-            // src/main/resources/org/drools/lang/DRL.g:640:5: data_type slot_id ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:654:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // src/main/resources/org/drools/lang/DRL.g:654:5: data_type slot_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_data_type_in_template_slot1418);
+            pushFollow(FOLLOW_data_type_in_template_slot1423);
             data_type65=data_type();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_data_type.add(data_type65.getTree());
-            pushFollow(FOLLOW_slot_id_in_template_slot1420);
+            pushFollow(FOLLOW_slot_id_in_template_slot1425);
             slot_id66=slot_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_slot_id.add(slot_id66.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:640:23: ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:654:23: ( SEMICOLON )?
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -3489,10 +3490,10 @@
             }
             switch (alt27) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:640:23: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:654:23: SEMICOLON
                     {
                     SEMICOLON67=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1422); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1427); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON67);
 
 
@@ -3516,9 +3517,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 642:3: -> ^( VT_SLOT data_type slot_id )
+            // 656:3: -> ^( VT_SLOT data_type slot_id )
             {
-                // src/main/resources/org/drools/lang/DRL.g:642:6: ^( VT_SLOT data_type slot_id )
+                // src/main/resources/org/drools/lang/DRL.g:656: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);
@@ -3558,7 +3559,7 @@
     };
 
     // $ANTLR start slot_id
-    // src/main/resources/org/drools/lang/DRL.g:645:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:659: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);
@@ -3571,11 +3572,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:646:2: (id= ID -> VT_SLOT_ID[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:646:4: id= ID
+            // src/main/resources/org/drools/lang/DRL.g:660:2: (id= ID -> VT_SLOT_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:660:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_slot_id1451); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_slot_id1456); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -3593,7 +3594,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 648:3: -> VT_SLOT_ID[$id]
+            // 662:3: -> VT_SLOT_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
 
@@ -3626,7 +3627,7 @@
     };
 
     // $ANTLR start rule
-    // src/main/resources/org/drools/lang/DRL.g:651:1: rule : rule_key rule_id ( extend_key rule_id )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:665:1: rule : rule_key rule_id ( extend_key rule_id )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk ) ;
     public final rule_return rule() throws RecognitionException {
         rule_return retval = new rule_return();
         retval.start = input.LT(1);
@@ -3650,27 +3651,27 @@
         rhs_chunk_return rhs_chunk75 = null;
 
 
+        RewriteRuleSubtreeStream stream_rule_key=new RewriteRuleSubtreeStream(adaptor,"rule rule_key");
         RewriteRuleSubtreeStream stream_rule_id=new RewriteRuleSubtreeStream(adaptor,"rule rule_id");
-        RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
+        RewriteRuleSubtreeStream stream_when_part=new RewriteRuleSubtreeStream(adaptor,"rule when_part");
         RewriteRuleSubtreeStream stream_rule_attributes=new RewriteRuleSubtreeStream(adaptor,"rule rule_attributes");
-        RewriteRuleSubtreeStream stream_rule_key=new RewriteRuleSubtreeStream(adaptor,"rule rule_key");
-        RewriteRuleSubtreeStream stream_extend_key=new RewriteRuleSubtreeStream(adaptor,"rule extend_key");
+        RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
         RewriteRuleSubtreeStream stream_decl_metadata=new RewriteRuleSubtreeStream(adaptor,"rule decl_metadata");
-        RewriteRuleSubtreeStream stream_when_part=new RewriteRuleSubtreeStream(adaptor,"rule when_part");
+        RewriteRuleSubtreeStream stream_extend_key=new RewriteRuleSubtreeStream(adaptor,"rule extend_key");
          pushParaphrases(DroolsParaphraseTypes.RULE); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:654:2: ( rule_key rule_id ( extend_key rule_id )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:655:2: rule_key rule_id ( extend_key rule_id )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk
+            // src/main/resources/org/drools/lang/DRL.g:668:2: ( rule_key rule_id ( extend_key rule_id )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:669:2: rule_key rule_id ( extend_key rule_id )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk
             {
             if ( backtracking==0 ) {
               	beginSentence(DroolsSentenceType.RULE);	
             }
-            pushFollow(FOLLOW_rule_key_in_rule1488);
+            pushFollow(FOLLOW_rule_key_in_rule1493);
             rule_key68=rule_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rule_key.add(rule_key68.getTree());
-            pushFollow(FOLLOW_rule_id_in_rule1490);
+            pushFollow(FOLLOW_rule_id_in_rule1495);
             rule_id69=rule_id();
             _fsp--;
             if (failed) return retval;
@@ -3678,11 +3679,11 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:658:3: ( extend_key rule_id )?
+            // src/main/resources/org/drools/lang/DRL.g:672:3: ( extend_key rule_id )?
             int alt28=2;
             int LA28_0 = input.LA(1);
 
-            if ( (LA28_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(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.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(Drool!
 sSoftKeywords.EXTEND))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+            if ( (LA28_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.EXTEND))||(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(DroolsS!
 oftKeywords.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))))) {
                 int LA28_1 = input.LA(2);
 
                 if ( (LA28_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.EXTEND))))) {
@@ -3698,14 +3699,14 @@
             }
             switch (alt28) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:658:4: extend_key rule_id
+                    // src/main/resources/org/drools/lang/DRL.g:672:4: extend_key rule_id
                     {
-                    pushFollow(FOLLOW_extend_key_in_rule1499);
+                    pushFollow(FOLLOW_extend_key_in_rule1504);
                     extend_key70=extend_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_extend_key.add(extend_key70.getTree());
-                    pushFollow(FOLLOW_rule_id_in_rule1501);
+                    pushFollow(FOLLOW_rule_id_in_rule1506);
                     rule_id71=rule_id();
                     _fsp--;
                     if (failed) return retval;
@@ -3716,7 +3717,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:658:25: ( decl_metadata )*
+            // src/main/resources/org/drools/lang/DRL.g:672:25: ( decl_metadata )*
             loop29:
             do {
                 int alt29=2;
@@ -3729,9 +3730,9 @@
 
                 switch (alt29) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:658:25: decl_metadata
+            	    // src/main/resources/org/drools/lang/DRL.g:672:25: decl_metadata
             	    {
-            	    pushFollow(FOLLOW_decl_metadata_in_rule1505);
+            	    pushFollow(FOLLOW_decl_metadata_in_rule1510);
             	    decl_metadata72=decl_metadata();
             	    _fsp--;
             	    if (failed) return retval;
@@ -3745,18 +3746,18 @@
                 }
             } while (true);
 
-            // src/main/resources/org/drools/lang/DRL.g:658:40: ( rule_attributes )?
+            // src/main/resources/org/drools/lang/DRL.g:672:40: ( rule_attributes )?
             int alt30=2;
             int LA30_0 = input.LA(1);
 
-            if ( (LA30_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(Drool!
 sSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+            if ( (LA30_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.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
                 alt30=1;
             }
             switch (alt30) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:658:40: rule_attributes
+                    // src/main/resources/org/drools/lang/DRL.g:672:40: rule_attributes
                     {
-                    pushFollow(FOLLOW_rule_attributes_in_rule1508);
+                    pushFollow(FOLLOW_rule_attributes_in_rule1513);
                     rule_attributes73=rule_attributes();
                     _fsp--;
                     if (failed) return retval;
@@ -3767,7 +3768,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:658:57: ( when_part )?
+            // src/main/resources/org/drools/lang/DRL.g:672:57: ( when_part )?
             int alt31=2;
             int LA31_0 = input.LA(1);
 
@@ -3776,9 +3777,9 @@
             }
             switch (alt31) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:658:57: when_part
+                    // src/main/resources/org/drools/lang/DRL.g:672:57: when_part
                     {
-                    pushFollow(FOLLOW_when_part_in_rule1511);
+                    pushFollow(FOLLOW_when_part_in_rule1516);
                     when_part74=when_part();
                     _fsp--;
                     if (failed) return retval;
@@ -3789,14 +3790,14 @@
 
             }
 
-            pushFollow(FOLLOW_rhs_chunk_in_rule1514);
+            pushFollow(FOLLOW_rhs_chunk_in_rule1519);
             rhs_chunk75=rhs_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk75.getTree());
 
             // AST REWRITE
-            // elements: decl_metadata, rule_attributes, rhs_chunk, when_part, rule_id, rule_id, extend_key, rule_key
+            // elements: rule_attributes, when_part, rule_id, extend_key, rule_key, rule_id, rhs_chunk, decl_metadata
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3806,17 +3807,17 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 659:3: -> ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk )
+            // 673:3: -> ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:659:6: ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( rule_attributes )? ( when_part )? rhs_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:673:6: ^( rule_key rule_id ( ^( extend_key rule_id ) )? ( decl_metadata )* ( 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());
-                // src/main/resources/org/drools/lang/DRL.g:659:25: ( ^( extend_key rule_id ) )?
+                // src/main/resources/org/drools/lang/DRL.g:673:25: ( ^( extend_key rule_id ) )?
                 if ( stream_rule_id.hasNext()||stream_extend_key.hasNext() ) {
-                    // src/main/resources/org/drools/lang/DRL.g:659:25: ^( extend_key rule_id )
+                    // src/main/resources/org/drools/lang/DRL.g:673:25: ^( extend_key rule_id )
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_extend_key.nextNode(), root_2);
@@ -3829,19 +3830,19 @@
                 }
                 stream_rule_id.reset();
                 stream_extend_key.reset();
-                // src/main/resources/org/drools/lang/DRL.g:659:48: ( decl_metadata )*
+                // src/main/resources/org/drools/lang/DRL.g:673:48: ( decl_metadata )*
                 while ( stream_decl_metadata.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_metadata.next());
 
                 }
                 stream_decl_metadata.reset();
-                // src/main/resources/org/drools/lang/DRL.g:659:63: ( rule_attributes )?
+                // src/main/resources/org/drools/lang/DRL.g:673:63: ( rule_attributes )?
                 if ( stream_rule_attributes.hasNext() ) {
                     adaptor.addChild(root_1, stream_rule_attributes.next());
 
                 }
                 stream_rule_attributes.reset();
-                // src/main/resources/org/drools/lang/DRL.g:659:80: ( when_part )?
+                // src/main/resources/org/drools/lang/DRL.g:673:80: ( when_part )?
                 if ( stream_when_part.hasNext() ) {
                     adaptor.addChild(root_1, stream_when_part.next());
 
@@ -3884,7 +3885,7 @@
     };
 
     // $ANTLR start when_part
-    // src/main/resources/org/drools/lang/DRL.g:662:1: when_part : WHEN ( COLON )? normal_lhs_block -> WHEN normal_lhs_block ;
+    // src/main/resources/org/drools/lang/DRL.g:676:1: when_part : WHEN ( COLON )? normal_lhs_block -> WHEN 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);
@@ -3902,17 +3903,17 @@
         RewriteRuleTokenStream stream_WHEN=new RewriteRuleTokenStream(adaptor,"token WHEN");
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:663:2: ( WHEN ( COLON )? normal_lhs_block -> WHEN normal_lhs_block )
-            // src/main/resources/org/drools/lang/DRL.g:663:5: WHEN ( COLON )? normal_lhs_block
+            // src/main/resources/org/drools/lang/DRL.g:677:2: ( WHEN ( COLON )? normal_lhs_block -> WHEN normal_lhs_block )
+            // src/main/resources/org/drools/lang/DRL.g:677:5: WHEN ( COLON )? normal_lhs_block
             {
             WHEN76=(Token)input.LT(1);
-            match(input,WHEN,FOLLOW_WHEN_in_when_part1554); if (failed) return retval;
+            match(input,WHEN,FOLLOW_WHEN_in_when_part1559); if (failed) return retval;
             if ( backtracking==0 ) stream_WHEN.add(WHEN76);
 
             if ( backtracking==0 ) {
               	emit(WHEN76, DroolsEditorType.KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:664:3: ( COLON )?
+            // src/main/resources/org/drools/lang/DRL.g:678:3: ( COLON )?
             int alt32=2;
             int LA32_0 = input.LA(1);
 
@@ -3921,10 +3922,10 @@
             }
             switch (alt32) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:664:3: COLON
+                    // src/main/resources/org/drools/lang/DRL.g:678:3: COLON
                     {
                     COLON77=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_when_part1560); if (failed) return retval;
+                    match(input,COLON,FOLLOW_COLON_in_when_part1565); if (failed) return retval;
                     if ( backtracking==0 ) stream_COLON.add(COLON77);
 
 
@@ -3939,14 +3940,14 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION);	
             }
-            pushFollow(FOLLOW_normal_lhs_block_in_when_part1570);
+            pushFollow(FOLLOW_normal_lhs_block_in_when_part1575);
             normal_lhs_block78=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block78.getTree());
 
             // AST REWRITE
-            // elements: normal_lhs_block, WHEN
+            // elements: WHEN, normal_lhs_block
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3956,7 +3957,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 667:2: -> WHEN normal_lhs_block
+            // 681:2: -> WHEN normal_lhs_block
             {
                 adaptor.addChild(root_0, stream_WHEN.next());
                 adaptor.addChild(root_0, stream_normal_lhs_block.next());
@@ -3990,7 +3991,7 @@
     };
 
     // $ANTLR start rule_id
-    // src/main/resources/org/drools/lang/DRL.g:670:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );
+    // src/main/resources/org/drools/lang/DRL.g:684: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);
@@ -4000,11 +4001,11 @@
         Token id=null;
 
         Object id_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:671:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:685:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
             int alt33=2;
             int LA33_0 = input.LA(1);
 
@@ -4017,16 +4018,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("670:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 33, 0, input);
+                    new NoViableAltException("684:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 33, 0, input);
 
                 throw nvae;
             }
             switch (alt33) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:671:5: id= ID
+                    // src/main/resources/org/drools/lang/DRL.g:685:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_rule_id1591); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_rule_id1596); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -4045,7 +4046,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 673:64: -> VT_RULE_ID[$id]
+                    // 687:64: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -4056,10 +4057,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:674:5: id= STRING
+                    // src/main/resources/org/drools/lang/DRL.g:688:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_id1607); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1612); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -4078,7 +4079,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 676:64: -> VT_RULE_ID[$id]
+                    // 690:64: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -4113,7 +4114,7 @@
     };
 
     // $ANTLR start rule_attributes
-    // src/main/resources/org/drools/lang/DRL.g:679:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
+    // src/main/resources/org/drools/lang/DRL.g:693: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);
@@ -4131,19 +4132,19 @@
 
         Object COLON80_tree=null;
         Object COMMA82_tree=null;
-        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
-        RewriteRuleSubtreeStream stream_rule_attribute=new RewriteRuleSubtreeStream(adaptor,"rule rule_attribute");
+        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 {
-            // src/main/resources/org/drools/lang/DRL.g:680:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
-            // src/main/resources/org/drools/lang/DRL.g:680:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            // src/main/resources/org/drools/lang/DRL.g:694:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // src/main/resources/org/drools/lang/DRL.g:694:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
             {
-            // src/main/resources/org/drools/lang/DRL.g:680:4: ( attributes_key COLON )?
+            // src/main/resources/org/drools/lang/DRL.g:694:4: ( attributes_key COLON )?
             int alt34=2;
             int LA34_0 = input.LA(1);
 
-            if ( (LA34_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(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.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(Drool!
 sSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+            if ( (LA34_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 LA34_1 = input.LA(2);
 
                 if ( (LA34_1==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES)))) {
@@ -4152,15 +4153,15 @@
             }
             switch (alt34) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:680:6: attributes_key COLON
+                    // src/main/resources/org/drools/lang/DRL.g:694:6: attributes_key COLON
                     {
-                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1628);
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1633);
                     attributes_key79=attributes_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_attributes_key.add(attributes_key79.getTree());
                     COLON80=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1630); if (failed) return retval;
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1635); if (failed) return retval;
                     if ( backtracking==0 ) stream_COLON.add(COLON80);
 
                     if ( backtracking==0 ) {
@@ -4172,12 +4173,12 @@
 
             }
 
-            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1640);
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1645);
             rule_attribute81=rule_attribute();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute81.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:681:18: ( ( COMMA )? attr= rule_attribute )*
+            // src/main/resources/org/drools/lang/DRL.g:695:18: ( ( COMMA )? attr= rule_attribute )*
             loop36:
             do {
                 int alt36=2;
@@ -4186,16 +4187,16 @@
                 if ( (LA36_0==COMMA) ) {
                     alt36=1;
                 }
-                else if ( (LA36_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(Drools!
 SoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                else if ( (LA36_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(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.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierK!
 ey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
                     alt36=1;
                 }
 
 
                 switch (alt36) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:681:20: ( COMMA )? attr= rule_attribute
+            	    // src/main/resources/org/drools/lang/DRL.g:695:20: ( COMMA )? attr= rule_attribute
             	    {
-            	    // src/main/resources/org/drools/lang/DRL.g:681:20: ( COMMA )?
+            	    // src/main/resources/org/drools/lang/DRL.g:695:20: ( COMMA )?
             	    int alt35=2;
             	    int LA35_0 = input.LA(1);
 
@@ -4204,10 +4205,10 @@
             	    }
             	    switch (alt35) {
             	        case 1 :
-            	            // src/main/resources/org/drools/lang/DRL.g:681:20: COMMA
+            	            // src/main/resources/org/drools/lang/DRL.g:695:20: COMMA
             	            {
             	            COMMA82=(Token)input.LT(1);
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1644); if (failed) return retval;
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1649); if (failed) return retval;
             	            if ( backtracking==0 ) stream_COMMA.add(COMMA82);
 
 
@@ -4219,7 +4220,7 @@
             	    if ( backtracking==0 ) {
             	      	emit(COMMA82, DroolsEditorType.SYMBOL);	
             	    }
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1651);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1656);
             	    attr=rule_attribute();
             	    _fsp--;
             	    if (failed) return retval;
@@ -4235,7 +4236,7 @@
 
 
             // AST REWRITE
-            // elements: attributes_key, rule_attribute
+            // elements: rule_attribute, attributes_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -4245,14 +4246,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 682:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            // 696:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
             {
-                // src/main/resources/org/drools/lang/DRL.g:682:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                // src/main/resources/org/drools/lang/DRL.g:696: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:682:27: ( attributes_key )?
+                // src/main/resources/org/drools/lang/DRL.g:696:27: ( attributes_key )?
                 if ( stream_attributes_key.hasNext() ) {
                     adaptor.addChild(root_1, stream_attributes_key.next());
 
@@ -4299,7 +4300,7 @@
     };
 
     // $ANTLR start rule_attribute
-    // src/main/resources/org/drools/lang/DRL.g:685:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
+    // src/main/resources/org/drools/lang/DRL.g:699: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);
@@ -4334,16 +4335,16 @@
 
          boolean isFailed = true; pushParaphrases(DroolsParaphraseTypes.RULE_ATTRIBUTE); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:688:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
+            // src/main/resources/org/drools/lang/DRL.g:702:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
             int alt37=12;
             alt37 = dfa37.predict(input);
             switch (alt37) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:688:4: salience
+                    // src/main/resources/org/drools/lang/DRL.g:702:4: salience
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_salience_in_rule_attribute1690);
+                    pushFollow(FOLLOW_salience_in_rule_attribute1695);
                     salience83=salience();
                     _fsp--;
                     if (failed) return retval;
@@ -4352,11 +4353,11 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:689:4: no_loop
+                    // src/main/resources/org/drools/lang/DRL.g:703:4: no_loop
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute1696);
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1701);
                     no_loop84=no_loop();
                     _fsp--;
                     if (failed) return retval;
@@ -4365,11 +4366,11 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:690:4: agenda_group
+                    // src/main/resources/org/drools/lang/DRL.g:704:4: agenda_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1701);
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1706);
                     agenda_group85=agenda_group();
                     _fsp--;
                     if (failed) return retval;
@@ -4378,11 +4379,11 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/lang/DRL.g:691:4: duration
+                    // src/main/resources/org/drools/lang/DRL.g:705:4: duration
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_duration_in_rule_attribute1708);
+                    pushFollow(FOLLOW_duration_in_rule_attribute1713);
                     duration86=duration();
                     _fsp--;
                     if (failed) return retval;
@@ -4391,11 +4392,11 @@
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/lang/DRL.g:692:4: activation_group
+                    // src/main/resources/org/drools/lang/DRL.g:706:4: activation_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1715);
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1720);
                     activation_group87=activation_group();
                     _fsp--;
                     if (failed) return retval;
@@ -4404,11 +4405,11 @@
                     }
                     break;
                 case 6 :
-                    // src/main/resources/org/drools/lang/DRL.g:693:4: auto_focus
+                    // src/main/resources/org/drools/lang/DRL.g:707:4: auto_focus
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1721);
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1726);
                     auto_focus88=auto_focus();
                     _fsp--;
                     if (failed) return retval;
@@ -4417,11 +4418,11 @@
                     }
                     break;
                 case 7 :
-                    // src/main/resources/org/drools/lang/DRL.g:694:4: date_effective
+                    // src/main/resources/org/drools/lang/DRL.g:708:4: date_effective
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1727);
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1732);
                     date_effective89=date_effective();
                     _fsp--;
                     if (failed) return retval;
@@ -4430,11 +4431,11 @@
                     }
                     break;
                 case 8 :
-                    // src/main/resources/org/drools/lang/DRL.g:695:4: date_expires
+                    // src/main/resources/org/drools/lang/DRL.g:709:4: date_expires
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1733);
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1738);
                     date_expires90=date_expires();
                     _fsp--;
                     if (failed) return retval;
@@ -4443,11 +4444,11 @@
                     }
                     break;
                 case 9 :
-                    // src/main/resources/org/drools/lang/DRL.g:696:4: enabled
+                    // src/main/resources/org/drools/lang/DRL.g:710:4: enabled
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1739);
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1744);
                     enabled91=enabled();
                     _fsp--;
                     if (failed) return retval;
@@ -4456,11 +4457,11 @@
                     }
                     break;
                 case 10 :
-                    // src/main/resources/org/drools/lang/DRL.g:697:4: ruleflow_group
+                    // src/main/resources/org/drools/lang/DRL.g:711:4: ruleflow_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1745);
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1750);
                     ruleflow_group92=ruleflow_group();
                     _fsp--;
                     if (failed) return retval;
@@ -4469,11 +4470,11 @@
                     }
                     break;
                 case 11 :
-                    // src/main/resources/org/drools/lang/DRL.g:698:4: lock_on_active
+                    // src/main/resources/org/drools/lang/DRL.g:712:4: lock_on_active
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1751);
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1756);
                     lock_on_active93=lock_on_active();
                     _fsp--;
                     if (failed) return retval;
@@ -4482,11 +4483,11 @@
                     }
                     break;
                 case 12 :
-                    // src/main/resources/org/drools/lang/DRL.g:699:4: dialect
+                    // src/main/resources/org/drools/lang/DRL.g:713:4: dialect
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1756);
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1761);
                     dialect94=dialect();
                     _fsp--;
                     if (failed) return retval;
@@ -4511,7 +4512,7 @@
             recover(input,re);
         }
         finally {
-
+            
             	if (isEditorInterfaceEnabled && isFailed) {
             		if (input.LA(6) == EOF && input.LA(1) == ID && input.LA(2) == MISC && input.LA(3) == ID && 
             			input.LA(5) == MISC && input.LA(6) == ID && 
@@ -4564,7 +4565,7 @@
     };
 
     // $ANTLR start date_effective
-    // src/main/resources/org/drools/lang/DRL.g:744:1: date_effective : date_effective_key STRING ;
+    // src/main/resources/org/drools/lang/DRL.g:758: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);
@@ -4578,12 +4579,12 @@
         Object STRING96_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:745:2: ( date_effective_key STRING )
-            // src/main/resources/org/drools/lang/DRL.g:745:4: date_effective_key STRING
+            // src/main/resources/org/drools/lang/DRL.g:759:2: ( date_effective_key STRING )
+            // src/main/resources/org/drools/lang/DRL.g:759:4: date_effective_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_effective_key_in_date_effective1772);
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1777);
             date_effective_key95=date_effective_key();
             _fsp--;
             if (failed) return retval;
@@ -4592,7 +4593,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             STRING96=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1777); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_date_effective1782); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING96_tree = (Object)adaptor.create(STRING96);
             adaptor.addChild(root_0, STRING96_tree);
@@ -4626,7 +4627,7 @@
     };
 
     // $ANTLR start date_expires
-    // src/main/resources/org/drools/lang/DRL.g:749:1: date_expires : date_expires_key STRING ;
+    // src/main/resources/org/drools/lang/DRL.g:763: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);
@@ -4640,12 +4641,12 @@
         Object STRING98_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:750:2: ( date_expires_key STRING )
-            // src/main/resources/org/drools/lang/DRL.g:750:4: date_expires_key STRING
+            // src/main/resources/org/drools/lang/DRL.g:764:2: ( date_expires_key STRING )
+            // src/main/resources/org/drools/lang/DRL.g:764:4: date_expires_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_expires_key_in_date_expires1791);
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1796);
             date_expires_key97=date_expires_key();
             _fsp--;
             if (failed) return retval;
@@ -4654,7 +4655,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             STRING98=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1796); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_date_expires1801); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING98_tree = (Object)adaptor.create(STRING98);
             adaptor.addChild(root_0, STRING98_tree);
@@ -4688,7 +4689,7 @@
     };
 
     // $ANTLR start enabled
-    // src/main/resources/org/drools/lang/DRL.g:754:1: enabled : enabled_key ( BOOL | paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:768:1: enabled : enabled_key ( BOOL | paren_chunk ) ;
     public final enabled_return enabled() throws RecognitionException {
         enabled_return retval = new enabled_return();
         retval.start = input.LT(1);
@@ -4704,12 +4705,12 @@
         Object BOOL100_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:755:2: ( enabled_key ( BOOL | paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:755:4: enabled_key ( BOOL | paren_chunk )
+            // src/main/resources/org/drools/lang/DRL.g:769:2: ( enabled_key ( BOOL | paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:769:4: enabled_key ( BOOL | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_enabled_key_in_enabled1811);
+            pushFollow(FOLLOW_enabled_key_in_enabled1816);
             enabled_key99=enabled_key();
             _fsp--;
             if (failed) return retval;
@@ -4717,7 +4718,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:756:6: ( BOOL | paren_chunk )
+            // src/main/resources/org/drools/lang/DRL.g:770:6: ( BOOL | paren_chunk )
             int alt38=2;
             int LA38_0 = input.LA(1);
 
@@ -4730,16 +4731,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("756:6: ( BOOL | paren_chunk )", 38, 0, input);
+                    new NoViableAltException("770:6: ( BOOL | paren_chunk )", 38, 0, input);
 
                 throw nvae;
             }
             switch (alt38) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:756:8: BOOL
+                    // src/main/resources/org/drools/lang/DRL.g:770:8: BOOL
                     {
                     BOOL100=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_enabled1824); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_enabled1829); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL100_tree = (Object)adaptor.create(BOOL100);
                     adaptor.addChild(root_0, BOOL100_tree);
@@ -4751,9 +4752,9 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:757:8: paren_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:771:8: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_enabled1835);
+                    pushFollow(FOLLOW_paren_chunk_in_enabled1840);
                     paren_chunk101=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -4790,7 +4791,7 @@
     };
 
     // $ANTLR start salience
-    // src/main/resources/org/drools/lang/DRL.g:761:1: salience : salience_key ( INT | paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:775: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);
@@ -4806,12 +4807,12 @@
         Object INT103_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:762:2: ( salience_key ( INT | paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:762:4: salience_key ( INT | paren_chunk )
+            // src/main/resources/org/drools/lang/DRL.g:776:2: ( salience_key ( INT | paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:776:4: salience_key ( INT | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_salience_key_in_salience1855);
+            pushFollow(FOLLOW_salience_key_in_salience1860);
             salience_key102=salience_key();
             _fsp--;
             if (failed) return retval;
@@ -4819,7 +4820,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:763:3: ( INT | paren_chunk )
+            // src/main/resources/org/drools/lang/DRL.g:777:3: ( INT | paren_chunk )
             int alt39=2;
             int LA39_0 = input.LA(1);
 
@@ -4832,16 +4833,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("763:3: ( INT | paren_chunk )", 39, 0, input);
+                    new NoViableAltException("777:3: ( INT | paren_chunk )", 39, 0, input);
 
                 throw nvae;
             }
             switch (alt39) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:763:5: INT
+                    // src/main/resources/org/drools/lang/DRL.g:777:5: INT
                     {
                     INT103=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_salience1864); if (failed) return retval;
+                    match(input,INT,FOLLOW_INT_in_salience1869); if (failed) return retval;
                     if ( backtracking==0 ) {
                     INT103_tree = (Object)adaptor.create(INT103);
                     adaptor.addChild(root_0, INT103_tree);
@@ -4853,9 +4854,9 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:764:5: paren_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:778:5: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_salience1873);
+                    pushFollow(FOLLOW_paren_chunk_in_salience1878);
                     paren_chunk104=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -4892,7 +4893,7 @@
     };
 
     // $ANTLR start no_loop
-    // src/main/resources/org/drools/lang/DRL.g:768:1: no_loop : no_loop_key ( BOOL )? ;
+    // src/main/resources/org/drools/lang/DRL.g:782: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);
@@ -4906,12 +4907,12 @@
         Object BOOL106_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:769:2: ( no_loop_key ( BOOL )? )
-            // src/main/resources/org/drools/lang/DRL.g:769:4: no_loop_key ( BOOL )?
+            // src/main/resources/org/drools/lang/DRL.g:783:2: ( no_loop_key ( BOOL )? )
+            // src/main/resources/org/drools/lang/DRL.g:783:4: no_loop_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_no_loop_key_in_no_loop1888);
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1893);
             no_loop_key105=no_loop_key();
             _fsp--;
             if (failed) return retval;
@@ -4919,7 +4920,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:769:66: ( BOOL )?
+            // src/main/resources/org/drools/lang/DRL.g:783:66: ( BOOL )?
             int alt40=2;
             int LA40_0 = input.LA(1);
 
@@ -4928,10 +4929,10 @@
             }
             switch (alt40) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:769:66: BOOL
+                    // src/main/resources/org/drools/lang/DRL.g:783:66: BOOL
                     {
                     BOOL106=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1893); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1898); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL106_tree = (Object)adaptor.create(BOOL106);
                     adaptor.addChild(root_0, BOOL106_tree);
@@ -4971,7 +4972,7 @@
     };
 
     // $ANTLR start auto_focus
-    // src/main/resources/org/drools/lang/DRL.g:773:1: auto_focus : auto_focus_key ( BOOL )? ;
+    // src/main/resources/org/drools/lang/DRL.g:787: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);
@@ -4985,12 +4986,12 @@
         Object BOOL108_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:774:2: ( auto_focus_key ( BOOL )? )
-            // src/main/resources/org/drools/lang/DRL.g:774:4: auto_focus_key ( BOOL )?
+            // src/main/resources/org/drools/lang/DRL.g:788:2: ( auto_focus_key ( BOOL )? )
+            // src/main/resources/org/drools/lang/DRL.g:788:4: auto_focus_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1908);
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1913);
             auto_focus_key107=auto_focus_key();
             _fsp--;
             if (failed) return retval;
@@ -4998,7 +4999,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:774:69: ( BOOL )?
+            // src/main/resources/org/drools/lang/DRL.g:788:69: ( BOOL )?
             int alt41=2;
             int LA41_0 = input.LA(1);
 
@@ -5007,10 +5008,10 @@
             }
             switch (alt41) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:774:69: BOOL
+                    // src/main/resources/org/drools/lang/DRL.g:788:69: BOOL
                     {
                     BOOL108=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1913); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1918); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL108_tree = (Object)adaptor.create(BOOL108);
                     adaptor.addChild(root_0, BOOL108_tree);
@@ -5050,7 +5051,7 @@
     };
 
     // $ANTLR start activation_group
-    // src/main/resources/org/drools/lang/DRL.g:778:1: activation_group : activation_group_key STRING ;
+    // src/main/resources/org/drools/lang/DRL.g:792: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);
@@ -5064,12 +5065,12 @@
         Object STRING110_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:779:2: ( activation_group_key STRING )
-            // src/main/resources/org/drools/lang/DRL.g:779:4: activation_group_key STRING
+            // src/main/resources/org/drools/lang/DRL.g:793:2: ( activation_group_key STRING )
+            // src/main/resources/org/drools/lang/DRL.g:793:4: activation_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_activation_group_key_in_activation_group1930);
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1935);
             activation_group_key109=activation_group_key();
             _fsp--;
             if (failed) return retval;
@@ -5078,7 +5079,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             STRING110=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1935); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_activation_group1940); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING110_tree = (Object)adaptor.create(STRING110);
             adaptor.addChild(root_0, STRING110_tree);
@@ -5112,7 +5113,7 @@
     };
 
     // $ANTLR start ruleflow_group
-    // src/main/resources/org/drools/lang/DRL.g:783:1: ruleflow_group : ruleflow_group_key STRING ;
+    // src/main/resources/org/drools/lang/DRL.g:797: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);
@@ -5126,12 +5127,12 @@
         Object STRING112_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:784:2: ( ruleflow_group_key STRING )
-            // src/main/resources/org/drools/lang/DRL.g:784:4: ruleflow_group_key STRING
+            // src/main/resources/org/drools/lang/DRL.g:798:2: ( ruleflow_group_key STRING )
+            // src/main/resources/org/drools/lang/DRL.g:798:4: ruleflow_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1949);
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1954);
             ruleflow_group_key111=ruleflow_group_key();
             _fsp--;
             if (failed) return retval;
@@ -5140,7 +5141,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             STRING112=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1954); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1959); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING112_tree = (Object)adaptor.create(STRING112);
             adaptor.addChild(root_0, STRING112_tree);
@@ -5174,7 +5175,7 @@
     };
 
     // $ANTLR start agenda_group
-    // src/main/resources/org/drools/lang/DRL.g:788:1: agenda_group : agenda_group_key STRING ;
+    // src/main/resources/org/drools/lang/DRL.g:802: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);
@@ -5188,12 +5189,12 @@
         Object STRING114_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:789:2: ( agenda_group_key STRING )
-            // src/main/resources/org/drools/lang/DRL.g:789:4: agenda_group_key STRING
+            // src/main/resources/org/drools/lang/DRL.g:803:2: ( agenda_group_key STRING )
+            // src/main/resources/org/drools/lang/DRL.g:803:4: agenda_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1968);
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1973);
             agenda_group_key113=agenda_group_key();
             _fsp--;
             if (failed) return retval;
@@ -5202,7 +5203,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             STRING114=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1973); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1978); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING114_tree = (Object)adaptor.create(STRING114);
             adaptor.addChild(root_0, STRING114_tree);
@@ -5236,7 +5237,7 @@
     };
 
     // $ANTLR start duration
-    // src/main/resources/org/drools/lang/DRL.g:793:1: duration : duration_key INT ;
+    // src/main/resources/org/drools/lang/DRL.g:807:1: duration : duration_key INT ;
     public final duration_return duration() throws RecognitionException {
         duration_return retval = new duration_return();
         retval.start = input.LT(1);
@@ -5250,12 +5251,12 @@
         Object INT116_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:794:2: ( duration_key INT )
-            // src/main/resources/org/drools/lang/DRL.g:794:4: duration_key INT
+            // src/main/resources/org/drools/lang/DRL.g:808:2: ( duration_key INT )
+            // src/main/resources/org/drools/lang/DRL.g:808:4: duration_key INT
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_duration_key_in_duration1987);
+            pushFollow(FOLLOW_duration_key_in_duration1992);
             duration_key115=duration_key();
             _fsp--;
             if (failed) return retval;
@@ -5264,7 +5265,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             INT116=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1992); if (failed) return retval;
+            match(input,INT,FOLLOW_INT_in_duration1997); if (failed) return retval;
             if ( backtracking==0 ) {
             INT116_tree = (Object)adaptor.create(INT116);
             adaptor.addChild(root_0, INT116_tree);
@@ -5298,7 +5299,7 @@
     };
 
     // $ANTLR start dialect
-    // src/main/resources/org/drools/lang/DRL.g:798:1: dialect : dialect_key STRING ;
+    // src/main/resources/org/drools/lang/DRL.g:812:1: dialect : dialect_key STRING ;
     public final dialect_return dialect() throws RecognitionException {
         dialect_return retval = new dialect_return();
         retval.start = input.LT(1);
@@ -5312,12 +5313,12 @@
         Object STRING118_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:799:2: ( dialect_key STRING )
-            // src/main/resources/org/drools/lang/DRL.g:799:4: dialect_key STRING
+            // src/main/resources/org/drools/lang/DRL.g:813:2: ( dialect_key STRING )
+            // src/main/resources/org/drools/lang/DRL.g:813:4: dialect_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_dialect_key_in_dialect2008);
+            pushFollow(FOLLOW_dialect_key_in_dialect2013);
             dialect_key117=dialect_key();
             _fsp--;
             if (failed) return retval;
@@ -5326,7 +5327,7 @@
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
             STRING118=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect2013); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_dialect2018); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING118_tree = (Object)adaptor.create(STRING118);
             adaptor.addChild(root_0, STRING118_tree);
@@ -5360,7 +5361,7 @@
     };
 
     // $ANTLR start lock_on_active
-    // src/main/resources/org/drools/lang/DRL.g:803:1: lock_on_active : lock_on_active_key ( BOOL )? ;
+    // src/main/resources/org/drools/lang/DRL.g:817: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);
@@ -5374,12 +5375,12 @@
         Object BOOL120_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:804:2: ( lock_on_active_key ( BOOL )? )
-            // src/main/resources/org/drools/lang/DRL.g:804:4: lock_on_active_key ( BOOL )?
+            // src/main/resources/org/drools/lang/DRL.g:818:2: ( lock_on_active_key ( BOOL )? )
+            // src/main/resources/org/drools/lang/DRL.g:818:4: lock_on_active_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active2031);
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active2036);
             lock_on_active_key119=lock_on_active_key();
             _fsp--;
             if (failed) return retval;
@@ -5387,7 +5388,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_RULE_HEADER_KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:804:73: ( BOOL )?
+            // src/main/resources/org/drools/lang/DRL.g:818:73: ( BOOL )?
             int alt42=2;
             int LA42_0 = input.LA(1);
 
@@ -5396,10 +5397,10 @@
             }
             switch (alt42) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:804:73: BOOL
+                    // src/main/resources/org/drools/lang/DRL.g:818:73: BOOL
                     {
                     BOOL120=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active2036); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active2041); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL120_tree = (Object)adaptor.create(BOOL120);
                     adaptor.addChild(root_0, BOOL120_tree);
@@ -5439,7 +5440,7 @@
     };
 
     // $ANTLR start normal_lhs_block
-    // src/main/resources/org/drools/lang/DRL.g:808:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // src/main/resources/org/drools/lang/DRL.g:822: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);
@@ -5451,10 +5452,10 @@
 
         RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:809:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // src/main/resources/org/drools/lang/DRL.g:809:4: ( lhs )*
+            // src/main/resources/org/drools/lang/DRL.g:823:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // src/main/resources/org/drools/lang/DRL.g:823:4: ( lhs )*
             {
-            // src/main/resources/org/drools/lang/DRL.g:809:4: ( lhs )*
+            // src/main/resources/org/drools/lang/DRL.g:823:4: ( lhs )*
             loop43:
             do {
                 int alt43=2;
@@ -5467,9 +5468,9 @@
 
                 switch (alt43) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:809:4: lhs
+            	    // src/main/resources/org/drools/lang/DRL.g:823:4: lhs
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block2051);
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block2056);
             	    lhs121=lhs();
             	    _fsp--;
             	    if (failed) return retval;
@@ -5495,14 +5496,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 810:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            // 824:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
             {
-                // src/main/resources/org/drools/lang/DRL.g:810:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                // src/main/resources/org/drools/lang/DRL.g:824: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:810:23: ( lhs )*
+                // src/main/resources/org/drools/lang/DRL.g:824:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -5541,7 +5542,7 @@
     };
 
     // $ANTLR start lhs
-    // src/main/resources/org/drools/lang/DRL.g:813:1: lhs : lhs_or ;
+    // src/main/resources/org/drools/lang/DRL.g:827:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
@@ -5553,12 +5554,12 @@
 
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:813:5: ( lhs_or )
-            // src/main/resources/org/drools/lang/DRL.g:813:7: lhs_or
+            // src/main/resources/org/drools/lang/DRL.g:827:5: ( lhs_or )
+            // src/main/resources/org/drools/lang/DRL.g:827:7: lhs_or
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_or_in_lhs2072);
+            pushFollow(FOLLOW_lhs_or_in_lhs2077);
             lhs_or122=lhs_or();
             _fsp--;
             if (failed) return retval;
@@ -5589,7 +5590,7 @@
     };
 
     // $ANTLR start lhs_or
-    // src/main/resources/org/drools/lang/DRL.g:816: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 ) )* );
+    // src/main/resources/org/drools/lang/DRL.g:830: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);
@@ -5618,18 +5619,21 @@
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_or_key=new RewriteRuleSubtreeStream(adaptor,"rule or_key");
         RewriteRuleSubtreeStream stream_lhs_and=new RewriteRuleSubtreeStream(adaptor,"rule lhs_and");
-
+        
         	Token orToken = null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:819: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 ) )* )
+            // src/main/resources/org/drools/lang/DRL.g:833: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 alt47=2;
             int LA47_0 = input.LA(1);
 
             if ( (LA47_0==LEFT_PAREN) ) {
                 int LA47_1 = input.LA(2);
 
-                if ( (LA47_1==ID) ) {
+                if ( (LA47_1==LEFT_PAREN) ) {
+                    alt47=2;
+                }
+                else if ( (LA47_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
@@ -5651,7 +5655,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("816: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 ) )* );", 47, 4, input);
+                                new NoViableAltException("830: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 ) )* );", 47, 4, input);
 
                             throw nvae;
                         }
@@ -5670,7 +5674,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("816: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 ) )* );", 47, 5, input);
+                                new NoViableAltException("830: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 ) )* );", 47, 5, input);
 
                             throw nvae;
                         }
@@ -5679,19 +5683,16 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("816: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 ) )* );", 47, 3, input);
+                            new NoViableAltException("830: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 ) )* );", 47, 3, input);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA47_1==LEFT_PAREN) ) {
-                    alt47=2;
-                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("816: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 ) )* );", 47, 1, input);
+                        new NoViableAltException("830: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 ) )* );", 47, 1, input);
 
                     throw nvae;
                 }
@@ -5702,22 +5703,22 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("816: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 ) )* );", 47, 0, input);
+                    new NoViableAltException("830: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 ) )* );", 47, 0, input);
 
                 throw nvae;
             }
             switch (alt47) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:819:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:833:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
                     {
                     LEFT_PAREN123=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or2096); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or2101); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN123);
 
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN123, DroolsEditorType.SYMBOL);	
                     }
-                    pushFollow(FOLLOW_or_key_in_lhs_or2106);
+                    pushFollow(FOLLOW_or_key_in_lhs_or2111);
                     or=or_key();
                     _fsp--;
                     if (failed) return retval;
@@ -5725,7 +5726,7 @@
                     if ( backtracking==0 ) {
                       	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);	
                     }
-                    // src/main/resources/org/drools/lang/DRL.g:823:4: ( lhs_and )+
+                    // src/main/resources/org/drools/lang/DRL.g:837:4: ( lhs_and )+
                     int cnt44=0;
                     loop44:
                     do {
@@ -5739,9 +5740,9 @@
 
                         switch (alt44) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:823:4: lhs_and
+                    	    // src/main/resources/org/drools/lang/DRL.g:837:4: lhs_and
                     	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or2114);
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or2119);
                     	    lhs_and124=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -5761,7 +5762,7 @@
                     } while (true);
 
                     RIGHT_PAREN125=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or2120); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or2125); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN125);
 
                     if ( backtracking==0 ) {
@@ -5779,9 +5780,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 825:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                    // 839:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
                     {
-                        // src/main/resources/org/drools/lang/DRL.g:825:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                        // src/main/resources/org/drools/lang/DRL.g:839: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);
@@ -5806,12 +5807,12 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:826: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 ) )*
+                    // src/main/resources/org/drools/lang/DRL.g:840: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 ) )*
                     {
-                    // src/main/resources/org/drools/lang/DRL.g:826:4: ( lhs_and -> lhs_and )
-                    // src/main/resources/org/drools/lang/DRL.g:826:5: lhs_and
+                    // src/main/resources/org/drools/lang/DRL.g:840:4: ( lhs_and -> lhs_and )
+                    // src/main/resources/org/drools/lang/DRL.g:840:5: lhs_and
                     {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or2143);
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or2148);
                     lhs_and126=lhs_and();
                     _fsp--;
                     if (failed) return retval;
@@ -5828,7 +5829,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 826:13: -> lhs_and
+                    // 840:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -5838,7 +5839,7 @@
 
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:827:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    // src/main/resources/org/drools/lang/DRL.g:841:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     loop46:
                     do {
                         int alt46=2;
@@ -5866,9 +5867,9 @@
 
                         switch (alt46) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:827:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    // src/main/resources/org/drools/lang/DRL.g:841:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
                     	    {
-                    	    // src/main/resources/org/drools/lang/DRL.g:827:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    // src/main/resources/org/drools/lang/DRL.g:841:28: (value= or_key | pipe= DOUBLE_PIPE )
                     	    int alt45=2;
                     	    int LA45_0 = input.LA(1);
 
@@ -5881,15 +5882,15 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("827:28: (value= or_key | pipe= DOUBLE_PIPE )", 45, 0, input);
+                    	            new NoViableAltException("841:28: (value= or_key | pipe= DOUBLE_PIPE )", 45, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt45) {
                     	        case 1 :
-                    	            // src/main/resources/org/drools/lang/DRL.g:827:29: value= or_key
+                    	            // src/main/resources/org/drools/lang/DRL.g:841:29: value= or_key
                     	            {
-                    	            pushFollow(FOLLOW_or_key_in_lhs_or2165);
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or2170);
                     	            value=or_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -5901,10 +5902,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // src/main/resources/org/drools/lang/DRL.g:827:69: pipe= DOUBLE_PIPE
+                    	            // src/main/resources/org/drools/lang/DRL.g:841:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
-                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or2172); if (failed) return retval;
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or2177); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
                     	            if ( backtracking==0 ) {
@@ -5919,7 +5920,7 @@
                     	    if ( backtracking==0 ) {
                     	      	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);	
                     	    }
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or2183);
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or2188);
                     	    lhs_and127=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -5936,9 +5937,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 830:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    // 844:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	    {
-                    	        // src/main/resources/org/drools/lang/DRL.g:830:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        // src/main/resources/org/drools/lang/DRL.g:844: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);
@@ -5989,7 +5990,7 @@
     };
 
     // $ANTLR start lhs_and
-    // src/main/resources/org/drools/lang/DRL.g:833: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 ) )* );
+    // src/main/resources/org/drools/lang/DRL.g:847: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);
@@ -6013,16 +6014,16 @@
         Object amper_tree=null;
         Object LEFT_PAREN128_tree=null;
         Object RIGHT_PAREN130_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");
-        RewriteRuleTokenStream stream_DOUBLE_AMPER=new RewriteRuleTokenStream(adaptor,"token DOUBLE_AMPER");
-        RewriteRuleSubtreeStream stream_lhs_unary=new RewriteRuleSubtreeStream(adaptor,"rule lhs_unary");
         RewriteRuleSubtreeStream stream_and_key=new RewriteRuleSubtreeStream(adaptor,"rule and_key");
-
+        RewriteRuleSubtreeStream stream_lhs_unary=new RewriteRuleSubtreeStream(adaptor,"rule lhs_unary");
+        
         	Token andToken = null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:836: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 ) )* )
+            // src/main/resources/org/drools/lang/DRL.g:850: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 alt51=2;
             int LA51_0 = input.LA(1);
 
@@ -6054,7 +6055,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("833: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 ) )* );", 51, 6, input);
+                                    new NoViableAltException("847: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 ) )* );", 51, 6, input);
 
                                 throw nvae;
                             }
@@ -6073,7 +6074,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("833: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 ) )* );", 51, 7, input);
+                                    new NoViableAltException("847: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 ) )* );", 51, 7, input);
 
                                 throw nvae;
                             }
@@ -6158,6 +6159,7 @@
                         case VK_ACTION:
                         case VK_REVERSE:
                         case VK_RESULT:
+                        case VK_OPERATOR:
                         case SEMICOLON:
                         case DOT:
                         case DOT_STAR:
@@ -6185,7 +6187,6 @@
                         case LESS:
                         case LESS_EQUAL:
                         case NOT_EQUAL:
-                        case GRAVE_ACCENT:
                         case FLOAT:
                         case NULL:
                         case LEFT_SQUARE:
@@ -6200,6 +6201,8 @@
                         case HexDigit:
                         case UnicodeEscape:
                         case OctalEscape:
+                        case GRAVE_ACCENT:
+                        case TILDE:
                         case SH_STYLE_SINGLE_LINE_COMMENT:
                         case C_STYLE_SINGLE_LINE_COMMENT:
                         case MULTI_LINE_COMMENT:
@@ -6210,7 +6213,7 @@
                         default:
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("833: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 ) )* );", 51, 4, input);
+                                new NoViableAltException("847: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 ) )* );", 51, 4, input);
 
                             throw nvae;
                         }
@@ -6230,7 +6233,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("833: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 ) )* );", 51, 5, input);
+                                new NoViableAltException("847: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 ) )* );", 51, 5, input);
 
                             throw nvae;
                         }
@@ -6239,7 +6242,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("833: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 ) )* );", 51, 3, input);
+                            new NoViableAltException("847: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 ) )* );", 51, 3, input);
 
                         throw nvae;
                     }
@@ -6251,7 +6254,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("833: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 ) )* );", 51, 1, input);
+                        new NoViableAltException("847: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 ) )* );", 51, 1, input);
 
                     throw nvae;
                 }
@@ -6262,22 +6265,22 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("833: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 ) )* );", 51, 0, input);
+                    new NoViableAltException("847: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 ) )* );", 51, 0, input);
 
                 throw nvae;
             }
             switch (alt51) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:836:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:850:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
                     {
                     LEFT_PAREN128=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and2224); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and2229); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN128);
 
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN128, DroolsEditorType.SYMBOL);	
                     }
-                    pushFollow(FOLLOW_and_key_in_lhs_and2234);
+                    pushFollow(FOLLOW_and_key_in_lhs_and2239);
                     and=and_key();
                     _fsp--;
                     if (failed) return retval;
@@ -6285,7 +6288,7 @@
                     if ( backtracking==0 ) {
                       	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);	
                     }
-                    // src/main/resources/org/drools/lang/DRL.g:840:4: ( lhs_unary )+
+                    // src/main/resources/org/drools/lang/DRL.g:854:4: ( lhs_unary )+
                     int cnt48=0;
                     loop48:
                     do {
@@ -6299,9 +6302,9 @@
 
                         switch (alt48) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:840:4: lhs_unary
+                    	    // src/main/resources/org/drools/lang/DRL.g:854:4: lhs_unary
                     	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2242);
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2247);
                     	    lhs_unary129=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -6321,7 +6324,7 @@
                     } while (true);
 
                     RIGHT_PAREN130=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and2248); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and2253); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN130);
 
                     if ( backtracking==0 ) {
@@ -6339,9 +6342,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 842:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                    // 856:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
                     {
-                        // src/main/resources/org/drools/lang/DRL.g:842:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                        // src/main/resources/org/drools/lang/DRL.g:856: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);
@@ -6366,12 +6369,12 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:843: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 ) )*
+                    // src/main/resources/org/drools/lang/DRL.g:857: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 ) )*
                     {
-                    // src/main/resources/org/drools/lang/DRL.g:843:4: ( lhs_unary -> lhs_unary )
-                    // src/main/resources/org/drools/lang/DRL.g:843:5: lhs_unary
+                    // src/main/resources/org/drools/lang/DRL.g:857:4: ( lhs_unary -> lhs_unary )
+                    // src/main/resources/org/drools/lang/DRL.g:857:5: lhs_unary
                     {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and2272);
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and2277);
                     lhs_unary131=lhs_unary();
                     _fsp--;
                     if (failed) return retval;
@@ -6388,7 +6391,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 843:15: -> lhs_unary
+                    // 857:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -6398,7 +6401,7 @@
 
                     }
 
-                    // src/main/resources/org/drools/lang/DRL.g:844:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    // src/main/resources/org/drools/lang/DRL.g:858:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     loop50:
                     do {
                         int alt50=2;
@@ -6426,9 +6429,9 @@
 
                         switch (alt50) {
                     	case 1 :
-                    	    // src/main/resources/org/drools/lang/DRL.g:844:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    // src/main/resources/org/drools/lang/DRL.g:858:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
                     	    {
-                    	    // src/main/resources/org/drools/lang/DRL.g:844:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    // src/main/resources/org/drools/lang/DRL.g:858:30: (value= and_key | amper= DOUBLE_AMPER )
                     	    int alt49=2;
                     	    int LA49_0 = input.LA(1);
 
@@ -6441,15 +6444,15 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("844:30: (value= and_key | amper= DOUBLE_AMPER )", 49, 0, input);
+                    	            new NoViableAltException("858:30: (value= and_key | amper= DOUBLE_AMPER )", 49, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt49) {
                     	        case 1 :
-                    	            // src/main/resources/org/drools/lang/DRL.g:844:31: value= and_key
+                    	            // src/main/resources/org/drools/lang/DRL.g:858:31: value= and_key
                     	            {
-                    	            pushFollow(FOLLOW_and_key_in_lhs_and2294);
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and2299);
                     	            value=and_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -6461,10 +6464,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // src/main/resources/org/drools/lang/DRL.g:844:73: amper= DOUBLE_AMPER
+                    	            // src/main/resources/org/drools/lang/DRL.g:858:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
-                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and2301); if (failed) return retval;
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and2306); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
 
                     	            if ( backtracking==0 ) {
@@ -6479,7 +6482,7 @@
                     	    if ( backtracking==0 ) {
                     	      	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR);	
                     	    }
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2312);
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2317);
                     	    lhs_unary132=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -6496,9 +6499,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 847:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    // 861:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	    {
-                    	        // src/main/resources/org/drools/lang/DRL.g:847:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        // src/main/resources/org/drools/lang/DRL.g:861: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);
@@ -6549,7 +6552,7 @@
     };
 
     // $ANTLR start lhs_unary
-    // src/main/resources/org/drools/lang/DRL.g:850:1: lhs_unary : ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
+    // src/main/resources/org/drools/lang/DRL.g:864:1: lhs_unary : ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
     public final lhs_unary_return lhs_unary() throws RecognitionException {
         lhs_unary_return retval = new lhs_unary_return();
         retval.start = input.LT(1);
@@ -6579,12 +6582,12 @@
         Object SEMICOLON142_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:851:2: ( ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
-            // src/main/resources/org/drools/lang/DRL.g:851:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:865:2: ( ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // src/main/resources/org/drools/lang/DRL.g:865:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            // src/main/resources/org/drools/lang/DRL.g:851:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            // src/main/resources/org/drools/lang/DRL.g:865:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
             int alt52=7;
             int LA52_0 = input.LA(1);
 
@@ -6612,7 +6615,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("851:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 52, 1, input);
+                        new NoViableAltException("865:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 52, 1, input);
 
                     throw nvae;
                 }
@@ -6623,15 +6626,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("851:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 52, 0, input);
+                    new NoViableAltException("865:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 52, 0, input);
 
                 throw nvae;
             }
             switch (alt52) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:851:6: lhs_exist
+                    // src/main/resources/org/drools/lang/DRL.g:865:6: lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary2343);
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary2348);
                     lhs_exist133=lhs_exist();
                     _fsp--;
                     if (failed) return retval;
@@ -6640,13 +6643,13 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:852:4: {...}? => lhs_not_binding
+                    // src/main/resources/org/drools/lang/DRL.g:866:4: {...}? => lhs_not_binding
                     {
                     if ( !(validateNotWithBinding()) ) {
                         if (backtracking>0) {failed=true; return retval;}
                         throw new FailedPredicateException(input, "lhs_unary", "validateNotWithBinding()");
                     }
-                    pushFollow(FOLLOW_lhs_not_binding_in_lhs_unary2351);
+                    pushFollow(FOLLOW_lhs_not_binding_in_lhs_unary2356);
                     lhs_not_binding134=lhs_not_binding();
                     _fsp--;
                     if (failed) return retval;
@@ -6655,9 +6658,9 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:853:5: lhs_not
+                    // src/main/resources/org/drools/lang/DRL.g:867:5: lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary2357);
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary2362);
                     lhs_not135=lhs_not();
                     _fsp--;
                     if (failed) return retval;
@@ -6666,9 +6669,9 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/lang/DRL.g:854:5: lhs_eval
+                    // src/main/resources/org/drools/lang/DRL.g:868:5: lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary2363);
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary2368);
                     lhs_eval136=lhs_eval();
                     _fsp--;
                     if (failed) return retval;
@@ -6677,9 +6680,9 @@
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/lang/DRL.g:855:5: lhs_forall
+                    // src/main/resources/org/drools/lang/DRL.g:869:5: lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2369);
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2374);
                     lhs_forall137=lhs_forall();
                     _fsp--;
                     if (failed) return retval;
@@ -6688,20 +6691,20 @@
                     }
                     break;
                 case 6 :
-                    // src/main/resources/org/drools/lang/DRL.g:856:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:870:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN138=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2375); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2380); if (failed) return retval;
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN138, DroolsEditorType.SYMBOL); emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION );	
                     }
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2386);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2391);
                     lhs_or139=lhs_or();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or139.getTree());
                     RIGHT_PAREN140=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2392); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2397); if (failed) return retval;
                     if ( backtracking==0 ) {
                     RIGHT_PAREN140_tree = (Object)adaptor.create(RIGHT_PAREN140);
                     adaptor.addChild(root_0, RIGHT_PAREN140_tree);
@@ -6713,9 +6716,9 @@
                     }
                     break;
                 case 7 :
-                    // src/main/resources/org/drools/lang/DRL.g:859:5: pattern_source
+                    // src/main/resources/org/drools/lang/DRL.g:873:5: pattern_source
                     {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2400);
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2405);
                     pattern_source141=pattern_source();
                     _fsp--;
                     if (failed) return retval;
@@ -6726,7 +6729,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:861:3: ( ( SEMICOLON )=> SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:875:3: ( ( SEMICOLON )=> SEMICOLON )?
             int alt53=2;
             int LA53_0 = input.LA(1);
 
@@ -6739,10 +6742,10 @@
             }
             switch (alt53) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:861:4: ( SEMICOLON )=> SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:875:4: ( SEMICOLON )=> SEMICOLON
                     {
                     SEMICOLON142=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary2414); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary2419); if (failed) return retval;
                     if ( backtracking==0 ) {
                       	emit(SEMICOLON142, DroolsEditorType.SYMBOL);	
                     }
@@ -6778,7 +6781,7 @@
     };
 
     // $ANTLR start lhs_exist
-    // src/main/resources/org/drools/lang/DRL.g:864: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 )? ) ;
+    // src/main/resources/org/drools/lang/DRL.g:878: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);
@@ -6800,14 +6803,14 @@
         Object RIGHT_PAREN147_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_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         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 {
-            // src/main/resources/org/drools/lang/DRL.g:865: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 )? ) )
-            // src/main/resources/org/drools/lang/DRL.g:865:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // src/main/resources/org/drools/lang/DRL.g:879: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 )? ) )
+            // src/main/resources/org/drools/lang/DRL.g:879: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_exist2430);
+            pushFollow(FOLLOW_exists_key_in_lhs_exist2435);
             exists_key143=exists_key();
             _fsp--;
             if (failed) return retval;
@@ -6815,14 +6818,14 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:867:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // src/main/resources/org/drools/lang/DRL.g:881:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             int alt54=3;
             alt54 = dfa54.predict(input);
             switch (alt54) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:867:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // src/main/resources/org/drools/lang/DRL.g:881:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2457);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2462);
                     lhs_or144=lhs_or();
                     _fsp--;
                     if (failed) return retval;
@@ -6831,22 +6834,22 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:868:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:882:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN145=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2464); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2469); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN145);
 
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN145, DroolsEditorType.SYMBOL);	
                     }
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2472);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2477);
                     lhs_or146=lhs_or();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_lhs_or.add(lhs_or146.getTree());
                     RIGHT_PAREN147=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2479); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2484); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN147);
 
                     if ( backtracking==0 ) {
@@ -6856,9 +6859,9 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:871:12: lhs_pattern
+                    // src/main/resources/org/drools/lang/DRL.g:885:12: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2494);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2499);
                     lhs_pattern148=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
@@ -6871,7 +6874,7 @@
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, lhs_pattern, lhs_or, exists_key
+            // elements: lhs_pattern, exists_key, RIGHT_PAREN, lhs_or
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6881,26 +6884,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 873:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 887:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // src/main/resources/org/drools/lang/DRL.g:873:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // src/main/resources/org/drools/lang/DRL.g:887: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:873:26: ( lhs_or )?
+                // src/main/resources/org/drools/lang/DRL.g:887:26: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // src/main/resources/org/drools/lang/DRL.g:873:34: ( lhs_pattern )?
+                // src/main/resources/org/drools/lang/DRL.g:887:34: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
                 }
                 stream_lhs_pattern.reset();
-                // src/main/resources/org/drools/lang/DRL.g:873:47: ( RIGHT_PAREN )?
+                // src/main/resources/org/drools/lang/DRL.g:887:47: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -6939,7 +6942,7 @@
     };
 
     // $ANTLR start lhs_not_binding
-    // src/main/resources/org/drools/lang/DRL.g:876:1: lhs_not_binding : not_key fact_binding -> ^( not_key ^( VT_PATTERN fact_binding ) ) ;
+    // src/main/resources/org/drools/lang/DRL.g:890:1: lhs_not_binding : not_key fact_binding -> ^( not_key ^( VT_PATTERN fact_binding ) ) ;
     public final lhs_not_binding_return lhs_not_binding() throws RecognitionException {
         lhs_not_binding_return retval = new lhs_not_binding_return();
         retval.start = input.LT(1);
@@ -6954,22 +6957,22 @@
         RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
         RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:877:2: ( not_key fact_binding -> ^( not_key ^( VT_PATTERN fact_binding ) ) )
-            // src/main/resources/org/drools/lang/DRL.g:877:4: not_key fact_binding
+            // src/main/resources/org/drools/lang/DRL.g:891:2: ( not_key fact_binding -> ^( not_key ^( VT_PATTERN fact_binding ) ) )
+            // src/main/resources/org/drools/lang/DRL.g:891:4: not_key fact_binding
             {
-            pushFollow(FOLLOW_not_key_in_lhs_not_binding2540);
+            pushFollow(FOLLOW_not_key_in_lhs_not_binding2545);
             not_key149=not_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_not_key.add(not_key149.getTree());
-            pushFollow(FOLLOW_fact_binding_in_lhs_not_binding2542);
+            pushFollow(FOLLOW_fact_binding_in_lhs_not_binding2547);
             fact_binding150=fact_binding();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_fact_binding.add(fact_binding150.getTree());
 
             // AST REWRITE
-            // elements: fact_binding, not_key
+            // elements: not_key, fact_binding
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6979,14 +6982,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 878:2: -> ^( not_key ^( VT_PATTERN fact_binding ) )
+            // 892:2: -> ^( not_key ^( VT_PATTERN fact_binding ) )
             {
-                // src/main/resources/org/drools/lang/DRL.g:878:5: ^( not_key ^( VT_PATTERN fact_binding ) )
+                // src/main/resources/org/drools/lang/DRL.g:892:5: ^( not_key ^( VT_PATTERN fact_binding ) )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
 
-                // src/main/resources/org/drools/lang/DRL.g:878:15: ^( VT_PATTERN fact_binding )
+                // src/main/resources/org/drools/lang/DRL.g:892:15: ^( VT_PATTERN fact_binding )
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_2);
@@ -7028,7 +7031,7 @@
     };
 
     // $ANTLR start lhs_not
-    // src/main/resources/org/drools/lang/DRL.g:881: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 )? ) ;
+    // src/main/resources/org/drools/lang/DRL.g:895: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);
@@ -7050,14 +7053,14 @@
         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_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");
-        RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:881: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 )? ) )
-            // src/main/resources/org/drools/lang/DRL.g:881:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // src/main/resources/org/drools/lang/DRL.g:895: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 )? ) )
+            // src/main/resources/org/drools/lang/DRL.g:895: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_not2565);
+            pushFollow(FOLLOW_not_key_in_lhs_not2570);
             not_key151=not_key();
             _fsp--;
             if (failed) return retval;
@@ -7065,17 +7068,17 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:883:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // src/main/resources/org/drools/lang/DRL.g:897:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             int alt55=3;
             alt55 = dfa55.predict(input);
             switch (alt55) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:883:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // src/main/resources/org/drools/lang/DRL.g:897:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
                     if ( backtracking==0 ) {
                       	emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION );	
                     }
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2587);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2592);
                     lhs_or152=lhs_or();
                     _fsp--;
                     if (failed) return retval;
@@ -7084,22 +7087,22 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:884:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:898:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN153=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2594); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2599); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN153);
 
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN153, DroolsEditorType.SYMBOL); emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION );	
                     }
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2603);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2608);
                     lhs_or154=lhs_or();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_lhs_or.add(lhs_or154.getTree());
                     RIGHT_PAREN155=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2609); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2614); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN155);
 
                     if ( backtracking==0 ) {
@@ -7109,9 +7112,9 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:887:6: lhs_pattern
+                    // src/main/resources/org/drools/lang/DRL.g:901:6: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2619);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2624);
                     lhs_pattern156=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
@@ -7124,7 +7127,7 @@
 
 
             // AST REWRITE
-            // elements: not_key, lhs_or, RIGHT_PAREN, lhs_pattern
+            // elements: RIGHT_PAREN, not_key, lhs_pattern, lhs_or
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7134,26 +7137,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 888:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 902:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // src/main/resources/org/drools/lang/DRL.g:888:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // src/main/resources/org/drools/lang/DRL.g:902: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);
 
-                // src/main/resources/org/drools/lang/DRL.g:888:23: ( lhs_or )?
+                // src/main/resources/org/drools/lang/DRL.g:902:23: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // src/main/resources/org/drools/lang/DRL.g:888:31: ( lhs_pattern )?
+                // src/main/resources/org/drools/lang/DRL.g:902:31: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
                 }
                 stream_lhs_pattern.reset();
-                // src/main/resources/org/drools/lang/DRL.g:888:44: ( RIGHT_PAREN )?
+                // src/main/resources/org/drools/lang/DRL.g:902:44: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -7192,7 +7195,7 @@
     };
 
     // $ANTLR start lhs_eval
-    // src/main/resources/org/drools/lang/DRL.g:891:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:905: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);
@@ -7204,13 +7207,13 @@
         paren_chunk_return pc = null;
 
 
-        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:892:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:892:4: ev= eval_key pc= paren_chunk
+            // src/main/resources/org/drools/lang/DRL.g:906:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:906:4: ev= eval_key pc= paren_chunk
             {
-            pushFollow(FOLLOW_eval_key_in_lhs_eval2658);
+            pushFollow(FOLLOW_eval_key_in_lhs_eval2663);
             ev=eval_key();
             _fsp--;
             if (failed) return retval;
@@ -7218,7 +7221,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_EVAL);	
             }
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2667);
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2672);
             pc=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -7232,7 +7235,7 @@
             }
 
             // AST REWRITE
-            // elements: paren_chunk, eval_key
+            // elements: eval_key, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7242,9 +7245,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 898:3: -> ^( eval_key paren_chunk )
+            // 912:3: -> ^( eval_key paren_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:898:6: ^( eval_key paren_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:912:6: ^( eval_key paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -7283,7 +7286,7 @@
     };
 
     // $ANTLR start lhs_forall
-    // src/main/resources/org/drools/lang/DRL.g:901:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
+    // src/main/resources/org/drools/lang/DRL.g:915: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);
@@ -7304,22 +7307,22 @@
         RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:902:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
-            // src/main/resources/org/drools/lang/DRL.g:902:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:916:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
+            // src/main/resources/org/drools/lang/DRL.g:916:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
             {
-            pushFollow(FOLLOW_forall_key_in_lhs_forall2694);
+            pushFollow(FOLLOW_forall_key_in_lhs_forall2699);
             forall_key157=forall_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_forall_key.add(forall_key157.getTree());
             LEFT_PAREN158=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2699); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2704); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN158);
 
             if ( backtracking==0 ) {
               	emit(LEFT_PAREN158, DroolsEditorType.SYMBOL);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:904:4: ( lhs_pattern )+
+            // src/main/resources/org/drools/lang/DRL.g:918:4: ( lhs_pattern )+
             int cnt56=0;
             loop56:
             do {
@@ -7333,9 +7336,9 @@
 
                 switch (alt56) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:904:4: lhs_pattern
+            	    // src/main/resources/org/drools/lang/DRL.g:918:4: lhs_pattern
             	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2707);
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2712);
             	    lhs_pattern159=lhs_pattern();
             	    _fsp--;
             	    if (failed) return retval;
@@ -7355,7 +7358,7 @@
             } while (true);
 
             RIGHT_PAREN160=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2713); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2718); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN160);
 
             if ( backtracking==0 ) {
@@ -7363,7 +7366,7 @@
             }
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, lhs_pattern, forall_key
+            // elements: RIGHT_PAREN, forall_key, lhs_pattern
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7373,9 +7376,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 906:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+            // 920:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
             {
-                // src/main/resources/org/drools/lang/DRL.g:906:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+                // src/main/resources/org/drools/lang/DRL.g:920:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -7422,7 +7425,7 @@
     };
 
     // $ANTLR start pattern_source
-    // src/main/resources/org/drools/lang/DRL.g:909:1: pattern_source : lhs_pattern ( over_clause )? ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    // src/main/resources/org/drools/lang/DRL.g:923:1: pattern_source : lhs_pattern ( over_clause )? ( FROM ( 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);
@@ -7447,17 +7450,17 @@
 
          boolean isFailed = true;	
         try {
-            // src/main/resources/org/drools/lang/DRL.g:912:2: ( lhs_pattern ( over_clause )? ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
-            // src/main/resources/org/drools/lang/DRL.g:912:4: lhs_pattern ( over_clause )? ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // src/main/resources/org/drools/lang/DRL.g:926:2: ( lhs_pattern ( over_clause )? ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // src/main/resources/org/drools/lang/DRL.g:926:4: lhs_pattern ( over_clause )? ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2749);
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2754);
             lhs_pattern161=lhs_pattern();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern161.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:913:3: ( over_clause )?
+            // src/main/resources/org/drools/lang/DRL.g:927:3: ( over_clause )?
             int alt57=2;
             int LA57_0 = input.LA(1);
 
@@ -7466,9 +7469,9 @@
             }
             switch (alt57) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:913:3: over_clause
+                    // src/main/resources/org/drools/lang/DRL.g:927:3: over_clause
                     {
-                    pushFollow(FOLLOW_over_clause_in_pattern_source2753);
+                    pushFollow(FOLLOW_over_clause_in_pattern_source2758);
                     over_clause162=over_clause();
                     _fsp--;
                     if (failed) return retval;
@@ -7479,7 +7482,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:914:3: ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // src/main/resources/org/drools/lang/DRL.g:928:3: ( FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             int alt59=2;
             int LA59_0 = input.LA(1);
 
@@ -7488,10 +7491,10 @@
             }
             switch (alt59) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:915:4: FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // src/main/resources/org/drools/lang/DRL.g:929:4: FROM ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
                     FROM163=(Token)input.LT(1);
-                    match(input,FROM,FOLLOW_FROM_in_pattern_source2763); if (failed) return retval;
+                    match(input,FROM,FOLLOW_FROM_in_pattern_source2768); if (failed) return retval;
                     if ( backtracking==0 ) {
                     FROM163_tree = (Object)adaptor.create(FROM163);
                     root_0 = (Object)adaptor.becomeRoot(FROM163_tree, root_0);
@@ -7500,7 +7503,7 @@
                       	emit(FROM163, DroolsEditorType.KEYWORD);
                       			emit(Location.LOCATION_LHS_FROM);	
                     }
-                    // src/main/resources/org/drools/lang/DRL.g:918:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // src/main/resources/org/drools/lang/DRL.g:932:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     int alt58=4;
                     switch ( input.LA(1) ) {
                     case ACCUMULATE:
@@ -7526,7 +7529,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("918:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 58, 3, input);
+                                new NoViableAltException("932:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 58, 3, input);
 
                             throw nvae;
                         }
@@ -7535,16 +7538,16 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("918:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 58, 0, input);
+                            new NoViableAltException("932:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 58, 0, input);
 
                         throw nvae;
                     }
 
                     switch (alt58) {
                         case 1 :
-                            // src/main/resources/org/drools/lang/DRL.g:918:14: accumulate_statement
+                            // src/main/resources/org/drools/lang/DRL.g:932:14: accumulate_statement
                             {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2783);
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2788);
                             accumulate_statement164=accumulate_statement();
                             _fsp--;
                             if (failed) return retval;
@@ -7553,9 +7556,9 @@
                             }
                             break;
                         case 2 :
-                            // src/main/resources/org/drools/lang/DRL.g:919:15: collect_statement
+                            // src/main/resources/org/drools/lang/DRL.g:933:15: collect_statement
                             {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source2799);
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2804);
                             collect_statement165=collect_statement();
                             _fsp--;
                             if (failed) return retval;
@@ -7564,9 +7567,9 @@
                             }
                             break;
                         case 3 :
-                            // src/main/resources/org/drools/lang/DRL.g:920:15: entrypoint_statement
+                            // src/main/resources/org/drools/lang/DRL.g:934:15: entrypoint_statement
                             {
-                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2816);
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2821);
                             entrypoint_statement166=entrypoint_statement();
                             _fsp--;
                             if (failed) return retval;
@@ -7575,9 +7578,9 @@
                             }
                             break;
                         case 4 :
-                            // src/main/resources/org/drools/lang/DRL.g:921:15: from_source
+                            // src/main/resources/org/drools/lang/DRL.g:935:15: from_source
                             {
-                            pushFollow(FOLLOW_from_source_in_pattern_source2832);
+                            pushFollow(FOLLOW_from_source_in_pattern_source2837);
                             from_source167=from_source();
                             _fsp--;
                             if (failed) return retval;
@@ -7612,7 +7615,7 @@
             recover(input,re);
         }
         finally {
-
+            
             	if (isEditorInterfaceEnabled && input.LA(3) == EOF && input.LA(1) == ACCUMULATE) {
             			emit(input.LT(1), DroolsEditorType.KEYWORD);
             			emit(input.LT(2), DroolsEditorType.SYMBOL);
@@ -7636,7 +7639,7 @@
     };
 
     // $ANTLR start over_clause
-    // src/main/resources/org/drools/lang/DRL.g:939:1: over_clause : OVER over_elements ( COMMA over_elements )* ;
+    // src/main/resources/org/drools/lang/DRL.g:953: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);
@@ -7654,13 +7657,13 @@
         Object COMMA170_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:940:2: ( OVER over_elements ( COMMA over_elements )* )
-            // src/main/resources/org/drools/lang/DRL.g:940:4: OVER over_elements ( COMMA over_elements )*
+            // src/main/resources/org/drools/lang/DRL.g:954:2: ( OVER over_elements ( COMMA over_elements )* )
+            // src/main/resources/org/drools/lang/DRL.g:954:4: OVER over_elements ( COMMA over_elements )*
             {
             root_0 = (Object)adaptor.nil();
 
             OVER168=(Token)input.LT(1);
-            match(input,OVER,FOLLOW_OVER_in_over_clause2864); if (failed) return retval;
+            match(input,OVER,FOLLOW_OVER_in_over_clause2869); if (failed) return retval;
             if ( backtracking==0 ) {
             OVER168_tree = (Object)adaptor.create(OVER168);
             root_0 = (Object)adaptor.becomeRoot(OVER168_tree, root_0);
@@ -7668,12 +7671,12 @@
             if ( backtracking==0 ) {
               	emit(OVER168, DroolsEditorType.KEYWORD);	
             }
-            pushFollow(FOLLOW_over_elements_in_over_clause2869);
+            pushFollow(FOLLOW_over_elements_in_over_clause2874);
             over_elements169=over_elements();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, over_elements169.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:941:4: ( COMMA over_elements )*
+            // src/main/resources/org/drools/lang/DRL.g:955:4: ( COMMA over_elements )*
             loop60:
             do {
                 int alt60=2;
@@ -7698,14 +7701,14 @@
 
                 switch (alt60) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:941:5: COMMA over_elements
+            	    // src/main/resources/org/drools/lang/DRL.g:955:5: COMMA over_elements
             	    {
             	    COMMA170=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_over_clause2876); if (failed) return retval;
+            	    match(input,COMMA,FOLLOW_COMMA_in_over_clause2881); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	      	emit(COMMA170, DroolsEditorType.SYMBOL);	
             	    }
-            	    pushFollow(FOLLOW_over_elements_in_over_clause2881);
+            	    pushFollow(FOLLOW_over_elements_in_over_clause2886);
             	    over_elements171=over_elements();
             	    _fsp--;
             	    if (failed) return retval;
@@ -7745,7 +7748,7 @@
     };
 
     // $ANTLR start over_elements
-    // src/main/resources/org/drools/lang/DRL.g:944:1: over_elements : id1= ID COLON id2= ID paren_chunk -> ^( VT_BEHAVIOR $id1 $id2 paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:958:1: over_elements : id1= ID COLON id2= ID paren_chunk -> ^( VT_BEHAVIOR $id1 $id2 paren_chunk ) ;
     public final over_elements_return over_elements() throws RecognitionException {
         over_elements_return retval = new over_elements_return();
         retval.start = input.LT(1);
@@ -7765,52 +7768,52 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:945:2: (id1= ID COLON id2= ID paren_chunk -> ^( VT_BEHAVIOR $id1 $id2 paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:945:4: id1= ID COLON id2= ID paren_chunk
+            // src/main/resources/org/drools/lang/DRL.g:959:2: (id1= ID COLON id2= ID paren_chunk -> ^( VT_BEHAVIOR $id1 $id2 paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:959:4: id1= ID COLON id2= ID paren_chunk
             {
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_over_elements2896); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_over_elements2901); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             if ( backtracking==0 ) {
               	emit(id1, DroolsEditorType.IDENTIFIER);	
             }
             COLON172=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_over_elements2903); if (failed) return retval;
+            match(input,COLON,FOLLOW_COLON_in_over_elements2908); if (failed) return retval;
             if ( backtracking==0 ) stream_COLON.add(COLON172);
 
             if ( backtracking==0 ) {
               	emit(COLON172, DroolsEditorType.SYMBOL);	
             }
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_over_elements2912); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_over_elements2917); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
               	emit(id2, DroolsEditorType.IDENTIFIER);	
             }
-            pushFollow(FOLLOW_paren_chunk_in_over_elements2919);
+            pushFollow(FOLLOW_paren_chunk_in_over_elements2924);
             paren_chunk173=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk173.getTree());
 
             // AST REWRITE
-            // elements: paren_chunk, id2, id1
-            // token labels: id2, id1
+            // elements: id2, paren_chunk, id1
+            // token labels: id1, id2
             // rule labels: retval
             // token list labels: 
             // rule list labels: 
             if ( backtracking==0 ) {
             retval.tree = root_0;
-            RewriteRuleTokenStream stream_id2=new RewriteRuleTokenStream(adaptor,"token id2",id2);
             RewriteRuleTokenStream stream_id1=new RewriteRuleTokenStream(adaptor,"token id1",id1);
+            RewriteRuleTokenStream stream_id2=new RewriteRuleTokenStream(adaptor,"token id2",id2);
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 949:2: -> ^( VT_BEHAVIOR $id1 $id2 paren_chunk )
+            // 963:2: -> ^( VT_BEHAVIOR $id1 $id2 paren_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:949:5: ^( VT_BEHAVIOR $id1 $id2 paren_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:963:5: ^( VT_BEHAVIOR $id1 $id2 paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BEHAVIOR, "VT_BEHAVIOR"), root_1);
@@ -7851,7 +7854,7 @@
     };
 
     // $ANTLR start accumulate_statement
-    // src/main/resources/org/drools/lang/DRL.g:952:1: accumulate_statement : ACCUMULATE LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
+    // src/main/resources/org/drools/lang/DRL.g:966:1: accumulate_statement : ACCUMULATE LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( ACCUMULATE 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);
@@ -7873,19 +7876,19 @@
         Object LEFT_PAREN175_tree=null;
         Object COMMA177_tree=null;
         Object RIGHT_PAREN180_tree=null;
+        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_ACCUMULATE=new RewriteRuleTokenStream(adaptor,"token ACCUMULATE");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
-        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
+        RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_accumulate_init_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_init_clause");
         RewriteRuleSubtreeStream stream_accumulate_id_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_id_clause");
-        RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:953:2: ( ACCUMULATE LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
-            // src/main/resources/org/drools/lang/DRL.g:953:4: ACCUMULATE LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:967:2: ( ACCUMULATE LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
+            // src/main/resources/org/drools/lang/DRL.g:967:4: ACCUMULATE LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
             {
             ACCUMULATE174=(Token)input.LT(1);
-            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2945); if (failed) return retval;
+            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2950); if (failed) return retval;
             if ( backtracking==0 ) stream_ACCUMULATE.add(ACCUMULATE174);
 
             if ( backtracking==0 ) {
@@ -7895,18 +7898,18 @@
               	emit(Location.LOCATION_LHS_FROM_ACCUMULATE);	
             }
             LEFT_PAREN175=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2954); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2959); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN175);
 
             if ( backtracking==0 ) {
               	emit(LEFT_PAREN175, DroolsEditorType.SYMBOL);	
             }
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2962);
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2967);
             lhs_or176=lhs_or();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_lhs_or.add(lhs_or176.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:957:3: ( COMMA )?
+            // src/main/resources/org/drools/lang/DRL.g:971:3: ( COMMA )?
             int alt61=2;
             int LA61_0 = input.LA(1);
 
@@ -7915,10 +7918,10 @@
             }
             switch (alt61) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:957:3: COMMA
+                    // src/main/resources/org/drools/lang/DRL.g:971:3: COMMA
                     {
                     COMMA177=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2967); if (failed) return retval;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2972); if (failed) return retval;
                     if ( backtracking==0 ) stream_COMMA.add(COMMA177);
 
 
@@ -7930,7 +7933,7 @@
             if ( backtracking==0 ) {
               	emit(COMMA177, DroolsEditorType.SYMBOL);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:958:3: ( accumulate_init_clause | accumulate_id_clause )
+            // src/main/resources/org/drools/lang/DRL.g:972:3: ( accumulate_init_clause | accumulate_id_clause )
             int alt62=2;
             int LA62_0 = input.LA(1);
 
@@ -7943,15 +7946,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("958:3: ( accumulate_init_clause | accumulate_id_clause )", 62, 0, input);
+                    new NoViableAltException("972:3: ( accumulate_init_clause | accumulate_id_clause )", 62, 0, input);
 
                 throw nvae;
             }
             switch (alt62) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:958:5: accumulate_init_clause
+                    // src/main/resources/org/drools/lang/DRL.g:972:5: accumulate_init_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2977);
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2982);
                     accumulate_init_clause178=accumulate_init_clause();
                     _fsp--;
                     if (failed) return retval;
@@ -7960,9 +7963,9 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:959:5: accumulate_id_clause
+                    // src/main/resources/org/drools/lang/DRL.g:973:5: accumulate_id_clause
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2983);
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2988);
                     accumulate_id_clause179=accumulate_id_clause();
                     _fsp--;
                     if (failed) return retval;
@@ -7974,7 +7977,7 @@
             }
 
             RIGHT_PAREN180=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2991); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2996); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN180);
 
             if ( backtracking==0 ) {
@@ -7985,7 +7988,7 @@
             }
 
             // AST REWRITE
-            // elements: lhs_or, ACCUMULATE, accumulate_id_clause, accumulate_init_clause, RIGHT_PAREN
+            // elements: RIGHT_PAREN, lhs_or, accumulate_id_clause, accumulate_init_clause, ACCUMULATE
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7995,21 +7998,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 963:3: -> ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+            // 977:3: -> ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
             {
-                // src/main/resources/org/drools/lang/DRL.g:963:6: ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+                // src/main/resources/org/drools/lang/DRL.g:977:6: ^( ACCUMULATE lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_ACCUMULATE.next(), root_1);
 
                 adaptor.addChild(root_1, stream_lhs_or.next());
-                // src/main/resources/org/drools/lang/DRL.g:963:26: ( accumulate_init_clause )?
+                // src/main/resources/org/drools/lang/DRL.g:977:26: ( accumulate_init_clause )?
                 if ( stream_accumulate_init_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_init_clause.next());
 
                 }
                 stream_accumulate_init_clause.reset();
-                // src/main/resources/org/drools/lang/DRL.g:963:50: ( accumulate_id_clause )?
+                // src/main/resources/org/drools/lang/DRL.g:977:50: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -8049,7 +8052,7 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // src/main/resources/org/drools/lang/DRL.g:967:1: accumulate_init_clause : INIT pc1= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE] (cm1= COMMA )? action_key pc2= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE] (cm2= COMMA )? ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )? res1= result_key pc4= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE] -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
+    // src/main/resources/org/drools/lang/DRL.g:981:1: accumulate_init_clause : INIT pc1= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE] (cm1= COMMA )? action_key pc2= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE] (cm2= COMMA )? ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )? res1= result_key pc4= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE] -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $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);
@@ -8081,17 +8084,17 @@
         Object INIT181_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_INIT=new RewriteRuleTokenStream(adaptor,"token INIT");
-        RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
         RewriteRuleSubtreeStream stream_accumulate_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_paren_chunk");
         RewriteRuleSubtreeStream stream_reverse_key=new RewriteRuleSubtreeStream(adaptor,"rule reverse_key");
         RewriteRuleSubtreeStream stream_result_key=new RewriteRuleSubtreeStream(adaptor,"rule result_key");
+        RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
          boolean isFailed = true;	
         try {
-            // src/main/resources/org/drools/lang/DRL.g:970:2: ( INIT pc1= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE] (cm1= COMMA )? action_key pc2= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE] (cm2= COMMA )? ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )? res1= result_key pc4= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE] -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
-            // src/main/resources/org/drools/lang/DRL.g:970:4: INIT pc1= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE] (cm1= COMMA )? action_key pc2= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE] (cm2= COMMA )? ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )? res1= result_key pc4= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE]
+            // src/main/resources/org/drools/lang/DRL.g:984:2: ( INIT pc1= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE] (cm1= COMMA )? action_key pc2= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE] (cm2= COMMA )? ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )? res1= result_key pc4= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE] -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // src/main/resources/org/drools/lang/DRL.g:984:4: INIT pc1= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE] (cm1= COMMA )? action_key pc2= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE] (cm2= COMMA )? ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )? res1= result_key pc4= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE]
             {
             INIT181=(Token)input.LT(1);
-            match(input,INIT,FOLLOW_INIT_in_accumulate_init_clause3037); if (failed) return retval;
+            match(input,INIT,FOLLOW_INIT_in_accumulate_init_clause3042); if (failed) return retval;
             if ( backtracking==0 ) stream_INIT.add(INIT181);
 
             if ( backtracking==0 ) {
@@ -8100,12 +8103,12 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT);	
             }
-            pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3048);
+            pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3053);
             pc1=accumulate_paren_chunk(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE);
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_accumulate_paren_chunk.add(pc1.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:972:84: (cm1= COMMA )?
+            // src/main/resources/org/drools/lang/DRL.g:986:84: (cm1= COMMA )?
             int alt63=2;
             int LA63_0 = input.LA(1);
 
@@ -8114,10 +8117,10 @@
             }
             switch (alt63) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:972:84: cm1= COMMA
+                    // src/main/resources/org/drools/lang/DRL.g:986:84: cm1= COMMA
                     {
                     cm1=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause3053); if (failed) return retval;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause3058); if (failed) return retval;
                     if ( backtracking==0 ) stream_COMMA.add(cm1);
 
 
@@ -8132,17 +8135,17 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION);	
             }
-            pushFollow(FOLLOW_action_key_in_accumulate_init_clause3064);
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause3069);
             action_key182=action_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_action_key.add(action_key182.getTree());
-            pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3068);
+            pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3073);
             pc2=accumulate_paren_chunk(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE);
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_accumulate_paren_chunk.add(pc2.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:974:97: (cm2= COMMA )?
+            // src/main/resources/org/drools/lang/DRL.g:988:97: (cm2= COMMA )?
             int alt64=2;
             int LA64_0 = input.LA(1);
 
@@ -8151,10 +8154,10 @@
             }
             switch (alt64) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:974:97: cm2= COMMA
+                    // src/main/resources/org/drools/lang/DRL.g:988:97: cm2= COMMA
                     {
                     cm2=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause3073); if (failed) return retval;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause3078); if (failed) return retval;
                     if ( backtracking==0 ) stream_COMMA.add(cm2);
 
 
@@ -8169,24 +8172,24 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:977:2: ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )?
+            // src/main/resources/org/drools/lang/DRL.g:991:2: ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )?
             int alt66=2;
             alt66 = dfa66.predict(input);
             switch (alt66) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:977:4: reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )?
+                    // src/main/resources/org/drools/lang/DRL.g:991:4: reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )?
                     {
-                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause3086);
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause3091);
                     reverse_key183=reverse_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_reverse_key.add(reverse_key183.getTree());
-                    pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3090);
+                    pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3095);
                     pc3=accumulate_paren_chunk(Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE);
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_accumulate_paren_chunk.add(pc3.getTree());
-                    // src/main/resources/org/drools/lang/DRL.g:977:100: (cm3= COMMA )?
+                    // src/main/resources/org/drools/lang/DRL.g:991:100: (cm3= COMMA )?
                     int alt65=2;
                     int LA65_0 = input.LA(1);
 
@@ -8195,10 +8198,10 @@
                     }
                     switch (alt65) {
                         case 1 :
-                            // src/main/resources/org/drools/lang/DRL.g:977:100: cm3= COMMA
+                            // src/main/resources/org/drools/lang/DRL.g:991:100: cm3= COMMA
                             {
                             cm3=(Token)input.LT(1);
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause3095); if (failed) return retval;
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause3100); if (failed) return retval;
                             if ( backtracking==0 ) stream_COMMA.add(cm3);
 
 
@@ -8219,7 +8222,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT);	
             }
-            pushFollow(FOLLOW_result_key_in_accumulate_init_clause3110);
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause3115);
             res1=result_key();
             _fsp--;
             if (failed) return retval;
@@ -8227,35 +8230,35 @@
             if ( backtracking==0 ) {
               	emit(((Token)res1.start), DroolsEditorType.KEYWORD);	
             }
-            pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3116);
+            pushFollow(FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3121);
             pc4=accumulate_paren_chunk(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE);
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_accumulate_paren_chunk.add(pc4.getTree());
 
             // AST REWRITE
-            // elements: pc3, action_key, result_key, INIT, pc2, reverse_key, pc1, pc4
+            // elements: pc4, result_key, pc2, reverse_key, pc3, action_key, pc1, INIT
             // token labels: 
-            // rule labels: pc4, pc3, retval, pc1, pc2
+            // rule labels: pc2, pc3, pc4, pc1, retval
             // token list labels: 
             // rule list labels: 
             if ( backtracking==0 ) {
             retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
+            RewriteRuleSubtreeStream stream_pc2=new RewriteRuleSubtreeStream(adaptor,"token pc2",pc2!=null?pc2.tree:null);
             RewriteRuleSubtreeStream stream_pc3=new RewriteRuleSubtreeStream(adaptor,"token pc3",pc3!=null?pc3.tree:null);
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.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_pc2=new RewriteRuleSubtreeStream(adaptor,"token pc2",pc2!=null?pc2.tree:null);
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 980:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 994:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
             {
-                // src/main/resources/org/drools/lang/DRL.g:980:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                // src/main/resources/org/drools/lang/DRL.g:994:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( INIT $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);
 
-                // src/main/resources/org/drools/lang/DRL.g:980:33: ^( INIT $pc1)
+                // src/main/resources/org/drools/lang/DRL.g:994:33: ^( INIT $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_INIT.next(), root_2);
@@ -8264,7 +8267,7 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // src/main/resources/org/drools/lang/DRL.g:980:46: ^( action_key $pc2)
+                // src/main/resources/org/drools/lang/DRL.g:994:46: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -8273,9 +8276,9 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // src/main/resources/org/drools/lang/DRL.g:980:65: ( ^( reverse_key $pc3) )?
-                if ( stream_pc3.hasNext()||stream_reverse_key.hasNext() ) {
-                    // src/main/resources/org/drools/lang/DRL.g:980:65: ^( reverse_key $pc3)
+                // src/main/resources/org/drools/lang/DRL.g:994:65: ( ^( reverse_key $pc3) )?
+                if ( stream_reverse_key.hasNext()||stream_pc3.hasNext() ) {
+                    // src/main/resources/org/drools/lang/DRL.g:994:65: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -8286,9 +8289,9 @@
                     }
 
                 }
-                stream_pc3.reset();
                 stream_reverse_key.reset();
-                // src/main/resources/org/drools/lang/DRL.g:980:86: ^( result_key $pc4)
+                stream_pc3.reset();
+                // src/main/resources/org/drools/lang/DRL.g:994:86: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -8343,7 +8346,7 @@
     };
 
     // $ANTLR start accumulate_paren_chunk
-    // src/main/resources/org/drools/lang/DRL.g:993:1: accumulate_paren_chunk[int locationType] : pc= accumulate_paren_chunk_data[false,$locationType] -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1007:1: accumulate_paren_chunk[int locationType] : pc= accumulate_paren_chunk_data[false,$locationType] -> VT_PAREN_CHUNK[$pc.start,text] ;
     public final accumulate_paren_chunk_return accumulate_paren_chunk(int locationType) throws RecognitionException {
         accumulate_paren_chunk_return retval = new accumulate_paren_chunk_return();
         retval.start = input.LT(1);
@@ -8354,14 +8357,14 @@
 
 
         RewriteRuleSubtreeStream stream_accumulate_paren_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_paren_chunk_data");
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:996:3: (pc= accumulate_paren_chunk_data[false,$locationType] -> VT_PAREN_CHUNK[$pc.start,text] )
-            // src/main/resources/org/drools/lang/DRL.g:996:5: pc= accumulate_paren_chunk_data[false,$locationType]
+            // src/main/resources/org/drools/lang/DRL.g:1010:3: (pc= accumulate_paren_chunk_data[false,$locationType] -> VT_PAREN_CHUNK[$pc.start,text] )
+            // src/main/resources/org/drools/lang/DRL.g:1010:5: pc= accumulate_paren_chunk_data[false,$locationType]
             {
-            pushFollow(FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk3174);
+            pushFollow(FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk3179);
             pc=accumulate_paren_chunk_data(false, locationType);
             _fsp--;
             if (failed) return retval;
@@ -8381,7 +8384,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 997:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 1011:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -8414,7 +8417,7 @@
     };
 
     // $ANTLR start accumulate_paren_chunk_data
-    // src/main/resources/org/drools/lang/DRL.g:1000:1: accumulate_paren_chunk_data[boolean isRecursive, int locationType] : lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )* rp1= RIGHT_PAREN ;
+    // src/main/resources/org/drools/lang/DRL.g:1014:1: accumulate_paren_chunk_data[boolean isRecursive, int locationType] : lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )* rp1= RIGHT_PAREN ;
     public final accumulate_paren_chunk_data_return accumulate_paren_chunk_data(boolean isRecursive, int locationType) throws RecognitionException {
         accumulate_paren_chunk_data_return retval = new accumulate_paren_chunk_data_return();
         retval.start = input.LT(1);
@@ -8432,13 +8435,13 @@
         Object rp1_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1001:2: (lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )* rp1= RIGHT_PAREN )
-            // src/main/resources/org/drools/lang/DRL.g:1001:4: lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )* rp1= RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:1015:2: (lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )* rp1= RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1015:4: lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )* rp1= RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
             lp1=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_paren_chunk_data3198); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_paren_chunk_data3203); if (failed) return retval;
             if ( backtracking==0 ) {
             lp1_tree = (Object)adaptor.create(lp1);
             adaptor.addChild(root_0, lp1_tree);
@@ -8452,7 +8455,7 @@
               			}	
               		
             }
-            // src/main/resources/org/drools/lang/DRL.g:1009:4: (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )*
+            // src/main/resources/org/drools/lang/DRL.g:1023:4: (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true,-1] )*
             loop67:
             do {
                 int alt67=3;
@@ -8468,7 +8471,7 @@
 
                 switch (alt67) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1009:5: any=~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // src/main/resources/org/drools/lang/DRL.g:1023:5: any=~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
             	    any=(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) ) {
@@ -8480,7 +8483,7 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_accumulate_paren_chunk_data3210);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_accumulate_paren_chunk_data3215);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -8490,9 +8493,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1009:87: accumulate_paren_chunk_data[true,-1]
+            	    // src/main/resources/org/drools/lang/DRL.g:1023:87: accumulate_paren_chunk_data[true,-1]
             	    {
-            	    pushFollow(FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk_data3226);
+            	    pushFollow(FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk_data3231);
             	    accumulate_paren_chunk_data184=accumulate_paren_chunk_data(true, -1);
             	    _fsp--;
             	    if (failed) return retval;
@@ -8507,7 +8510,7 @@
             } while (true);
 
             rp1=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_paren_chunk_data3237); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_paren_chunk_data3242); if (failed) return retval;
             if ( backtracking==0 ) {
             rp1_tree = (Object)adaptor.create(rp1);
             adaptor.addChild(root_0, rp1_tree);
@@ -8546,7 +8549,7 @@
     };
 
     // $ANTLR start accumulate_id_clause
-    // src/main/resources/org/drools/lang/DRL.g:1019:1: accumulate_id_clause : ID paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1033:1: accumulate_id_clause : ID 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);
@@ -8561,24 +8564,24 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1020:2: ( ID paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:1020:4: ID paren_chunk
+            // src/main/resources/org/drools/lang/DRL.g:1034:2: ( ID paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:1034:4: ID paren_chunk
             {
             ID185=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause3253); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause3258); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID185);
 
             if ( backtracking==0 ) {
               	emit(ID185, DroolsEditorType.IDENTIFIER);	
             }
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause3259);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause3264);
             paren_chunk186=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk186.getTree());
 
             // AST REWRITE
-            // elements: ID, paren_chunk
+            // elements: paren_chunk, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8588,9 +8591,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1022:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            // 1036:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1022:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+                // src/main/resources/org/drools/lang/DRL.g:1036: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);
@@ -8630,7 +8633,7 @@
     };
 
     // $ANTLR start collect_statement
-    // src/main/resources/org/drools/lang/DRL.g:1025:1: collect_statement : COLLECT LEFT_PAREN pattern_source RIGHT_PAREN -> ^( COLLECT pattern_source RIGHT_PAREN ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1039:1: collect_statement : COLLECT LEFT_PAREN pattern_source RIGHT_PAREN -> ^( COLLECT 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);
@@ -8651,11 +8654,11 @@
         RewriteRuleTokenStream stream_COLLECT=new RewriteRuleTokenStream(adaptor,"token COLLECT");
         RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1026:2: ( COLLECT LEFT_PAREN pattern_source RIGHT_PAREN -> ^( COLLECT pattern_source RIGHT_PAREN ) )
-            // src/main/resources/org/drools/lang/DRL.g:1026:4: COLLECT LEFT_PAREN pattern_source RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:1040:2: ( COLLECT LEFT_PAREN pattern_source RIGHT_PAREN -> ^( COLLECT pattern_source RIGHT_PAREN ) )
+            // src/main/resources/org/drools/lang/DRL.g:1040:4: COLLECT LEFT_PAREN pattern_source RIGHT_PAREN
             {
             COLLECT187=(Token)input.LT(1);
-            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement3281); if (failed) return retval;
+            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement3286); if (failed) return retval;
             if ( backtracking==0 ) stream_COLLECT.add(COLLECT187);
 
             if ( backtracking==0 ) {
@@ -8665,19 +8668,19 @@
               	emit(Location.LOCATION_LHS_FROM_COLLECT);	
             }
             LEFT_PAREN188=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement3290); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement3295); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN188);
 
             if ( backtracking==0 ) {
               	emit(LEFT_PAREN188, DroolsEditorType.SYMBOL);	
             }
-            pushFollow(FOLLOW_pattern_source_in_collect_statement3297);
+            pushFollow(FOLLOW_pattern_source_in_collect_statement3302);
             pattern_source189=pattern_source();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_pattern_source.add(pattern_source189.getTree());
             RIGHT_PAREN190=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement3302); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement3307); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN190);
 
             if ( backtracking==0 ) {
@@ -8688,7 +8691,7 @@
             }
 
             // AST REWRITE
-            // elements: COLLECT, pattern_source, RIGHT_PAREN
+            // elements: pattern_source, RIGHT_PAREN, COLLECT
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8698,9 +8701,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1032:2: -> ^( COLLECT pattern_source RIGHT_PAREN )
+            // 1046:2: -> ^( COLLECT pattern_source RIGHT_PAREN )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1032:5: ^( COLLECT pattern_source RIGHT_PAREN )
+                // src/main/resources/org/drools/lang/DRL.g:1046:5: ^( COLLECT pattern_source RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_COLLECT.next(), root_1);
@@ -8740,7 +8743,7 @@
     };
 
     // $ANTLR start entrypoint_statement
-    // src/main/resources/org/drools/lang/DRL.g:1035:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1049: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);
@@ -8755,10 +8758,10 @@
         RewriteRuleSubtreeStream stream_entrypoint_id=new RewriteRuleSubtreeStream(adaptor,"rule entrypoint_id");
         RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1036:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
-            // src/main/resources/org/drools/lang/DRL.g:1036:4: entry_point_key entrypoint_id
+            // src/main/resources/org/drools/lang/DRL.g:1050:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // src/main/resources/org/drools/lang/DRL.g:1050:4: entry_point_key entrypoint_id
             {
-            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement3329);
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement3334);
             entry_point_key191=entry_point_key();
             _fsp--;
             if (failed) return retval;
@@ -8766,7 +8769,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_FROM_COLLECT);	
             }
-            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement3337);
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement3342);
             entrypoint_id192=entrypoint_id();
             _fsp--;
             if (failed) return retval;
@@ -8776,7 +8779,7 @@
             }
 
             // AST REWRITE
-            // elements: entry_point_key, entrypoint_id
+            // elements: entrypoint_id, entry_point_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8786,9 +8789,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1040:2: -> ^( entry_point_key entrypoint_id )
+            // 1054:2: -> ^( entry_point_key entrypoint_id )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1040:5: ^( entry_point_key entrypoint_id )
+                // src/main/resources/org/drools/lang/DRL.g:1054:5: ^( entry_point_key entrypoint_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
@@ -8827,7 +8830,7 @@
     };
 
     // $ANTLR start entrypoint_id
-    // src/main/resources/org/drools/lang/DRL.g:1043:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
+    // src/main/resources/org/drools/lang/DRL.g:1057: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);
@@ -8837,11 +8840,11 @@
         Token value=null;
 
         Object value_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1044:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            // src/main/resources/org/drools/lang/DRL.g:1058:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
             int alt68=2;
             int LA68_0 = input.LA(1);
 
@@ -8854,16 +8857,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1043:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 68, 0, input);
+                    new NoViableAltException("1057:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 68, 0, input);
 
                 throw nvae;
             }
             switch (alt68) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1044:5: value= ID
+                    // src/main/resources/org/drools/lang/DRL.g:1058:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_entrypoint_id3363); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id3368); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
                     if ( backtracking==0 ) {
@@ -8881,7 +8884,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1045:3: -> VT_ENTRYPOINT_ID[$value]
+                    // 1059:3: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -8892,10 +8895,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1046:5: value= STRING
+                    // src/main/resources/org/drools/lang/DRL.g:1060:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id3380); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id3385); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
                     if ( backtracking==0 ) {
@@ -8913,7 +8916,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1047:3: -> VT_ENTRYPOINT_ID[$value]
+                    // 1061:3: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -8948,7 +8951,7 @@
     };
 
     // $ANTLR start from_source
-    // src/main/resources/org/drools/lang/DRL.g:1050:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1064: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);
@@ -8963,27 +8966,52 @@
 
         Object ID193_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
-        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1051:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
-            // src/main/resources/org/drools/lang/DRL.g:1051:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            // src/main/resources/org/drools/lang/DRL.g:1065:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // src/main/resources/org/drools/lang/DRL.g:1065:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
             {
             ID193=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source3400); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_source3405); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID193);
 
             if ( backtracking==0 ) {
               	emit(ID193, DroolsEditorType.IDENTIFIER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1052:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            // src/main/resources/org/drools/lang/DRL.g:1066:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
             int alt69=2;
-            alt69 = dfa69.predict(input);
+            int LA69_0 = input.LA(1);
+
+            if ( (LA69_0==LEFT_PAREN) ) {
+                int LA69_1 = input.LA(2);
+
+                if ( (LA69_1==LEFT_PAREN) ) {
+                    int LA69_3 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt69=1;
+                    }
+                }
+                else if ( (LA69_1==ID) ) {
+                    int LA69_4 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt69=1;
+                    }
+                }
+                else if ( ((LA69_1>=VT_COMPILATION_UNIT && LA69_1<=SEMICOLON)||(LA69_1>=DOT && LA69_1<=STRING)||LA69_1==COMMA||(LA69_1>=AT && LA69_1<=MULTI_LINE_COMMENT)) && (synpred8())) {
+                    alt69=1;
+                }
+                else if ( (LA69_1==RIGHT_PAREN) && (synpred8())) {
+                    alt69=1;
+                }
+            }
             switch (alt69) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1052:5: ( LEFT_PAREN )=>args= paren_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:1066:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source3415);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source3420);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -8994,7 +9022,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:1053:3: ( expression_chain )?
+            // src/main/resources/org/drools/lang/DRL.g:1067:3: ( expression_chain )?
             int alt70=2;
             int LA70_0 = input.LA(1);
 
@@ -9003,9 +9031,9 @@
             }
             switch (alt70) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1053:3: expression_chain
+                    // src/main/resources/org/drools/lang/DRL.g:1067:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source3422);
+                    pushFollow(FOLLOW_expression_chain_in_from_source3427);
                     expression_chain194=expression_chain();
                     _fsp--;
                     if (failed) return retval;
@@ -9025,7 +9053,7 @@
             }
 
             // AST REWRITE
-            // elements: paren_chunk, ID, expression_chain
+            // elements: expression_chain, paren_chunk, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -9035,21 +9063,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1059:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            // 1073:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1059:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                // src/main/resources/org/drools/lang/DRL.g:1073: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());
-                // src/main/resources/org/drools/lang/DRL.g:1059:25: ( paren_chunk )?
+                // src/main/resources/org/drools/lang/DRL.g:1073:25: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1059:38: ( expression_chain )?
+                // src/main/resources/org/drools/lang/DRL.g:1073:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -9088,7 +9116,7 @@
     };
 
     // $ANTLR start expression_chain
-    // src/main/resources/org/drools/lang/DRL.g:1062:1: expression_chain : DOT ID ({...}? paren_chunk | square_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1076:1: expression_chain : DOT ID ({...}? paren_chunk | square_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$DOT] 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);
@@ -9108,28 +9136,28 @@
         Object ID196_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
-        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         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 {
-            // src/main/resources/org/drools/lang/DRL.g:1063:2: ( DOT ID ({...}? paren_chunk | square_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
-            // src/main/resources/org/drools/lang/DRL.g:1064:3: DOT ID ({...}? paren_chunk | square_chunk )? ( expression_chain )?
+            // src/main/resources/org/drools/lang/DRL.g:1077:2: ( DOT ID ({...}? paren_chunk | square_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // src/main/resources/org/drools/lang/DRL.g:1078:3: DOT ID ({...}? paren_chunk | square_chunk )? ( expression_chain )?
             {
             DOT195=(Token)input.LT(1);
-            match(input,DOT,FOLLOW_DOT_in_expression_chain3455); if (failed) return retval;
+            match(input,DOT,FOLLOW_DOT_in_expression_chain3460); if (failed) return retval;
             if ( backtracking==0 ) stream_DOT.add(DOT195);
 
             if ( backtracking==0 ) {
               	emit(DOT195, DroolsEditorType.IDENTIFIER);	
             }
             ID196=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain3462); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_expression_chain3467); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID196);
 
             if ( backtracking==0 ) {
               	emit(ID196, DroolsEditorType.IDENTIFIER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1066:4: ({...}? paren_chunk | square_chunk )?
+            // src/main/resources/org/drools/lang/DRL.g:1080:4: ({...}? paren_chunk | square_chunk )?
             int alt71=3;
             int LA71_0 = input.LA(1);
 
@@ -9232,6 +9260,7 @@
                     case VK_ACTION:
                     case VK_REVERSE:
                     case VK_RESULT:
+                    case VK_OPERATOR:
                     case SEMICOLON:
                     case DOT:
                     case DOT_STAR:
@@ -9259,7 +9288,6 @@
                     case LESS:
                     case LESS_EQUAL:
                     case NOT_EQUAL:
-                    case GRAVE_ACCENT:
                     case FLOAT:
                     case NULL:
                     case LEFT_SQUARE:
@@ -9274,6 +9302,8 @@
                     case HexDigit:
                     case UnicodeEscape:
                     case OctalEscape:
+                    case GRAVE_ACCENT:
+                    case TILDE:
                     case SH_STYLE_SINGLE_LINE_COMMENT:
                     case C_STYLE_SINGLE_LINE_COMMENT:
                     case MULTI_LINE_COMMENT:
@@ -9289,13 +9319,13 @@
             }
             switch (alt71) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1067:6: {...}? paren_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:1081:6: {...}? paren_chunk
                     {
                     if ( !(input.LA(1) == LEFT_PAREN) ) {
                         if (backtracking>0) {failed=true; return retval;}
                         throw new FailedPredicateException(input, "expression_chain", "input.LA(1) == LEFT_PAREN");
                     }
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain3478);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain3483);
                     paren_chunk197=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -9304,9 +9334,9 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1069:6: square_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:1083:6: square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain3492);
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain3497);
                     square_chunk198=square_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -9317,7 +9347,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:1071:4: ( expression_chain )?
+            // src/main/resources/org/drools/lang/DRL.g:1085:4: ( expression_chain )?
             int alt72=2;
             int LA72_0 = input.LA(1);
 
@@ -9326,9 +9356,9 @@
             }
             switch (alt72) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1071:4: expression_chain
+                    // src/main/resources/org/drools/lang/DRL.g:1085:4: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain3503);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain3508);
                     expression_chain199=expression_chain();
                     _fsp--;
                     if (failed) return retval;
@@ -9341,7 +9371,7 @@
 
 
             // AST REWRITE
-            // elements: ID, paren_chunk, expression_chain, square_chunk
+            // elements: expression_chain, square_chunk, ID, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -9351,27 +9381,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1072:4: -> ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            // 1086:4: -> ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1072:7: ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                // src/main/resources/org/drools/lang/DRL.g:1086:7: ^( VT_EXPRESSION_CHAIN[$DOT] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_EXPRESSION_CHAIN, DOT195), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // src/main/resources/org/drools/lang/DRL.g:1072:38: ( square_chunk )?
+                // src/main/resources/org/drools/lang/DRL.g:1086:38: ( square_chunk )?
                 if ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
                 }
                 stream_square_chunk.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1072:52: ( paren_chunk )?
+                // src/main/resources/org/drools/lang/DRL.g:1086:52: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1072:65: ( expression_chain )?
+                // src/main/resources/org/drools/lang/DRL.g:1086:65: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -9410,7 +9440,7 @@
     };
 
     // $ANTLR start lhs_pattern
-    // src/main/resources/org/drools/lang/DRL.g:1075:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    // src/main/resources/org/drools/lang/DRL.g:1089: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);
@@ -9425,7 +9455,7 @@
         RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1076:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            // src/main/resources/org/drools/lang/DRL.g:1090:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
             int alt73=2;
             int LA73_0 = input.LA(1);
 
@@ -9441,7 +9471,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1075:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 73, 1, input);
+                        new NoViableAltException("1089:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 73, 1, input);
 
                     throw nvae;
                 }
@@ -9449,15 +9479,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1075:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 73, 0, input);
+                    new NoViableAltException("1089:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 73, 0, input);
 
                 throw nvae;
             }
             switch (alt73) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1076:4: fact_binding
+                    // src/main/resources/org/drools/lang/DRL.g:1090:4: fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern3536);
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern3541);
                     fact_binding200=fact_binding();
                     _fsp--;
                     if (failed) return retval;
@@ -9474,9 +9504,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1076:17: -> ^( VT_PATTERN fact_binding )
+                    // 1090:17: -> ^( VT_PATTERN fact_binding )
                     {
-                        // src/main/resources/org/drools/lang/DRL.g:1076:20: ^( VT_PATTERN fact_binding )
+                        // src/main/resources/org/drools/lang/DRL.g:1090:20: ^( VT_PATTERN fact_binding )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -9493,9 +9523,9 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1077:4: fact
+                    // src/main/resources/org/drools/lang/DRL.g:1091:4: fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern3549);
+                    pushFollow(FOLLOW_fact_in_lhs_pattern3554);
                     fact201=fact();
                     _fsp--;
                     if (failed) return retval;
@@ -9512,9 +9542,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1077:9: -> ^( VT_PATTERN fact )
+                    // 1091:9: -> ^( VT_PATTERN fact )
                     {
-                        // src/main/resources/org/drools/lang/DRL.g:1077:12: ^( VT_PATTERN fact )
+                        // src/main/resources/org/drools/lang/DRL.g:1091:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -9555,7 +9585,7 @@
     };
 
     // $ANTLR start fact_binding
-    // src/main/resources/org/drools/lang/DRL.g:1080:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1094: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);
@@ -9575,19 +9605,19 @@
         Object RIGHT_PAREN206_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
-        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
-        RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
         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 {
-            // src/main/resources/org/drools/lang/DRL.g:1081:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
-            // src/main/resources/org/drools/lang/DRL.g:1081:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1095:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
+            // src/main/resources/org/drools/lang/DRL.g:1095:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             {
-            pushFollow(FOLLOW_label_in_fact_binding3569);
+            pushFollow(FOLLOW_label_in_fact_binding3574);
             label202=label();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_label.add(label202.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1082:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1096:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             int alt74=2;
             int LA74_0 = input.LA(1);
 
@@ -9600,15 +9630,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1082:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 74, 0, input);
+                    new NoViableAltException("1096:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 74, 0, input);
 
                 throw nvae;
             }
             switch (alt74) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1082:5: fact
+                    // src/main/resources/org/drools/lang/DRL.g:1096:5: fact
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding3575);
+                    pushFollow(FOLLOW_fact_in_fact_binding3580);
                     fact203=fact();
                     _fsp--;
                     if (failed) return retval;
@@ -9617,22 +9647,22 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1083:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:1097:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
                     {
                     LEFT_PAREN204=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding3582); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding3587); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN204);
 
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN204, DroolsEditorType.SYMBOL);	
                     }
-                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding3590);
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding3595);
                     fact_binding_expression205=fact_binding_expression();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression205.getTree());
                     RIGHT_PAREN206=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding3598); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding3603); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN206);
 
                     if ( backtracking==0 ) {
@@ -9646,7 +9676,7 @@
 
 
             // AST REWRITE
-            // elements: label, RIGHT_PAREN, fact_binding_expression, fact
+            // elements: RIGHT_PAREN, fact_binding_expression, label, fact
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -9656,27 +9686,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1087:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+            // 1101:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1087:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+                // src/main/resources/org/drools/lang/DRL.g:1101: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());
-                // src/main/resources/org/drools/lang/DRL.g:1087:30: ( fact )?
+                // src/main/resources/org/drools/lang/DRL.g:1101:30: ( fact )?
                 if ( stream_fact.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact.next());
 
                 }
                 stream_fact.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1087:36: ( fact_binding_expression )?
+                // src/main/resources/org/drools/lang/DRL.g:1101:36: ( fact_binding_expression )?
                 if ( stream_fact_binding_expression.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact_binding_expression.next());
 
                 }
                 stream_fact_binding_expression.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1087:61: ( RIGHT_PAREN )?
+                // src/main/resources/org/drools/lang/DRL.g:1101:61: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -9715,7 +9745,7 @@
     };
 
     // $ANTLR start fact_binding_expression
-    // src/main/resources/org/drools/lang/DRL.g:1090:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
+    // src/main/resources/org/drools/lang/DRL.g:1104: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);
@@ -9732,19 +9762,19 @@
 
         Object pipe_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_PIPE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_PIPE");
-        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         RewriteRuleSubtreeStream stream_or_key=new RewriteRuleSubtreeStream(adaptor,"rule or_key");
-
+        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
+        
         	Token orToken = null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1093:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
-            // src/main/resources/org/drools/lang/DRL.g:1093:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // src/main/resources/org/drools/lang/DRL.g:1107:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // src/main/resources/org/drools/lang/DRL.g:1107:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             {
-            // src/main/resources/org/drools/lang/DRL.g:1093:5: ( fact -> fact )
-            // src/main/resources/org/drools/lang/DRL.g:1093:6: fact
+            // src/main/resources/org/drools/lang/DRL.g:1107:5: ( fact -> fact )
+            // src/main/resources/org/drools/lang/DRL.g:1107:6: fact
             {
-            pushFollow(FOLLOW_fact_in_fact_binding_expression3639);
+            pushFollow(FOLLOW_fact_in_fact_binding_expression3644);
             fact207=fact();
             _fsp--;
             if (failed) return retval;
@@ -9761,7 +9791,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1093:11: -> fact
+            // 1107:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -9771,7 +9801,7 @@
 
             }
 
-            // src/main/resources/org/drools/lang/DRL.g:1093:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // src/main/resources/org/drools/lang/DRL.g:1107:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             loop76:
             do {
                 int alt76=2;
@@ -9787,9 +9817,9 @@
 
                 switch (alt76) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1093:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    // src/main/resources/org/drools/lang/DRL.g:1107:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
             	    {
-            	    // src/main/resources/org/drools/lang/DRL.g:1093:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    // src/main/resources/org/drools/lang/DRL.g:1107:22: (value= or_key | pipe= DOUBLE_PIPE )
             	    int alt75=2;
             	    int LA75_0 = input.LA(1);
 
@@ -9802,15 +9832,15 @@
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("1093:22: (value= or_key | pipe= DOUBLE_PIPE )", 75, 0, input);
+            	            new NoViableAltException("1107:22: (value= or_key | pipe= DOUBLE_PIPE )", 75, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt75) {
             	        case 1 :
-            	            // src/main/resources/org/drools/lang/DRL.g:1093:23: value= or_key
+            	            // src/main/resources/org/drools/lang/DRL.g:1107:23: value= or_key
             	            {
-            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression3651);
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression3656);
             	            value=or_key();
             	            _fsp--;
             	            if (failed) return retval;
@@ -9822,10 +9852,10 @@
             	            }
             	            break;
             	        case 2 :
-            	            // src/main/resources/org/drools/lang/DRL.g:1093:62: pipe= DOUBLE_PIPE
+            	            // src/main/resources/org/drools/lang/DRL.g:1107:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
-            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3657); if (failed) return retval;
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3662); if (failed) return retval;
             	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
             	            if ( backtracking==0 ) {
@@ -9837,7 +9867,7 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_fact_in_fact_binding_expression3662);
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression3667);
             	    fact208=fact();
             	    _fsp--;
             	    if (failed) return retval;
@@ -9854,9 +9884,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1094:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    // 1108:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	    {
-            	        // src/main/resources/org/drools/lang/DRL.g:1094:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        // src/main/resources/org/drools/lang/DRL.g:1108: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);
@@ -9905,7 +9935,7 @@
     };
 
     // $ANTLR start fact
-    // src/main/resources/org/drools/lang/DRL.g:1097:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1111: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);
@@ -9923,20 +9953,20 @@
         Object RIGHT_PAREN212_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
-        RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
         RewriteRuleSubtreeStream stream_pattern_type=new RewriteRuleSubtreeStream(adaptor,"rule pattern_type");
+        RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
          boolean isFailedOnConstraints = true; pushParaphrases(DroolsParaphraseTypes.PATTERN); 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1100:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
-            // src/main/resources/org/drools/lang/DRL.g:1100:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:1114:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
+            // src/main/resources/org/drools/lang/DRL.g:1114:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
             {
-            pushFollow(FOLLOW_pattern_type_in_fact3702);
+            pushFollow(FOLLOW_pattern_type_in_fact3707);
             pattern_type209=pattern_type();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_pattern_type.add(pattern_type209.getTree());
             LEFT_PAREN210=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3707); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3712); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN210);
 
             if ( backtracking==0 ) {
@@ -9945,7 +9975,7 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_CONDITION_START);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1103:4: ( constraints )?
+            // src/main/resources/org/drools/lang/DRL.g:1117:4: ( constraints )?
             int alt77=2;
             int LA77_0 = input.LA(1);
 
@@ -9954,9 +9984,9 @@
             }
             switch (alt77) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1103:4: constraints
+                    // src/main/resources/org/drools/lang/DRL.g:1117:4: constraints
                     {
-                    pushFollow(FOLLOW_constraints_in_fact3718);
+                    pushFollow(FOLLOW_constraints_in_fact3723);
                     constraints211=constraints();
                     _fsp--;
                     if (failed) return retval;
@@ -9968,7 +9998,7 @@
             }
 
             RIGHT_PAREN212=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3724); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3729); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN212);
 
             if ( backtracking==0 ) {
@@ -9992,15 +10022,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1109:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+            // 1123:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1109:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+                // src/main/resources/org/drools/lang/DRL.g:1123: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());
-                // src/main/resources/org/drools/lang/DRL.g:1109:28: ( constraints )?
+                // src/main/resources/org/drools/lang/DRL.g:1123:28: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -10032,7 +10062,7 @@
             recover(input,re);
         }
         finally {
-
+            
             	if (isEditorInterfaceEnabled && isFailedOnConstraints && input.LA(1) == EOF && input.get(input.index() - 1).getType() == WS){
             		if (!(getActiveSentence().getContent().getLast() instanceof Integer) && input.LA(-1) != COLON) {
             			emit(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
@@ -10050,7 +10080,7 @@
     };
 
     // $ANTLR start constraints
-    // src/main/resources/org/drools/lang/DRL.g:1119:1: constraints : constraint ( COMMA constraint )* ;
+    // src/main/resources/org/drools/lang/DRL.g:1133:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
@@ -10066,17 +10096,17 @@
         Object COMMA214_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1120:2: ( constraint ( COMMA constraint )* )
-            // src/main/resources/org/drools/lang/DRL.g:1120:4: constraint ( COMMA constraint )*
+            // src/main/resources/org/drools/lang/DRL.g:1134:2: ( constraint ( COMMA constraint )* )
+            // src/main/resources/org/drools/lang/DRL.g:1134:4: constraint ( COMMA constraint )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_in_constraints3758);
+            pushFollow(FOLLOW_constraint_in_constraints3763);
             constraint213=constraint();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, constraint213.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1120:15: ( COMMA constraint )*
+            // src/main/resources/org/drools/lang/DRL.g:1134:15: ( COMMA constraint )*
             loop78:
             do {
                 int alt78=2;
@@ -10089,15 +10119,15 @@
 
                 switch (alt78) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1120:17: COMMA constraint
+            	    // src/main/resources/org/drools/lang/DRL.g:1134:17: COMMA constraint
             	    {
             	    COMMA214=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3762); if (failed) return retval;
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3767); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	      	emit(COMMA214, DroolsEditorType.SYMBOL);
             	      		emit(Location.LOCATION_LHS_INSIDE_CONDITION_START);	
             	    }
-            	    pushFollow(FOLLOW_constraint_in_constraints3769);
+            	    pushFollow(FOLLOW_constraint_in_constraints3774);
             	    constraint215=constraint();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10137,7 +10167,7 @@
     };
 
     // $ANTLR start constraint
-    // src/main/resources/org/drools/lang/DRL.g:1125:1: constraint : or_constr ;
+    // src/main/resources/org/drools/lang/DRL.g:1139:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
@@ -10149,12 +10179,12 @@
 
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1126:2: ( or_constr )
-            // src/main/resources/org/drools/lang/DRL.g:1126:4: or_constr
+            // src/main/resources/org/drools/lang/DRL.g:1140:2: ( or_constr )
+            // src/main/resources/org/drools/lang/DRL.g:1140:4: or_constr
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_or_constr_in_constraint3783);
+            pushFollow(FOLLOW_or_constr_in_constraint3788);
             or_constr216=or_constr();
             _fsp--;
             if (failed) return retval;
@@ -10185,7 +10215,7 @@
     };
 
     // $ANTLR start or_constr
-    // src/main/resources/org/drools/lang/DRL.g:1129:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    // src/main/resources/org/drools/lang/DRL.g:1143: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);
@@ -10201,17 +10231,17 @@
         Object DOUBLE_PIPE218_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1130:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // src/main/resources/org/drools/lang/DRL.g:1130:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // src/main/resources/org/drools/lang/DRL.g:1144:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // src/main/resources/org/drools/lang/DRL.g:1144:4: and_constr ( DOUBLE_PIPE and_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_constr_in_or_constr3794);
+            pushFollow(FOLLOW_and_constr_in_or_constr3799);
             and_constr217=and_constr();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, and_constr217.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1130:15: ( DOUBLE_PIPE and_constr )*
+            // src/main/resources/org/drools/lang/DRL.g:1144:15: ( DOUBLE_PIPE and_constr )*
             loop79:
             do {
                 int alt79=2;
@@ -10224,10 +10254,10 @@
 
                 switch (alt79) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1130:17: DOUBLE_PIPE and_constr
+            	    // src/main/resources/org/drools/lang/DRL.g:1144:17: DOUBLE_PIPE and_constr
             	    {
             	    DOUBLE_PIPE218=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3798); if (failed) return retval;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3803); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_PIPE218_tree = (Object)adaptor.create(DOUBLE_PIPE218);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE218_tree, root_0);
@@ -10235,7 +10265,7 @@
             	    if ( backtracking==0 ) {
             	      	emit(DOUBLE_PIPE218, DroolsEditorType.SYMBOL);	
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr3805);
+            	    pushFollow(FOLLOW_and_constr_in_or_constr3810);
             	    and_constr219=and_constr();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10275,7 +10305,7 @@
     };
 
     // $ANTLR start and_constr
-    // src/main/resources/org/drools/lang/DRL.g:1134:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    // src/main/resources/org/drools/lang/DRL.g:1148: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);
@@ -10291,17 +10321,17 @@
         Object DOUBLE_AMPER221_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1135:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // src/main/resources/org/drools/lang/DRL.g:1135:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // src/main/resources/org/drools/lang/DRL.g:1149:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // src/main/resources/org/drools/lang/DRL.g:1149:4: unary_constr ( DOUBLE_AMPER unary_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unary_constr_in_and_constr3820);
+            pushFollow(FOLLOW_unary_constr_in_and_constr3825);
             unary_constr220=unary_constr();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr220.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1135:17: ( DOUBLE_AMPER unary_constr )*
+            // src/main/resources/org/drools/lang/DRL.g:1149:17: ( DOUBLE_AMPER unary_constr )*
             loop80:
             do {
                 int alt80=2;
@@ -10314,10 +10344,10 @@
 
                 switch (alt80) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1135:19: DOUBLE_AMPER unary_constr
+            	    // src/main/resources/org/drools/lang/DRL.g:1149:19: DOUBLE_AMPER unary_constr
             	    {
             	    DOUBLE_AMPER221=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3824); if (failed) return retval;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3829); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_AMPER221_tree = (Object)adaptor.create(DOUBLE_AMPER221);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER221_tree, root_0);
@@ -10325,7 +10355,7 @@
             	    if ( backtracking==0 ) {
             	      	emit(DOUBLE_AMPER221, DroolsEditorType.SYMBOL);;	
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr3831);
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr3836);
             	    unary_constr222=unary_constr();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10365,7 +10395,7 @@
     };
 
     // $ANTLR start unary_constr
-    // src/main/resources/org/drools/lang/DRL.g:1139:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
+    // src/main/resources/org/drools/lang/DRL.g:1153: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);
@@ -10388,18 +10418,18 @@
 
          boolean isFailed = true;	
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1143:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1157:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
             int alt81=3;
             int LA81_0 = input.LA(1);
 
             if ( (LA81_0==ID) ) {
                 int LA81_1 = input.LA(2);
 
-                if ( ((LA81_1>=ID && LA81_1<=DOT)||LA81_1==COLON||(LA81_1>=EQUAL && LA81_1<=GRAVE_ACCENT)||LA81_1==LEFT_SQUARE) ) {
+                if ( ((LA81_1>=ID && LA81_1<=DOT)||LA81_1==COLON||(LA81_1>=EQUAL && LA81_1<=NOT_EQUAL)||LA81_1==LEFT_SQUARE) ) {
                     alt81=2;
                 }
                 else if ( (LA81_1==LEFT_PAREN) ) {
-                    int LA81_14 = input.LA(3);
+                    int LA81_13 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
                         alt81=1;
@@ -10410,7 +10440,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1139:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 81, 14, input);
+                            new NoViableAltException("1153:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 81, 13, input);
 
                         throw nvae;
                     }
@@ -10418,7 +10448,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1139:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 81, 1, input);
+                        new NoViableAltException("1153:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 81, 1, input);
 
                     throw nvae;
                 }
@@ -10429,22 +10459,22 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1139:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 81, 0, input);
+                    new NoViableAltException("1153:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 81, 0, input);
 
                 throw nvae;
             }
             switch (alt81) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1143:4: eval_key paren_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:1157:4: eval_key paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_eval_key_in_unary_constr3864);
+                    pushFollow(FOLLOW_eval_key_in_unary_constr3869);
                     eval_key223=eval_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key223.getTree(), root_0);
-                    pushFollow(FOLLOW_paren_chunk_in_unary_constr3867);
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr3872);
                     paren_chunk224=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -10453,11 +10483,11 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1144:4: field_constraint
+                    // src/main/resources/org/drools/lang/DRL.g:1158:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr3872);
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr3877);
                     field_constraint225=field_constraint();
                     _fsp--;
                     if (failed) return retval;
@@ -10466,22 +10496,22 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1145:5: LEFT_PAREN or_constr RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:1159:5: LEFT_PAREN or_constr RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
                     LEFT_PAREN226=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3878); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3883); if (failed) return retval;
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN226, DroolsEditorType.SYMBOL);	
                     }
-                    pushFollow(FOLLOW_or_constr_in_unary_constr3888);
+                    pushFollow(FOLLOW_or_constr_in_unary_constr3893);
                     or_constr227=or_constr();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, or_constr227.getTree());
                     RIGHT_PAREN228=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3893); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3898); if (failed) return retval;
                     if ( backtracking==0 ) {
                     RIGHT_PAREN228_tree = (Object)adaptor.create(RIGHT_PAREN228);
                     adaptor.addChild(root_0, RIGHT_PAREN228_tree);
@@ -10528,7 +10558,7 @@
     };
 
     // $ANTLR start field_constraint
-    // src/main/resources/org/drools/lang/DRL.g:1158: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 ) );
+    // src/main/resources/org/drools/lang/DRL.g:1172:1: field_constraint options {backtrack=true; } : ( 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);
@@ -10551,15 +10581,15 @@
 
         Object arw_tree=null;
         RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW");
+        RewriteRuleSubtreeStream stream_accessor_path=new RewriteRuleSubtreeStream(adaptor,"rule accessor_path");
+        RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         RewriteRuleSubtreeStream stream_or_restr_connective=new RewriteRuleSubtreeStream(adaptor,"rule or_restr_connective");
-        RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
-        RewriteRuleSubtreeStream stream_accessor_path=new RewriteRuleSubtreeStream(adaptor,"rule accessor_path");
-
+        
         	boolean isArrow = false;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1161: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 ) )
+            // src/main/resources/org/drools/lang/DRL.g:1176: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 alt83=2;
             int LA83_0 = input.LA(1);
 
@@ -10569,13 +10599,13 @@
                 if ( (LA83_1==COLON) ) {
                     alt83=1;
                 }
-                else if ( ((LA83_1>=ID && LA83_1<=DOT)||LA83_1==LEFT_PAREN||(LA83_1>=EQUAL && LA83_1<=GRAVE_ACCENT)||LA83_1==LEFT_SQUARE) ) {
+                else if ( ((LA83_1>=ID && LA83_1<=DOT)||LA83_1==LEFT_PAREN||(LA83_1>=EQUAL && LA83_1<=NOT_EQUAL)||LA83_1==LEFT_SQUARE) ) {
                     alt83=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1158: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 ) );", 83, 1, input);
+                        new NoViableAltException("1172:1: field_constraint options {backtrack=true; } : ( 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 ) );", 83, 1, input);
 
                     throw nvae;
                 }
@@ -10583,29 +10613,29 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1158: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 ) );", 83, 0, input);
+                    new NoViableAltException("1172:1: field_constraint options {backtrack=true; } : ( 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 ) );", 83, 0, input);
 
                 throw nvae;
             }
             switch (alt83) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1161:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // src/main/resources/org/drools/lang/DRL.g:1176:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
-                    pushFollow(FOLLOW_label_in_field_constraint3913);
+                    pushFollow(FOLLOW_label_in_field_constraint3927);
                     label229=label();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_label.add(label229.getTree());
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint3915);
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint3929);
                     accessor_path230=accessor_path();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_accessor_path.add(accessor_path230.getTree());
-                    // src/main/resources/org/drools/lang/DRL.g:1162:3: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // src/main/resources/org/drools/lang/DRL.g:1177:3: ( or_restr_connective | arw= ARROW paren_chunk )?
                     int alt82=3;
                     int LA82_0 = input.LA(1);
 
-                    if ( (LA82_0==ID||LA82_0==LEFT_PAREN||(LA82_0>=EQUAL && LA82_0<=GRAVE_ACCENT)) ) {
+                    if ( (LA82_0==ID||LA82_0==LEFT_PAREN||(LA82_0>=EQUAL && LA82_0<=NOT_EQUAL)) ) {
                         alt82=1;
                     }
                     else if ( (LA82_0==ARROW) ) {
@@ -10613,9 +10643,9 @@
                     }
                     switch (alt82) {
                         case 1 :
-                            // src/main/resources/org/drools/lang/DRL.g:1162:5: or_restr_connective
+                            // src/main/resources/org/drools/lang/DRL.g:1177:5: or_restr_connective
                             {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint3922);
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint3936);
                             or_restr_connective231=or_restr_connective();
                             _fsp--;
                             if (failed) return retval;
@@ -10624,16 +10654,16 @@
                             }
                             break;
                         case 2 :
-                            // src/main/resources/org/drools/lang/DRL.g:1162:27: arw= ARROW paren_chunk
+                            // src/main/resources/org/drools/lang/DRL.g:1177:27: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
-                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint3928); if (failed) return retval;
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint3942); if (failed) return retval;
                             if ( backtracking==0 ) stream_ARROW.add(arw);
 
                             if ( backtracking==0 ) {
                               	emit(arw, DroolsEditorType.SYMBOL);	
                             }
-                            pushFollow(FOLLOW_paren_chunk_in_field_constraint3932);
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint3946);
                             paren_chunk232=paren_chunk();
                             _fsp--;
                             if (failed) return retval;
@@ -10649,7 +10679,7 @@
 
 
                     // AST REWRITE
-                    // elements: label, accessor_path, paren_chunk, or_restr_connective, label, accessor_path
+                    // elements: or_restr_connective, label, accessor_path, paren_chunk, label, accessor_path
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -10659,15 +10689,15 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1163:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    // 1178:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
                     if (isArrow) {
-                        // src/main/resources/org/drools/lang/DRL.g:1163:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
+                        // src/main/resources/org/drools/lang/DRL.g:1178: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());
-                        // src/main/resources/org/drools/lang/DRL.g:1163:39: ^( VT_FIELD accessor_path )
+                        // src/main/resources/org/drools/lang/DRL.g:1178:39: ^( VT_FIELD accessor_path )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
@@ -10679,9 +10709,9 @@
 
                         adaptor.addChild(root_0, root_1);
                         }
-                        // src/main/resources/org/drools/lang/DRL.g:1163:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // src/main/resources/org/drools/lang/DRL.g:1178:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
                         if ( stream_paren_chunk.hasNext() ) {
-                            // src/main/resources/org/drools/lang/DRL.g:1163:66: ^( VK_EVAL[$arw] paren_chunk )
+                            // src/main/resources/org/drools/lang/DRL.g:1178:66: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_1 = (Object)adaptor.nil();
                             root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
@@ -10695,21 +10725,21 @@
                         stream_paren_chunk.reset();
 
                     }
-                    else // 1164:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 1179:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                     {
-                        // src/main/resources/org/drools/lang/DRL.g:1164:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        // src/main/resources/org/drools/lang/DRL.g:1179: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());
-                        // src/main/resources/org/drools/lang/DRL.g:1164:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // src/main/resources/org/drools/lang/DRL.g:1179: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());
-                        // src/main/resources/org/drools/lang/DRL.g:1164:53: ( or_restr_connective )?
+                        // src/main/resources/org/drools/lang/DRL.g:1179:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -10729,14 +10759,14 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1165:4: accessor_path or_restr_connective
+                    // src/main/resources/org/drools/lang/DRL.g:1180:4: accessor_path or_restr_connective
                     {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint3986);
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint4000);
                     accessor_path233=accessor_path();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_accessor_path.add(accessor_path233.getTree());
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3988);
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint4002);
                     or_restr_connective234=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
@@ -10753,9 +10783,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1166:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 1181:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // src/main/resources/org/drools/lang/DRL.g:1166:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        // src/main/resources/org/drools/lang/DRL.g:1181: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);
@@ -10797,7 +10827,7 @@
     };
 
     // $ANTLR start label
-    // src/main/resources/org/drools/lang/DRL.g:1169:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // src/main/resources/org/drools/lang/DRL.g:1184: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);
@@ -10813,18 +10843,18 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1170:2: (value= ID COLON -> VT_LABEL[$value] )
-            // src/main/resources/org/drools/lang/DRL.g:1170:4: value= ID COLON
+            // src/main/resources/org/drools/lang/DRL.g:1185:2: (value= ID COLON -> VT_LABEL[$value] )
+            // src/main/resources/org/drools/lang/DRL.g:1185:4: value= ID COLON
             {
             value=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_label4013); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_label4027); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(value);
 
             if ( backtracking==0 ) {
               	emit(value, DroolsEditorType.IDENTIFIER_VARIABLE);	
             }
             COLON235=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_label4020); if (failed) return retval;
+            match(input,COLON,FOLLOW_COLON_in_label4034); if (failed) return retval;
             if ( backtracking==0 ) stream_COLON.add(COLON235);
 
             if ( backtracking==0 ) {
@@ -10842,7 +10872,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1172:3: -> VT_LABEL[$value]
+            // 1187:3: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -10875,7 +10905,7 @@
     };
 
     // $ANTLR start or_restr_connective
-    // src/main/resources/org/drools/lang/DRL.g:1175:1: or_restr_connective : and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* ;
+    // src/main/resources/org/drools/lang/DRL.g:1190:1: or_restr_connective : and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* ;
     public final or_restr_connective_return or_restr_connective() throws RecognitionException {
         or_restr_connective_return retval = new or_restr_connective_return();
         retval.start = input.LT(1);
@@ -10891,31 +10921,31 @@
         Object DOUBLE_PIPE237_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1176:2: ( and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* )
-            // src/main/resources/org/drools/lang/DRL.g:1176:4: and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )*
+            // src/main/resources/org/drools/lang/DRL.g:1191:2: ( and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* )
+            // src/main/resources/org/drools/lang/DRL.g:1191:4: and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective4041);
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective4055);
             and_restr_connective236=and_restr_connective();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective236.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1176:25: ({...}? => DOUBLE_PIPE and_restr_connective )*
+            // src/main/resources/org/drools/lang/DRL.g:1191:25: ({...}? => DOUBLE_PIPE and_restr_connective )*
             loop84:
             do {
                 int alt84=2;
                 alt84 = dfa84.predict(input);
                 switch (alt84) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1176:26: {...}? => DOUBLE_PIPE and_restr_connective
+            	    // src/main/resources/org/drools/lang/DRL.g:1191:26: {...}? => DOUBLE_PIPE and_restr_connective
             	    {
             	    if ( !((validateRestr())) ) {
             	        if (backtracking>0) {failed=true; return retval;}
             	        throw new FailedPredicateException(input, "or_restr_connective", "(validateRestr())");
             	    }
             	    DOUBLE_PIPE237=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective4047); if (failed) return retval;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective4061); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_PIPE237_tree = (Object)adaptor.create(DOUBLE_PIPE237);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE237_tree, root_0);
@@ -10923,7 +10953,7 @@
             	    if ( backtracking==0 ) {
             	      	emit(DOUBLE_PIPE237, DroolsEditorType.SYMBOL);	
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective4055);
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective4069);
             	    and_restr_connective238=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10963,7 +10993,7 @@
     };
 
     // $ANTLR start and_restr_connective
-    // src/main/resources/org/drools/lang/DRL.g:1180:1: and_restr_connective : constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* ;
+    // src/main/resources/org/drools/lang/DRL.g:1195:1: and_restr_connective : constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* ;
     public final and_restr_connective_return and_restr_connective() throws RecognitionException {
         and_restr_connective_return retval = new and_restr_connective_return();
         retval.start = input.LT(1);
@@ -10979,31 +11009,31 @@
         Object DOUBLE_AMPER240_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1181:2: ( constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* )
-            // src/main/resources/org/drools/lang/DRL.g:1181:4: constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )*
+            // src/main/resources/org/drools/lang/DRL.g:1196:2: ( constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* )
+            // src/main/resources/org/drools/lang/DRL.g:1196:4: constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective4070);
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective4084);
             constraint_expression239=constraint_expression();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression239.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1181:26: ({...}? => DOUBLE_AMPER constraint_expression )*
+            // src/main/resources/org/drools/lang/DRL.g:1196:26: ({...}? => DOUBLE_AMPER constraint_expression )*
             loop85:
             do {
                 int alt85=2;
                 alt85 = dfa85.predict(input);
                 switch (alt85) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1181:27: {...}? => DOUBLE_AMPER constraint_expression
+            	    // src/main/resources/org/drools/lang/DRL.g:1196:27: {...}? => DOUBLE_AMPER constraint_expression
             	    {
             	    if ( !((validateRestr())) ) {
             	        if (backtracking>0) {failed=true; return retval;}
             	        throw new FailedPredicateException(input, "and_restr_connective", "(validateRestr())");
             	    }
             	    DOUBLE_AMPER240=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective4076); if (failed) return retval;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective4090); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_AMPER240_tree = (Object)adaptor.create(DOUBLE_AMPER240);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER240_tree, root_0);
@@ -11011,7 +11041,7 @@
             	    if ( backtracking==0 ) {
             	      	emit(DOUBLE_AMPER240, DroolsEditorType.SYMBOL);	
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective4083);
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective4097);
             	    constraint_expression241=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
@@ -11051,7 +11081,7 @@
     };
 
     // $ANTLR start constraint_expression
-    // src/main/resources/org/drools/lang/DRL.g:1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
+    // src/main/resources/org/drools/lang/DRL.g:1200: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);
@@ -11071,21 +11101,21 @@
         Object RIGHT_PAREN246_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1188:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1204:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
             int alt86=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                int LA86_1 = input.LA(2);
+                switch ( input.LA(2) ) {
+                case ID:
+                    {
+                    int LA86_9 = input.LA(3);
 
-                if ( (LA86_1==ID) ) {
-                    int LA86_10 = input.LA(3);
-
-                    if ( (LA86_10==ID||LA86_10==STRING||(LA86_10>=BOOL && LA86_10<=INT)||(LA86_10>=FLOAT && LA86_10<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    if ( (LA86_9==ID||LA86_9==STRING||(LA86_9>=BOOL && LA86_9<=INT)||(LA86_9>=FLOAT && LA86_9<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
                         alt86=2;
                     }
-                    else if ( (LA86_10==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        int LA86_24 = input.LA(4);
+                    else if ( (LA86_9==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                        int LA86_23 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
                             alt86=1;
@@ -11096,26 +11126,35 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 24, input);
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 23, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (LA86_10==DOT||(LA86_10>=COMMA && LA86_10<=RIGHT_PAREN)||(LA86_10>=DOUBLE_PIPE && LA86_10<=DOUBLE_AMPER)||LA86_10==LEFT_SQUARE) ) {
+                    else if ( (LA86_9==EOF||LA86_9==DOT||(LA86_9>=COMMA && LA86_9<=RIGHT_PAREN)||(LA86_9>=DOUBLE_PIPE && LA86_9<=DOUBLE_AMPER)||LA86_9==LEFT_SQUARE) ) {
                         alt86=2;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 10, input);
+                            new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 9, input);
 
                         throw nvae;
                     }
-                }
-                else if ( (LA86_1==STRING||(LA86_1>=BOOL && LA86_1<=INT)||(LA86_1>=FLOAT && LA86_1<=NULL)) ) {
+                    }
+                    break;
+                case STRING:
+                case BOOL:
+                case INT:
+                case FLOAT:
+                case NULL:
+                case LEFT_SQUARE:
+                    {
                     alt86=2;
-                }
-                else if ( (LA86_1==LEFT_PAREN) ) {
+                    }
+                    break;
+                case LEFT_PAREN:
+                    {
                     switch ( input.LA(3) ) {
                     case ID:
                         {
@@ -11124,37 +11163,132 @@
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                             alt86=1;
                         }
-                        else if ( (true) ) {
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
                             alt86=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 31, input);
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 31, input);
 
                             throw nvae;
                         }
                         }
                         break;
-                    case LEFT_PAREN:
+                    case STRING:
                         {
                         int LA86_32 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                             alt86=1;
                         }
-                        else if ( (true) ) {
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
                             alt86=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 32, input);
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 32, input);
 
                             throw nvae;
                         }
                         }
                         break;
+                    case INT:
+                        {
+                        int LA86_33 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
+                            alt86=1;
+                        }
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
+                            alt86=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 33, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case FLOAT:
+                        {
+                        int LA86_34 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
+                            alt86=1;
+                        }
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
+                            alt86=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 34, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case BOOL:
+                        {
+                        int LA86_35 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
+                            alt86=1;
+                        }
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
+                            alt86=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 35, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case NULL:
+                        {
+                        int LA86_36 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
+                            alt86=1;
+                        }
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
+                            alt86=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 36, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        int LA86_37 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
+                            alt86=1;
+                        }
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))||(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))||(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))||(isPluggableEvaluator(false))||(validateIdentifierKey(DroolsSoftKeywords.MATCHES))||(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF)))) ) {
+                            alt86=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 37, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
                     case VT_COMPILATION_UNIT:
                     case VT_FUNCTION_IMPORT:
                     case VT_FACT:
@@ -11234,6 +11368,7 @@
                     case VK_ACTION:
                     case VK_REVERSE:
                     case VK_RESULT:
+                    case VK_OPERATOR:
                     case SEMICOLON:
                     case DOT:
                     case DOT_STAR:
@@ -11258,7 +11393,6 @@
                     case LESS:
                     case LESS_EQUAL:
                     case NOT_EQUAL:
-                    case GRAVE_ACCENT:
                     case LEFT_SQUARE:
                     case RIGHT_SQUARE:
                     case THEN:
@@ -11271,6 +11405,8 @@
                     case HexDigit:
                     case UnicodeEscape:
                     case OctalEscape:
+                    case GRAVE_ACCENT:
+                    case TILDE:
                     case SH_STYLE_SINGLE_LINE_COMMENT:
                     case C_STYLE_SINGLE_LINE_COMMENT:
                     case MULTI_LINE_COMMENT:
@@ -11278,120 +11414,24 @@
                         alt86=2;
                         }
                         break;
-                    case STRING:
-                        {
-                        int LA86_34 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt86=1;
-                        }
-                        else if ( (true) ) {
-                            alt86=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 34, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
-                    case INT:
-                        {
-                        int LA86_35 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt86=1;
-                        }
-                        else if ( (true) ) {
-                            alt86=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 35, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
-                    case FLOAT:
-                        {
-                        int LA86_36 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt86=1;
-                        }
-                        else if ( (true) ) {
-                            alt86=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 36, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
-                    case BOOL:
-                        {
-                        int LA86_37 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt86=1;
-                        }
-                        else if ( (true) ) {
-                            alt86=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 37, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
-                    case NULL:
-                        {
-                        int LA86_38 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt86=1;
-                        }
-                        else if ( (true) ) {
-                            alt86=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 38, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 16, input);
+                            new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 15, input);
 
                         throw nvae;
                     }
 
-                }
-                else if ( (LA86_1==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt86=2;
-                }
-                else {
+                    }
+                    break;
+                default:
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 1, input);
+                        new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 1, input);
 
                     throw nvae;
                 }
+
                 }
                 break;
             case EQUAL:
@@ -11400,7 +11440,6 @@
             case LESS:
             case LESS_EQUAL:
             case NOT_EQUAL:
-            case GRAVE_ACCENT:
                 {
                 alt86=2;
                 }
@@ -11413,18 +11452,18 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1185:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 0, input);
+                    new NoViableAltException("1200:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 86, 0, input);
 
                 throw nvae;
             }
 
             switch (alt86) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1188:5: compound_operator
+                    // src/main/resources/org/drools/lang/DRL.g:1204:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression4105);
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression4122);
                     compound_operator242=compound_operator();
                     _fsp--;
                     if (failed) return retval;
@@ -11433,11 +11472,11 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1189:4: simple_operator
+                    // src/main/resources/org/drools/lang/DRL.g:1205:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression4110);
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression4127);
                     simple_operator243=simple_operator();
                     _fsp--;
                     if (failed) return retval;
@@ -11446,22 +11485,22 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1190:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // src/main/resources/org/drools/lang/DRL.g:1206:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
                     LEFT_PAREN244=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression4115); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression4132); if (failed) return retval;
                     if ( backtracking==0 ) {
                       	emit(LEFT_PAREN244, DroolsEditorType.SYMBOL);	
                     }
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression4124);
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression4141);
                     or_restr_connective245=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective245.getTree());
                     RIGHT_PAREN246=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression4129); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression4146); if (failed) return retval;
                     if ( backtracking==0 ) {
                     RIGHT_PAREN246_tree = (Object)adaptor.create(RIGHT_PAREN246);
                     adaptor.addChild(root_0, RIGHT_PAREN246_tree);
@@ -11482,7 +11521,7 @@
             }
         }
         catch ( RecognitionException re ) {
-
+            
             	if (!lookaheadTest){
             		reportError(re);
             		recover(input, re);
@@ -11492,7 +11531,7 @@
 
         }
         finally {
-
+            
             	if (isEditorInterfaceEnabled && input.LA(2) == EOF && input.LA(1) == ID) {
             		emit(true, Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
             		emit(input.LT(1), DroolsEditorType.KEYWORD);
@@ -11535,19 +11574,13 @@
     };
 
     // $ANTLR start simple_operator
-    // src/main/resources/org/drools/lang/DRL.g:1235:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | id3= ID | ga2= GRAVE_ACCENT id4= ID square_chunk ) expression_value ;
+    // src/main/resources/org/drools/lang/DRL.g:1251:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | operator_key ( 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 id1=null;
-        Token ga1=null;
-        Token id2=null;
-        Token id3=null;
-        Token ga2=null;
-        Token id4=null;
         Token EQUAL247=null;
         Token GREATER248=null;
         Token GREATER_EQUAL249=null;
@@ -11564,29 +11597,27 @@
 
         memberof_key_return memberof_key257 = null;
 
-        square_chunk_return square_chunk258 = null;
+        neg_operator_key_return neg_operator_key258 = null;
 
-        contains_key_return contains_key259 = null;
+        square_chunk_return square_chunk259 = null;
 
-        excludes_key_return excludes_key260 = null;
+        contains_key_return contains_key260 = null;
 
-        matches_key_return matches_key261 = null;
+        excludes_key_return excludes_key261 = null;
 
-        soundslike_key_return soundslike_key262 = null;
+        matches_key_return matches_key262 = null;
 
-        memberof_key_return memberof_key263 = null;
+        soundslike_key_return soundslike_key263 = null;
 
-        square_chunk_return square_chunk264 = null;
+        memberof_key_return memberof_key264 = null;
 
-        expression_value_return expression_value265 = null;
+        operator_key_return operator_key265 = null;
 
+        square_chunk_return square_chunk266 = null;
 
-        Object id1_tree=null;
-        Object ga1_tree=null;
-        Object id2_tree=null;
-        Object id3_tree=null;
-        Object ga2_tree=null;
-        Object id4_tree=null;
+        expression_value_return expression_value267 = null;
+
+
         Object EQUAL247_tree=null;
         Object GREATER248_tree=null;
         Object GREATER_EQUAL249_tree=null;
@@ -11595,100 +11626,95 @@
         Object NOT_EQUAL252_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1236:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | id3= ID | ga2= GRAVE_ACCENT id4= ID square_chunk ) expression_value )
-            // src/main/resources/org/drools/lang/DRL.g:1236:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | id3= ID | ga2= GRAVE_ACCENT id4= ID square_chunk ) expression_value
+            // src/main/resources/org/drools/lang/DRL.g:1252:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | operator_key ( square_chunk )? ) expression_value )
+            // src/main/resources/org/drools/lang/DRL.g:1252:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | operator_key ( square_chunk )? ) expression_value
             {
             root_0 = (Object)adaptor.nil();
 
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1237:3: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | id3= ID | ga2= GRAVE_ACCENT id4= ID square_chunk )
-            int alt88=14;
+            // src/main/resources/org/drools/lang/DRL.g:1253:3: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | operator_key ( square_chunk )? )
+            int alt90=13;
             switch ( input.LA(1) ) {
             case EQUAL:
                 {
-                alt88=1;
+                alt90=1;
                 }
                 break;
             case GREATER:
                 {
-                alt88=2;
+                alt90=2;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt88=3;
+                alt90=3;
                 }
                 break;
             case LESS:
                 {
-                alt88=4;
+                alt90=4;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt88=5;
+                alt90=5;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt88=6;
+                alt90=6;
                 }
                 break;
             case ID:
                 {
-                int LA88_7 = input.LA(2);
+                int LA90_7 = input.LA(2);
 
-                if ( (LA88_7==ID||LA88_7==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt88=7;
+                if ( (LA90_7==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt90=7;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
-                    alt88=8;
+                    alt90=8;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))) ) {
-                    alt88=9;
+                    alt90=9;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
-                    alt88=10;
+                    alt90=10;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
-                    alt88=11;
+                    alt90=11;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
-                    alt88=12;
+                    alt90=12;
                 }
-                else if ( (true) ) {
-                    alt88=13;
+                else if ( ((isPluggableEvaluator(false))) ) {
+                    alt90=13;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1237:3: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | id3= ID | ga2= GRAVE_ACCENT id4= ID square_chunk )", 88, 7, input);
+                        new NoViableAltException("1253:3: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | operator_key ( square_chunk )? )", 90, 7, input);
 
                     throw nvae;
                 }
                 }
                 break;
-            case GRAVE_ACCENT:
-                {
-                alt88=14;
-                }
-                break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1237:3: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | id3= ID | ga2= GRAVE_ACCENT id4= ID square_chunk )", 88, 0, input);
+                    new NoViableAltException("1253:3: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | operator_key ( square_chunk )? )", 90, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt88) {
+            switch (alt90) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1237:4: EQUAL
+                    // src/main/resources/org/drools/lang/DRL.g:1253:4: EQUAL
                     {
                     EQUAL247=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator4158); if (failed) return retval;
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator4175); if (failed) return retval;
                     if ( backtracking==0 ) {
                     EQUAL247_tree = (Object)adaptor.create(EQUAL247);
                     root_0 = (Object)adaptor.becomeRoot(EQUAL247_tree, root_0);
@@ -11700,10 +11726,10 @@
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1238:4: GREATER
+                    // src/main/resources/org/drools/lang/DRL.g:1254:4: GREATER
                     {
                     GREATER248=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator4166); if (failed) return retval;
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator4183); if (failed) return retval;
                     if ( backtracking==0 ) {
                     GREATER248_tree = (Object)adaptor.create(GREATER248);
                     root_0 = (Object)adaptor.becomeRoot(GREATER248_tree, root_0);
@@ -11715,10 +11741,10 @@
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1239:4: GREATER_EQUAL
+                    // src/main/resources/org/drools/lang/DRL.g:1255:4: GREATER_EQUAL
                     {
                     GREATER_EQUAL249=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator4174); if (failed) return retval;
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator4191); if (failed) return retval;
                     if ( backtracking==0 ) {
                     GREATER_EQUAL249_tree = (Object)adaptor.create(GREATER_EQUAL249);
                     root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL249_tree, root_0);
@@ -11730,10 +11756,10 @@
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/lang/DRL.g:1240:4: LESS
+                    // src/main/resources/org/drools/lang/DRL.g:1256:4: LESS
                     {
                     LESS250=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator4182); if (failed) return retval;
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator4199); if (failed) return retval;
                     if ( backtracking==0 ) {
                     LESS250_tree = (Object)adaptor.create(LESS250);
                     root_0 = (Object)adaptor.becomeRoot(LESS250_tree, root_0);
@@ -11745,10 +11771,10 @@
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/lang/DRL.g:1241:4: LESS_EQUAL
+                    // src/main/resources/org/drools/lang/DRL.g:1257:4: LESS_EQUAL
                     {
                     LESS_EQUAL251=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator4190); if (failed) return retval;
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator4207); if (failed) return retval;
                     if ( backtracking==0 ) {
                     LESS_EQUAL251_tree = (Object)adaptor.create(LESS_EQUAL251);
                     root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL251_tree, root_0);
@@ -11760,10 +11786,10 @@
                     }
                     break;
                 case 6 :
-                    // src/main/resources/org/drools/lang/DRL.g:1242:4: NOT_EQUAL
+                    // src/main/resources/org/drools/lang/DRL.g:1258:4: NOT_EQUAL
                     {
                     NOT_EQUAL252=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator4198); if (failed) return retval;
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator4215); if (failed) return retval;
                     if ( backtracking==0 ) {
                     NOT_EQUAL252_tree = (Object)adaptor.create(NOT_EQUAL252);
                     root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL252_tree, root_0);
@@ -11775,58 +11801,55 @@
                     }
                     break;
                 case 7 :
-                    // src/main/resources/org/drools/lang/DRL.g:1243:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk )
+                    // src/main/resources/org/drools/lang/DRL.g:1259:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator4206);
+                    pushFollow(FOLLOW_not_key_in_simple_operator4223);
                     not_key253=not_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, not_key253.getTree());
-                    // src/main/resources/org/drools/lang/DRL.g:1244:3: ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk )
-                    int alt87=6;
-                    int LA87_0 = input.LA(1);
+                    // src/main/resources/org/drools/lang/DRL.g:1260:3: ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? )
+                    int alt88=5;
+                    int LA88_0 = input.LA(1);
 
-                    if ( (LA87_0==ID) ) {
-                        int LA87_1 = input.LA(2);
+                    if ( (LA88_0==ID) ) {
+                        int LA88_1 = input.LA(2);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
-                            alt87=1;
+                            alt88=1;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
-                            alt87=2;
+                            alt88=2;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
-                            alt87=3;
+                            alt88=3;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
-                            alt87=4;
+                            alt88=4;
                         }
-                        else if ( (true) ) {
-                            alt87=5;
+                        else if ( ((isPluggableEvaluator(true))) ) {
+                            alt88=5;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("1244:3: ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk )", 87, 1, input);
+                                new NoViableAltException("1260:3: ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? )", 88, 1, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (LA87_0==GRAVE_ACCENT) ) {
-                        alt87=6;
-                    }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1244:3: ( contains_key | soundslike_key | matches_key | memberof_key | id1= ID | ga1= GRAVE_ACCENT id2= ID square_chunk )", 87, 0, input);
+                            new NoViableAltException("1260:3: ( contains_key | soundslike_key | matches_key | memberof_key | neg_operator_key ( square_chunk )? )", 88, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt87) {
+                    switch (alt88) {
                         case 1 :
-                            // src/main/resources/org/drools/lang/DRL.g:1244:5: contains_key
+                            // src/main/resources/org/drools/lang/DRL.g:1260:5: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator4213);
+                            pushFollow(FOLLOW_contains_key_in_simple_operator4230);
                             contains_key254=contains_key();
                             _fsp--;
                             if (failed) return retval;
@@ -11835,9 +11858,9 @@
                             }
                             break;
                         case 2 :
-                            // src/main/resources/org/drools/lang/DRL.g:1245:5: soundslike_key
+                            // src/main/resources/org/drools/lang/DRL.g:1261:5: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator4220);
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator4237);
                             soundslike_key255=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
@@ -11846,9 +11869,9 @@
                             }
                             break;
                         case 3 :
-                            // src/main/resources/org/drools/lang/DRL.g:1246:5: matches_key
+                            // src/main/resources/org/drools/lang/DRL.g:1262:5: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator4227);
+                            pushFollow(FOLLOW_matches_key_in_simple_operator4244);
                             matches_key256=matches_key();
                             _fsp--;
                             if (failed) return retval;
@@ -11857,9 +11880,9 @@
                             }
                             break;
                         case 4 :
-                            // src/main/resources/org/drools/lang/DRL.g:1247:5: memberof_key
+                            // src/main/resources/org/drools/lang/DRL.g:1263:5: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator4234);
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator4251);
                             memberof_key257=memberof_key();
                             _fsp--;
                             if (failed) return retval;
@@ -11868,43 +11891,36 @@
                             }
                             break;
                         case 5 :
-                            // src/main/resources/org/drools/lang/DRL.g:1248:5: id1= ID
+                            // src/main/resources/org/drools/lang/DRL.g:1264:5: neg_operator_key ( square_chunk )?
                             {
-                            id1=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator4243); if (failed) return retval;
-                            if ( backtracking==0 ) {
-                            id1_tree = (Object)adaptor.create(id1);
-                            root_0 = (Object)adaptor.becomeRoot(id1_tree, root_0);
+                            pushFollow(FOLLOW_neg_operator_key_in_simple_operator4258);
+                            neg_operator_key258=neg_operator_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(neg_operator_key258.getTree(), root_0);
+                            // src/main/resources/org/drools/lang/DRL.g:1264:23: ( square_chunk )?
+                            int alt87=2;
+                            int LA87_0 = input.LA(1);
+
+                            if ( (LA87_0==LEFT_SQUARE) ) {
+                                alt87=1;
                             }
-                            if ( backtracking==0 ) {
-                              	emit(id1, DroolsEditorType.IDENTIFIER);	
-                            }
+                            switch (alt87) {
+                                case 1 :
+                                    // src/main/resources/org/drools/lang/DRL.g:1264:23: square_chunk
+                                    {
+                                    pushFollow(FOLLOW_square_chunk_in_simple_operator4261);
+                                    square_chunk259=square_chunk();
+                                    _fsp--;
+                                    if (failed) return retval;
+                                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk259.getTree());
 
+                                    }
+                                    break;
+
                             }
-                            break;
-                        case 6 :
-                            // src/main/resources/org/drools/lang/DRL.g:1249:5: ga1= GRAVE_ACCENT id2= ID square_chunk
-                            {
-                            ga1=(Token)input.LT(1);
-                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator4254); if (failed) return retval;
-                            if ( backtracking==0 ) {
-                              	emit(ga1, DroolsEditorType.SYMBOL);	
-                            }
-                            id2=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator4262); if (failed) return retval;
-                            if ( backtracking==0 ) {
-                            id2_tree = (Object)adaptor.create(id2);
-                            root_0 = (Object)adaptor.becomeRoot(id2_tree, root_0);
-                            }
-                            if ( backtracking==0 ) {
-                              	emit(id2, DroolsEditorType.IDENTIFIER);	
-                            }
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator4268);
-                            square_chunk258=square_chunk();
-                            _fsp--;
-                            if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk258.getTree());
 
+
                             }
                             break;
 
@@ -11914,98 +11930,91 @@
                     }
                     break;
                 case 8 :
-                    // src/main/resources/org/drools/lang/DRL.g:1250:4: contains_key
+                    // src/main/resources/org/drools/lang/DRL.g:1268:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator4274);
-                    contains_key259=contains_key();
+                    pushFollow(FOLLOW_contains_key_in_simple_operator4287);
+                    contains_key260=contains_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key259.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key260.getTree(), root_0);
 
                     }
                     break;
                 case 9 :
-                    // src/main/resources/org/drools/lang/DRL.g:1251:4: excludes_key
+                    // src/main/resources/org/drools/lang/DRL.g:1269:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator4280);
-                    excludes_key260=excludes_key();
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator4293);
+                    excludes_key261=excludes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key260.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key261.getTree(), root_0);
 
                     }
                     break;
                 case 10 :
-                    // src/main/resources/org/drools/lang/DRL.g:1252:4: matches_key
+                    // src/main/resources/org/drools/lang/DRL.g:1270:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator4286);
-                    matches_key261=matches_key();
+                    pushFollow(FOLLOW_matches_key_in_simple_operator4299);
+                    matches_key262=matches_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key261.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key262.getTree(), root_0);
 
                     }
                     break;
                 case 11 :
-                    // src/main/resources/org/drools/lang/DRL.g:1253:4: soundslike_key
+                    // src/main/resources/org/drools/lang/DRL.g:1271:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator4292);
-                    soundslike_key262=soundslike_key();
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator4305);
+                    soundslike_key263=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key262.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key263.getTree(), root_0);
 
                     }
                     break;
                 case 12 :
-                    // src/main/resources/org/drools/lang/DRL.g:1254:4: memberof_key
+                    // src/main/resources/org/drools/lang/DRL.g:1272:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator4298);
-                    memberof_key263=memberof_key();
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator4311);
+                    memberof_key264=memberof_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key263.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key264.getTree(), root_0);
 
                     }
                     break;
                 case 13 :
-                    // src/main/resources/org/drools/lang/DRL.g:1255:4: id3= ID
+                    // src/main/resources/org/drools/lang/DRL.g:1274:4: operator_key ( square_chunk )?
                     {
-                    id3=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator4306); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                    id3_tree = (Object)adaptor.create(id3);
-                    root_0 = (Object)adaptor.becomeRoot(id3_tree, root_0);
+                    pushFollow(FOLLOW_operator_key_in_simple_operator4318);
+                    operator_key265=operator_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(operator_key265.getTree(), root_0);
+                    // src/main/resources/org/drools/lang/DRL.g:1274:18: ( square_chunk )?
+                    int alt89=2;
+                    int LA89_0 = input.LA(1);
+
+                    if ( (LA89_0==LEFT_SQUARE) ) {
+                        alt89=1;
                     }
-                    if ( backtracking==0 ) {
-                      	emit(id3, DroolsEditorType.IDENTIFIER);	
-                    }
+                    switch (alt89) {
+                        case 1 :
+                            // src/main/resources/org/drools/lang/DRL.g:1274:18: square_chunk
+                            {
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator4321);
+                            square_chunk266=square_chunk();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk266.getTree());
 
+                            }
+                            break;
+
                     }
-                    break;
-                case 14 :
-                    // src/main/resources/org/drools/lang/DRL.g:1256:4: ga2= GRAVE_ACCENT id4= ID square_chunk
-                    {
-                    ga2=(Token)input.LT(1);
-                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator4316); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                      	emit(ga2, DroolsEditorType.SYMBOL);	
-                    }
-                    id4=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator4324); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                    id4_tree = (Object)adaptor.create(id4);
-                    root_0 = (Object)adaptor.becomeRoot(id4_tree, root_0);
-                    }
-                    if ( backtracking==0 ) {
-                      	emit(id4, DroolsEditorType.IDENTIFIER);	
-                    }
-                    pushFollow(FOLLOW_square_chunk_in_simple_operator4330);
-                    square_chunk264=square_chunk();
-                    _fsp--;
-                    if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk264.getTree());
 
+
                     }
                     break;
 
@@ -12014,11 +12023,11 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);	
             }
-            pushFollow(FOLLOW_expression_value_in_simple_operator4337);
-            expression_value265=expression_value();
+            pushFollow(FOLLOW_expression_value_in_simple_operator4339);
+            expression_value267=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value265.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value267.getTree());
 
             }
 
@@ -12045,57 +12054,57 @@
     };
 
     // $ANTLR start compound_operator
-    // src/main/resources/org/drools/lang/DRL.g:1262:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    // src/main/resources/org/drools/lang/DRL.g:1282: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_PAREN269=null;
-        Token COMMA271=null;
-        Token RIGHT_PAREN273=null;
-        in_key_return in_key266 = null;
-
-        not_key_return not_key267 = null;
-
+        Token LEFT_PAREN271=null;
+        Token COMMA273=null;
+        Token RIGHT_PAREN275=null;
         in_key_return in_key268 = null;
 
-        expression_value_return expression_value270 = null;
+        not_key_return not_key269 = null;
 
+        in_key_return in_key270 = null;
+
         expression_value_return expression_value272 = null;
 
+        expression_value_return expression_value274 = null;
 
-        Object LEFT_PAREN269_tree=null;
-        Object COMMA271_tree=null;
-        Object RIGHT_PAREN273_tree=null;
 
+        Object LEFT_PAREN271_tree=null;
+        Object COMMA273_tree=null;
+        Object RIGHT_PAREN275_tree=null;
+
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1263:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
-            // src/main/resources/org/drools/lang/DRL.g:1263:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:1283:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1283:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1264:2: ( in_key | not_key in_key )
-            int alt89=2;
-            int LA89_0 = input.LA(1);
+            // src/main/resources/org/drools/lang/DRL.g:1284:2: ( in_key | not_key in_key )
+            int alt91=2;
+            int LA91_0 = input.LA(1);
 
-            if ( (LA89_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IN))||(validateIdentifierKey(DroolsSoftKeywords.NOT))))) {
-                int LA89_1 = input.LA(2);
+            if ( (LA91_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.IN))))) {
+                int LA91_1 = input.LA(2);
 
-                if ( (LA89_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
-                    alt89=1;
+                if ( (LA91_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt91=2;
                 }
-                else if ( (LA89_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt89=2;
+                else if ( (LA91_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
+                    alt91=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1264:2: ( in_key | not_key in_key )", 89, 1, input);
+                        new NoViableAltException("1284:2: ( in_key | not_key in_key )", 91, 1, input);
 
                     throw nvae;
                 }
@@ -12103,35 +12112,35 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1264:2: ( in_key | not_key in_key )", 89, 0, input);
+                    new NoViableAltException("1284:2: ( in_key | not_key in_key )", 91, 0, input);
 
                 throw nvae;
             }
-            switch (alt89) {
+            switch (alt91) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1264:4: in_key
+                    // src/main/resources/org/drools/lang/DRL.g:1284:4: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator4355);
-                    in_key266=in_key();
+                    pushFollow(FOLLOW_in_key_in_compound_operator4357);
+                    in_key268=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key266.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key268.getTree(), root_0);
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1264:14: not_key in_key
+                    // src/main/resources/org/drools/lang/DRL.g:1284:14: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator4360);
-                    not_key267=not_key();
+                    pushFollow(FOLLOW_not_key_in_compound_operator4362);
+                    not_key269=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key267.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator4362);
-                    in_key268=in_key();
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key269.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator4364);
+                    in_key270=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key268.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key270.getTree(), root_0);
 
                     }
                     break;
@@ -12141,58 +12150,58 @@
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);	
             }
-            LEFT_PAREN269=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator4373); if (failed) return retval;
+            LEFT_PAREN271=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator4375); if (failed) return retval;
             if ( backtracking==0 ) {
-              	emit(LEFT_PAREN269, DroolsEditorType.SYMBOL);	
+              	emit(LEFT_PAREN271, DroolsEditorType.SYMBOL);	
             }
-            pushFollow(FOLLOW_expression_value_in_compound_operator4381);
-            expression_value270=expression_value();
+            pushFollow(FOLLOW_expression_value_in_compound_operator4383);
+            expression_value272=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value270.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1267:21: ( COMMA expression_value )*
-            loop90:
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value272.getTree());
+            // src/main/resources/org/drools/lang/DRL.g:1287:21: ( COMMA expression_value )*
+            loop92:
             do {
-                int alt90=2;
-                int LA90_0 = input.LA(1);
+                int alt92=2;
+                int LA92_0 = input.LA(1);
 
-                if ( (LA90_0==COMMA) ) {
-                    alt90=1;
+                if ( (LA92_0==COMMA) ) {
+                    alt92=1;
                 }
 
 
-                switch (alt90) {
+                switch (alt92) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1267:23: COMMA expression_value
+            	    // src/main/resources/org/drools/lang/DRL.g:1287:23: COMMA expression_value
             	    {
-            	    COMMA271=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator4385); if (failed) return retval;
+            	    COMMA273=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator4387); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	      	emit(COMMA271, DroolsEditorType.SYMBOL);	
+            	      	emit(COMMA273, DroolsEditorType.SYMBOL);	
             	    }
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator4390);
-            	    expression_value272=expression_value();
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator4392);
+            	    expression_value274=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value272.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value274.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop90;
+            	    break loop92;
                 }
             } while (true);
 
-            RIGHT_PAREN273=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator4398); if (failed) return retval;
+            RIGHT_PAREN275=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator4400); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN273_tree = (Object)adaptor.create(RIGHT_PAREN273);
-            adaptor.addChild(root_0, RIGHT_PAREN273_tree);
+            RIGHT_PAREN275_tree = (Object)adaptor.create(RIGHT_PAREN275);
+            adaptor.addChild(root_0, RIGHT_PAREN275_tree);
             }
             if ( backtracking==0 ) {
-              	emit(RIGHT_PAREN273, DroolsEditorType.SYMBOL);	
+              	emit(RIGHT_PAREN275, DroolsEditorType.SYMBOL);	
             }
             if ( backtracking==0 ) {
               	emit(Location.LOCATION_LHS_INSIDE_CONDITION_END);	
@@ -12223,39 +12232,183 @@
     }
     // $ANTLR end compound_operator
 
+    public static class operator_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start operator_key
+    // src/main/resources/org/drools/lang/DRL.g:1298:1: operator_key : {...}?id= ID -> VK_OPERATOR[$id] ;
+    public final operator_key_return operator_key() throws RecognitionException {
+        operator_key_return retval = new operator_key_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 {
+            // src/main/resources/org/drools/lang/DRL.g:1299:2: ({...}?id= ID -> VK_OPERATOR[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1299:9: {...}?id= ID
+            {
+            if ( !((isPluggableEvaluator(false))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "operator_key", "(isPluggableEvaluator(false))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_operator_key4429); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+            if ( backtracking==0 ) {
+               emit(id, DroolsEditorType.IDENTIFIER); 
+            }
+
+            // 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();
+            // 1301:9: -> VK_OPERATOR[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_OPERATOR, 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 operator_key
+
+    public static class neg_operator_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start neg_operator_key
+    // src/main/resources/org/drools/lang/DRL.g:1304:1: neg_operator_key : {...}?id= ID -> VK_OPERATOR[$id] ;
+    public final neg_operator_key_return neg_operator_key() throws RecognitionException {
+        neg_operator_key_return retval = new neg_operator_key_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 {
+            // src/main/resources/org/drools/lang/DRL.g:1305:2: ({...}?id= ID -> VK_OPERATOR[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1305:9: {...}?id= ID
+            {
+            if ( !((isPluggableEvaluator(true))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "neg_operator_key", "(isPluggableEvaluator(true))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_neg_operator_key4472); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+            if ( backtracking==0 ) {
+               emit(id, DroolsEditorType.IDENTIFIER); 
+            }
+
+            // 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();
+            // 1307:9: -> VK_OPERATOR[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_OPERATOR, 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 neg_operator_key
+
     public static class expression_value_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start expression_value
-    // src/main/resources/org/drools/lang/DRL.g:1278:1: expression_value : ( accessor_path | literal_constraint | paren_chunk ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1316: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_path274 = null;
+        accessor_path_return accessor_path276 = null;
 
-        literal_constraint_return literal_constraint275 = null;
+        literal_constraint_return literal_constraint277 = null;
 
-        paren_chunk_return paren_chunk276 = null;
+        paren_chunk_return paren_chunk278 = null;
 
 
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1279:2: ( ( accessor_path | literal_constraint | paren_chunk ) )
-            // src/main/resources/org/drools/lang/DRL.g:1279:4: ( accessor_path | literal_constraint | paren_chunk )
+            // src/main/resources/org/drools/lang/DRL.g:1317:2: ( ( accessor_path | literal_constraint | paren_chunk ) )
+            // src/main/resources/org/drools/lang/DRL.g:1317:4: ( accessor_path | literal_constraint | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            // src/main/resources/org/drools/lang/DRL.g:1279:4: ( accessor_path | literal_constraint | paren_chunk )
-            int alt91=3;
+            // src/main/resources/org/drools/lang/DRL.g:1317:4: ( accessor_path | literal_constraint | paren_chunk )
+            int alt93=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt91=1;
+                alt93=1;
                 }
                 break;
             case STRING:
@@ -12264,53 +12417,53 @@
             case FLOAT:
             case NULL:
                 {
-                alt91=2;
+                alt93=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt91=3;
+                alt93=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1279:4: ( accessor_path | literal_constraint | paren_chunk )", 91, 0, input);
+                    new NoViableAltException("1317:4: ( accessor_path | literal_constraint | paren_chunk )", 93, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt91) {
+            switch (alt93) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1279:5: accessor_path
+                    // src/main/resources/org/drools/lang/DRL.g:1317:5: accessor_path
                     {
-                    pushFollow(FOLLOW_accessor_path_in_expression_value4419);
-                    accessor_path274=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_expression_value4512);
+                    accessor_path276=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path274.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path276.getTree());
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1280:4: literal_constraint
+                    // src/main/resources/org/drools/lang/DRL.g:1318:4: literal_constraint
                     {
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value4424);
-                    literal_constraint275=literal_constraint();
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value4517);
+                    literal_constraint277=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint275.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint277.getTree());
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1281:4: paren_chunk
+                    // src/main/resources/org/drools/lang/DRL.g:1319:4: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value4430);
-                    paren_chunk276=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value4523);
+                    paren_chunk278=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk276.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk278.getTree());
 
                     }
                     break;
@@ -12356,144 +12509,144 @@
     };
 
     // $ANTLR start literal_constraint
-    // src/main/resources/org/drools/lang/DRL.g:1295:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // src/main/resources/org/drools/lang/DRL.g:1333: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 STRING277=null;
-        Token INT278=null;
-        Token FLOAT279=null;
-        Token BOOL280=null;
-        Token NULL281=null;
+        Token STRING279=null;
+        Token INT280=null;
+        Token FLOAT281=null;
+        Token BOOL282=null;
+        Token NULL283=null;
 
-        Object STRING277_tree=null;
-        Object INT278_tree=null;
-        Object FLOAT279_tree=null;
-        Object BOOL280_tree=null;
-        Object NULL281_tree=null;
+        Object STRING279_tree=null;
+        Object INT280_tree=null;
+        Object FLOAT281_tree=null;
+        Object BOOL282_tree=null;
+        Object NULL283_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1296:2: ( STRING | INT | FLOAT | BOOL | NULL )
-            int alt92=5;
+            // src/main/resources/org/drools/lang/DRL.g:1334:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            int alt94=5;
             switch ( input.LA(1) ) {
             case STRING:
                 {
-                alt92=1;
+                alt94=1;
                 }
                 break;
             case INT:
                 {
-                alt92=2;
+                alt94=2;
                 }
                 break;
             case FLOAT:
                 {
-                alt92=3;
+                alt94=3;
                 }
                 break;
             case BOOL:
                 {
-                alt92=4;
+                alt94=4;
                 }
                 break;
             case NULL:
                 {
-                alt92=5;
+                alt94=5;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1295:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );", 92, 0, input);
+                    new NoViableAltException("1333:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );", 94, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt92) {
+            switch (alt94) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1296:4: STRING
+                    // src/main/resources/org/drools/lang/DRL.g:1334:4: STRING
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    STRING277=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint4449); if (failed) return retval;
+                    STRING279=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint4542); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    STRING277_tree = (Object)adaptor.create(STRING277);
-                    adaptor.addChild(root_0, STRING277_tree);
+                    STRING279_tree = (Object)adaptor.create(STRING279);
+                    adaptor.addChild(root_0, STRING279_tree);
                     }
                     if ( backtracking==0 ) {
-                      	emit(STRING277, DroolsEditorType.STRING_CONST);	
+                      	emit(STRING279, DroolsEditorType.STRING_CONST);	
                     }
 
                     }
                     break;
                 case 2 :
-                    // src/main/resources/org/drools/lang/DRL.g:1297:4: INT
+                    // src/main/resources/org/drools/lang/DRL.g:1335:4: INT
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    INT278=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint4456); if (failed) return retval;
+                    INT280=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_literal_constraint4549); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    INT278_tree = (Object)adaptor.create(INT278);
-                    adaptor.addChild(root_0, INT278_tree);
+                    INT280_tree = (Object)adaptor.create(INT280);
+                    adaptor.addChild(root_0, INT280_tree);
                     }
                     if ( backtracking==0 ) {
-                      	emit(INT278, DroolsEditorType.NUMERIC_CONST);	
+                      	emit(INT280, DroolsEditorType.NUMERIC_CONST);	
                     }
 
                     }
                     break;
                 case 3 :
-                    // src/main/resources/org/drools/lang/DRL.g:1298:4: FLOAT
+                    // src/main/resources/org/drools/lang/DRL.g:1336:4: FLOAT
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    FLOAT279=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint4463); if (failed) return retval;
+                    FLOAT281=(Token)input.LT(1);
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint4556); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    FLOAT279_tree = (Object)adaptor.create(FLOAT279);
-                    adaptor.addChild(root_0, FLOAT279_tree);
+                    FLOAT281_tree = (Object)adaptor.create(FLOAT281);
+                    adaptor.addChild(root_0, FLOAT281_tree);
                     }
                     if ( backtracking==0 ) {
-                      	emit(FLOAT279, DroolsEditorType.NUMERIC_CONST);	
+                      	emit(FLOAT281, DroolsEditorType.NUMERIC_CONST);	
                     }
 
                     }
                     break;
                 case 4 :
-                    // src/main/resources/org/drools/lang/DRL.g:1299:4: BOOL
+                    // src/main/resources/org/drools/lang/DRL.g:1337:4: BOOL
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    BOOL280=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint4470); if (failed) return retval;
+                    BOOL282=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint4563); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL280_tree = (Object)adaptor.create(BOOL280);
-                    adaptor.addChild(root_0, BOOL280_tree);
+                    BOOL282_tree = (Object)adaptor.create(BOOL282);
+                    adaptor.addChild(root_0, BOOL282_tree);
                     }
                     if ( backtracking==0 ) {
-                      	emit(BOOL280, DroolsEditorType.BOOLEAN_CONST);	
+                      	emit(BOOL282, DroolsEditorType.BOOLEAN_CONST);	
                     }
 
                     }
                     break;
                 case 5 :
-                    // src/main/resources/org/drools/lang/DRL.g:1300:4: NULL
+                    // src/main/resources/org/drools/lang/DRL.g:1338:4: NULL
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    NULL281=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_literal_constraint4477); if (failed) return retval;
+                    NULL283=(Token)input.LT(1);
+                    match(input,NULL,FOLLOW_NULL_in_literal_constraint4570); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    NULL281_tree = (Object)adaptor.create(NULL281);
-                    adaptor.addChild(root_0, NULL281_tree);
+                    NULL283_tree = (Object)adaptor.create(NULL283);
+                    adaptor.addChild(root_0, NULL283_tree);
                     }
                     if ( backtracking==0 ) {
-                      	emit(NULL281, DroolsEditorType.NULL_CONST);	
+                      	emit(NULL283, DroolsEditorType.NULL_CONST);	
                     }
 
                     }
@@ -12523,7 +12676,7 @@
     };
 
     // $ANTLR start pattern_type
-    // src/main/resources/org/drools/lang/DRL.g:1303:1: pattern_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1341: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);
@@ -12532,7 +12685,7 @@
 
         Token id=null;
         List list_id=null;
-        dimension_definition_return dimension_definition282 = null;
+        dimension_definition_return dimension_definition284 = null;
 
 
         Object id_tree=null;
@@ -12540,40 +12693,40 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1304:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
-            // src/main/resources/org/drools/lang/DRL.g:1304:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
+            // src/main/resources/org/drools/lang/DRL.g:1342:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // src/main/resources/org/drools/lang/DRL.g:1342:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_pattern_type4492); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_pattern_type4585); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // src/main/resources/org/drools/lang/DRL.g:1304:11: (id+= DOT id+= ID )*
-            loop93:
+            // src/main/resources/org/drools/lang/DRL.g:1342:11: (id+= DOT id+= ID )*
+            loop95:
             do {
-                int alt93=2;
-                int LA93_0 = input.LA(1);
+                int alt95=2;
+                int LA95_0 = input.LA(1);
 
-                if ( (LA93_0==DOT) ) {
-                    alt93=1;
+                if ( (LA95_0==DOT) ) {
+                    alt95=1;
                 }
 
 
-                switch (alt93) {
+                switch (alt95) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1304:13: id+= DOT id+= ID
+            	    // src/main/resources/org/drools/lang/DRL.g:1342:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_pattern_type4498); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_pattern_type4591); 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_type4502); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_pattern_type4595); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -12584,7 +12737,7 @@
             	    break;
 
             	default :
-            	    break loop93;
+            	    break loop95;
                 }
             } while (true);
 
@@ -12592,32 +12745,32 @@
               	emit(list_id, DroolsEditorType.IDENTIFIER);
               		setParaphrasesValue(DroolsParaphraseTypes.PATTERN, buildStringFromTokens(list_id));	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1307:6: ( dimension_definition )*
-            loop94:
+            // src/main/resources/org/drools/lang/DRL.g:1345:6: ( dimension_definition )*
+            loop96:
             do {
-                int alt94=2;
-                int LA94_0 = input.LA(1);
+                int alt96=2;
+                int LA96_0 = input.LA(1);
 
-                if ( (LA94_0==LEFT_SQUARE) ) {
-                    alt94=1;
+                if ( (LA96_0==LEFT_SQUARE) ) {
+                    alt96=1;
                 }
 
 
-                switch (alt94) {
+                switch (alt96) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1307:6: dimension_definition
+            	    // src/main/resources/org/drools/lang/DRL.g:1345:6: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type4517);
-            	    dimension_definition282=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type4610);
+            	    dimension_definition284=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition282.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition284.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop94;
+            	    break loop96;
                 }
             } while (true);
 
@@ -12633,9 +12786,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1308:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+            // 1346:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1308:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+                // src/main/resources/org/drools/lang/DRL.g:1346: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);
@@ -12648,7 +12801,7 @@
 
                 }
                 stream_ID.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1308:28: ( dimension_definition )*
+                // src/main/resources/org/drools/lang/DRL.g:1346:28: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -12687,7 +12840,7 @@
     };
 
     // $ANTLR start data_type
-    // src/main/resources/org/drools/lang/DRL.g:1311:1: data_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1349:1: data_type : id+= ID (id+= DOT id+= 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);
@@ -12696,7 +12849,7 @@
 
         Token id=null;
         List list_id=null;
-        dimension_definition_return dimension_definition283 = null;
+        dimension_definition_return dimension_definition285 = null;
 
 
         Object id_tree=null;
@@ -12704,40 +12857,40 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1312:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
-            // src/main/resources/org/drools/lang/DRL.g:1312:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
+            // src/main/resources/org/drools/lang/DRL.g:1350:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // src/main/resources/org/drools/lang/DRL.g:1350:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_data_type4545); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_data_type4638); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // src/main/resources/org/drools/lang/DRL.g:1312:11: (id+= DOT id+= ID )*
-            loop95:
+            // src/main/resources/org/drools/lang/DRL.g:1350:11: (id+= DOT id+= ID )*
+            loop97:
             do {
-                int alt95=2;
-                int LA95_0 = input.LA(1);
+                int alt97=2;
+                int LA97_0 = input.LA(1);
 
-                if ( (LA95_0==DOT) ) {
-                    alt95=1;
+                if ( (LA97_0==DOT) ) {
+                    alt97=1;
                 }
 
 
-                switch (alt95) {
+                switch (alt97) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1312:13: id+= DOT id+= ID
+            	    // src/main/resources/org/drools/lang/DRL.g:1350:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_data_type4551); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_data_type4644); 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_data_type4555); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_data_type4648); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -12748,36 +12901,36 @@
             	    break;
 
             	default :
-            	    break loop95;
+            	    break loop97;
                 }
             } while (true);
 
-            // src/main/resources/org/drools/lang/DRL.g:1312:31: ( dimension_definition )*
-            loop96:
+            // src/main/resources/org/drools/lang/DRL.g:1350:31: ( dimension_definition )*
+            loop98:
             do {
-                int alt96=2;
-                int LA96_0 = input.LA(1);
+                int alt98=2;
+                int LA98_0 = input.LA(1);
 
-                if ( (LA96_0==LEFT_SQUARE) ) {
-                    alt96=1;
+                if ( (LA98_0==LEFT_SQUARE) ) {
+                    alt98=1;
                 }
 
 
-                switch (alt96) {
+                switch (alt98) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1312:31: dimension_definition
+            	    // src/main/resources/org/drools/lang/DRL.g:1350:31: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type4560);
-            	    dimension_definition283=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type4653);
+            	    dimension_definition285=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition283.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition285.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop96;
+            	    break loop98;
                 }
             } while (true);
 
@@ -12796,9 +12949,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1314:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // 1352:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1314:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+                // src/main/resources/org/drools/lang/DRL.g:1352: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);
@@ -12811,7 +12964,7 @@
 
                 }
                 stream_ID.reset();
-                // src/main/resources/org/drools/lang/DRL.g:1314:25: ( dimension_definition )*
+                // src/main/resources/org/drools/lang/DRL.g:1352:25: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -12850,42 +13003,42 @@
     };
 
     // $ANTLR start dimension_definition
-    // src/main/resources/org/drools/lang/DRL.g:1317:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // src/main/resources/org/drools/lang/DRL.g:1355: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_SQUARE284=null;
-        Token RIGHT_SQUARE285=null;
+        Token LEFT_SQUARE286=null;
+        Token RIGHT_SQUARE287=null;
 
-        Object LEFT_SQUARE284_tree=null;
-        Object RIGHT_SQUARE285_tree=null;
+        Object LEFT_SQUARE286_tree=null;
+        Object RIGHT_SQUARE287_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1318:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // src/main/resources/org/drools/lang/DRL.g:1318:4: LEFT_SQUARE RIGHT_SQUARE
+            // src/main/resources/org/drools/lang/DRL.g:1356:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // src/main/resources/org/drools/lang/DRL.g:1356:4: LEFT_SQUARE RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE284=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition4589); if (failed) return retval;
+            LEFT_SQUARE286=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition4682); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE284_tree = (Object)adaptor.create(LEFT_SQUARE284);
-            adaptor.addChild(root_0, LEFT_SQUARE284_tree);
+            LEFT_SQUARE286_tree = (Object)adaptor.create(LEFT_SQUARE286);
+            adaptor.addChild(root_0, LEFT_SQUARE286_tree);
             }
             if ( backtracking==0 ) {
-              	emit(LEFT_SQUARE284, DroolsEditorType.SYMBOL);	
+              	emit(LEFT_SQUARE286, DroolsEditorType.SYMBOL);	
             }
-            RIGHT_SQUARE285=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition4596); if (failed) return retval;
+            RIGHT_SQUARE287=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition4689); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE285_tree = (Object)adaptor.create(RIGHT_SQUARE285);
-            adaptor.addChild(root_0, RIGHT_SQUARE285_tree);
+            RIGHT_SQUARE287_tree = (Object)adaptor.create(RIGHT_SQUARE287);
+            adaptor.addChild(root_0, RIGHT_SQUARE287_tree);
             }
             if ( backtracking==0 ) {
-              	emit(RIGHT_SQUARE285, DroolsEditorType.SYMBOL);	
+              	emit(RIGHT_SQUARE287, DroolsEditorType.SYMBOL);	
             }
 
             }
@@ -12913,64 +13066,64 @@
     };
 
     // $ANTLR start accessor_path
-    // src/main/resources/org/drools/lang/DRL.g:1322:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1360: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 DOT287=null;
-        accessor_element_return accessor_element286 = null;
-
+        Token DOT289=null;
         accessor_element_return accessor_element288 = null;
 
+        accessor_element_return accessor_element290 = null;
 
-        Object DOT287_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 {
-            // src/main/resources/org/drools/lang/DRL.g:1323:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
-            // src/main/resources/org/drools/lang/DRL.g:1323:4: accessor_element ( DOT accessor_element )*
+            // src/main/resources/org/drools/lang/DRL.g:1361:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // src/main/resources/org/drools/lang/DRL.g:1361:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path4610);
-            accessor_element286=accessor_element();
+            pushFollow(FOLLOW_accessor_element_in_accessor_path4703);
+            accessor_element288=accessor_element();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accessor_element.add(accessor_element286.getTree());
-            // src/main/resources/org/drools/lang/DRL.g:1323:21: ( DOT accessor_element )*
-            loop97:
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element288.getTree());
+            // src/main/resources/org/drools/lang/DRL.g:1361:21: ( DOT accessor_element )*
+            loop99:
             do {
-                int alt97=2;
-                int LA97_0 = input.LA(1);
+                int alt99=2;
+                int LA99_0 = input.LA(1);
 
-                if ( (LA97_0==DOT) ) {
-                    alt97=1;
+                if ( (LA99_0==DOT) ) {
+                    alt99=1;
                 }
 
 
-                switch (alt97) {
+                switch (alt99) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1323:23: DOT accessor_element
+            	    // src/main/resources/org/drools/lang/DRL.g:1361:23: DOT accessor_element
             	    {
-            	    DOT287=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path4614); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT287);
+            	    DOT289=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path4707); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT289);
 
             	    if ( backtracking==0 ) {
-            	      	emit(DOT287, DroolsEditorType.IDENTIFIER);	
+            	      	emit(DOT289, DroolsEditorType.IDENTIFIER);	
             	    }
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path4618);
-            	    accessor_element288=accessor_element();
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path4711);
+            	    accessor_element290=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element288.getTree());
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element290.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop97;
+            	    break loop99;
                 }
             } while (true);
 
@@ -12986,9 +13139,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1324:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 1362:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1324:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                // src/main/resources/org/drools/lang/DRL.g:1362: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);
@@ -13034,57 +13187,57 @@
     };
 
     // $ANTLR start accessor_element
-    // src/main/resources/org/drools/lang/DRL.g:1327:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    // src/main/resources/org/drools/lang/DRL.g:1365: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 ID289=null;
-        square_chunk_return square_chunk290 = null;
+        Token ID291=null;
+        square_chunk_return square_chunk292 = null;
 
 
-        Object ID289_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 {
-            // src/main/resources/org/drools/lang/DRL.g:1328:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
-            // src/main/resources/org/drools/lang/DRL.g:1328:4: ID ( square_chunk )*
+            // src/main/resources/org/drools/lang/DRL.g:1366:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // src/main/resources/org/drools/lang/DRL.g:1366:4: ID ( square_chunk )*
             {
-            ID289=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element4642); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID289);
+            ID291=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element4735); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID291);
 
             if ( backtracking==0 ) {
-              	emit(ID289, DroolsEditorType.IDENTIFIER);	
+              	emit(ID291, DroolsEditorType.IDENTIFIER);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1329:3: ( square_chunk )*
-            loop98:
+            // src/main/resources/org/drools/lang/DRL.g:1367:3: ( square_chunk )*
+            loop100:
             do {
-                int alt98=2;
-                int LA98_0 = input.LA(1);
+                int alt100=2;
+                int LA100_0 = input.LA(1);
 
-                if ( (LA98_0==LEFT_SQUARE) ) {
-                    alt98=1;
+                if ( (LA100_0==LEFT_SQUARE) ) {
+                    alt100=1;
                 }
 
 
-                switch (alt98) {
+                switch (alt100) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1329:3: square_chunk
+            	    // src/main/resources/org/drools/lang/DRL.g:1367:3: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element4648);
-            	    square_chunk290=square_chunk();
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element4741);
+            	    square_chunk292=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk290.getTree());
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk292.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop98;
+            	    break loop100;
                 }
             } while (true);
 
@@ -13100,15 +13253,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1330:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 1368:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // src/main/resources/org/drools/lang/DRL.g:1330:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                // src/main/resources/org/drools/lang/DRL.g:1368: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());
-                // src/main/resources/org/drools/lang/DRL.g:1330:30: ( square_chunk )*
+                // src/main/resources/org/drools/lang/DRL.g:1368:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -13147,7 +13300,7 @@
     };
 
     // $ANTLR start rhs_chunk
-    // src/main/resources/org/drools/lang/DRL.g:1333:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1371: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);
@@ -13158,14 +13311,14 @@
 
 
         RewriteRuleSubtreeStream stream_rhs_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk_data");
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1336:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
-            // src/main/resources/org/drools/lang/DRL.g:1336:5: rc= rhs_chunk_data
+            // src/main/resources/org/drools/lang/DRL.g:1374:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // src/main/resources/org/drools/lang/DRL.g:1374:5: rc= rhs_chunk_data
             {
-            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk4677);
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk4770);
             rc=rhs_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -13185,7 +13338,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1337:2: -> VT_RHS_CHUNK[$rc.start,text]
+            // 1375:2: -> VT_RHS_CHUNK[$rc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
 
@@ -13218,7 +13371,7 @@
     };
 
     // $ANTLR start rhs_chunk_data
-    // src/main/resources/org/drools/lang/DRL.g:1340:1: rhs_chunk_data : THEN (any=~ END )* end1= END ( SEMICOLON )? ;
+    // src/main/resources/org/drools/lang/DRL.g:1378:1: rhs_chunk_data : THEN (any=~ END )* end1= 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);
@@ -13227,46 +13380,46 @@
 
         Token any=null;
         Token end1=null;
-        Token THEN291=null;
-        Token SEMICOLON292=null;
+        Token THEN293=null;
+        Token SEMICOLON294=null;
 
         Object any_tree=null;
         Object end1_tree=null;
-        Object THEN291_tree=null;
-        Object SEMICOLON292_tree=null;
+        Object THEN293_tree=null;
+        Object SEMICOLON294_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1341:2: ( THEN (any=~ END )* end1= END ( SEMICOLON )? )
-            // src/main/resources/org/drools/lang/DRL.g:1341:4: THEN (any=~ END )* end1= END ( SEMICOLON )?
+            // src/main/resources/org/drools/lang/DRL.g:1379:2: ( THEN (any=~ END )* end1= END ( SEMICOLON )? )
+            // src/main/resources/org/drools/lang/DRL.g:1379:4: THEN (any=~ END )* end1= END ( SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            THEN291=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data4696); if (failed) return retval;
+            THEN293=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data4789); if (failed) return retval;
             if ( backtracking==0 ) {
-            THEN291_tree = (Object)adaptor.create(THEN291);
-            adaptor.addChild(root_0, THEN291_tree);
+            THEN293_tree = (Object)adaptor.create(THEN293);
+            adaptor.addChild(root_0, THEN293_tree);
             }
             if ( backtracking==0 ) {
-              	if (THEN291.getText().equalsIgnoreCase("then")){
-              			emit(THEN291, DroolsEditorType.KEYWORD);
+              	if (THEN293.getText().equalsIgnoreCase("then")){
+              			emit(THEN293, DroolsEditorType.KEYWORD);
               			emit(Location.LOCATION_RHS);
               		}	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1346:4: (any=~ END )*
-            loop99:
+            // src/main/resources/org/drools/lang/DRL.g:1384:4: (any=~ END )*
+            loop101:
             do {
-                int alt99=2;
-                int LA99_0 = input.LA(1);
+                int alt101=2;
+                int LA101_0 = input.LA(1);
 
-                if ( ((LA99_0>=VT_COMPILATION_UNIT && LA99_0<=DOT_STAR)||(LA99_0>=STRING && LA99_0<=MULTI_LINE_COMMENT)) ) {
-                    alt99=1;
+                if ( ((LA101_0>=VT_COMPILATION_UNIT && LA101_0<=DOT_STAR)||(LA101_0>=STRING && LA101_0<=MULTI_LINE_COMMENT)) ) {
+                    alt101=1;
                 }
 
 
-                switch (alt99) {
+                switch (alt101) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1346:6: any=~ END
+            	    // src/main/resources/org/drools/lang/DRL.g:1384:6: any=~ END
             	    {
             	    any=(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) ) {
@@ -13278,7 +13431,7 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data4709);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data4802);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -13289,12 +13442,12 @@
             	    break;
 
             	default :
-            	    break loop99;
+            	    break loop101;
                 }
             } while (true);
 
             end1=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk_data4722); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_rhs_chunk_data4815); if (failed) return retval;
             if ( backtracking==0 ) {
             end1_tree = (Object)adaptor.create(end1);
             adaptor.addChild(root_0, end1_tree);
@@ -13302,22 +13455,22 @@
             if ( backtracking==0 ) {
               	emit(end1, DroolsEditorType.KEYWORD);	
             }
-            // src/main/resources/org/drools/lang/DRL.g:1348:3: ( SEMICOLON )?
-            int alt100=2;
-            int LA100_0 = input.LA(1);
+            // src/main/resources/org/drools/lang/DRL.g:1386:3: ( SEMICOLON )?
+            int alt102=2;
+            int LA102_0 = input.LA(1);
 
-            if ( (LA100_0==SEMICOLON) ) {
-                alt100=1;
+            if ( (LA102_0==SEMICOLON) ) {
+                alt102=1;
             }
-            switch (alt100) {
+            switch (alt102) {
                 case 1 :
-                    // src/main/resources/org/drools/lang/DRL.g:1348:3: SEMICOLON
+                    // src/main/resources/org/drools/lang/DRL.g:1386:3: SEMICOLON
                     {
-                    SEMICOLON292=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data4728); if (failed) return retval;
+                    SEMICOLON294=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data4821); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    SEMICOLON292_tree = (Object)adaptor.create(SEMICOLON292);
-                    adaptor.addChild(root_0, SEMICOLON292_tree);
+                    SEMICOLON294_tree = (Object)adaptor.create(SEMICOLON294);
+                    adaptor.addChild(root_0, SEMICOLON294_tree);
                     }
 
                     }
@@ -13326,7 +13479,7 @@
             }
 
             if ( backtracking==0 ) {
-              	emit(SEMICOLON292, DroolsEditorType.KEYWORD);	
+              	emit(SEMICOLON294, DroolsEditorType.KEYWORD);	
             }
 
             }
@@ -13354,7 +13507,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // src/main/resources/org/drools/lang/DRL.g:1351:1: curly_chunk : cc= curly_chunk_data[false] -> VT_CURLY_CHUNK[$cc.start,text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1389:1: curly_chunk : cc= curly_chunk_data[false] -> 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);
@@ -13365,14 +13518,14 @@
 
 
         RewriteRuleSubtreeStream stream_curly_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule curly_chunk_data");
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1354:3: (cc= curly_chunk_data[false] -> VT_CURLY_CHUNK[$cc.start,text] )
-            // src/main/resources/org/drools/lang/DRL.g:1354:5: cc= curly_chunk_data[false]
+            // src/main/resources/org/drools/lang/DRL.g:1392:3: (cc= curly_chunk_data[false] -> VT_CURLY_CHUNK[$cc.start,text] )
+            // src/main/resources/org/drools/lang/DRL.g:1392:5: cc= curly_chunk_data[false]
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk4747);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk4840);
             cc=curly_chunk_data(false);
             _fsp--;
             if (failed) return retval;
@@ -13392,7 +13545,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1355:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 1393:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -13425,7 +13578,7 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // src/main/resources/org/drools/lang/DRL.g:1358:1: curly_chunk_data[boolean isRecursive] : lc1= LEFT_CURLY (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* rc1= RIGHT_CURLY ;
+    // src/main/resources/org/drools/lang/DRL.g:1396:1: curly_chunk_data[boolean isRecursive] : lc1= LEFT_CURLY (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* rc1= RIGHT_CURLY ;
     public final curly_chunk_data_return curly_chunk_data(boolean isRecursive) throws RecognitionException {
         curly_chunk_data_return retval = new curly_chunk_data_return();
         retval.start = input.LT(1);
@@ -13435,7 +13588,7 @@
         Token lc1=null;
         Token any=null;
         Token rc1=null;
-        curly_chunk_data_return curly_chunk_data293 = null;
+        curly_chunk_data_return curly_chunk_data295 = null;
 
 
         Object lc1_tree=null;
@@ -13443,13 +13596,13 @@
         Object rc1_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1359:2: (lc1= LEFT_CURLY (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* rc1= RIGHT_CURLY )
-            // src/main/resources/org/drools/lang/DRL.g:1359:4: lc1= LEFT_CURLY (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* rc1= RIGHT_CURLY
+            // src/main/resources/org/drools/lang/DRL.g:1397:2: (lc1= LEFT_CURLY (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* rc1= RIGHT_CURLY )
+            // src/main/resources/org/drools/lang/DRL.g:1397:4: lc1= LEFT_CURLY (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* rc1= RIGHT_CURLY
             {
             root_0 = (Object)adaptor.nil();
 
             lc1=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data4770); if (failed) return retval;
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data4863); if (failed) return retval;
             if ( backtracking==0 ) {
             lc1_tree = (Object)adaptor.create(lc1);
             adaptor.addChild(root_0, lc1_tree);
@@ -13462,23 +13615,23 @@
               			}	
               		
             }
-            // src/main/resources/org/drools/lang/DRL.g:1366:4: (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )*
-            loop101:
+            // src/main/resources/org/drools/lang/DRL.g:1404:4: (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )*
+            loop103:
             do {
-                int alt101=3;
-                int LA101_0 = input.LA(1);
+                int alt103=3;
+                int LA103_0 = input.LA(1);
 
-                if ( ((LA101_0>=VT_COMPILATION_UNIT && LA101_0<=THEN)||(LA101_0>=MISC && LA101_0<=MULTI_LINE_COMMENT)) ) {
-                    alt101=1;
+                if ( ((LA103_0>=VT_COMPILATION_UNIT && LA103_0<=THEN)||(LA103_0>=MISC && LA103_0<=MULTI_LINE_COMMENT)) ) {
+                    alt103=1;
                 }
-                else if ( (LA101_0==LEFT_CURLY) ) {
-                    alt101=2;
+                else if ( (LA103_0==LEFT_CURLY) ) {
+                    alt103=2;
                 }
 
 
-                switch (alt101) {
+                switch (alt103) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1366:5: any=~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // src/main/resources/org/drools/lang/DRL.g:1404:5: any=~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
             	    any=(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) ) {
@@ -13490,7 +13643,7 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data4782);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data4875);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -13500,24 +13653,24 @@
             	    }
             	    break;
             	case 2 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1366:87: curly_chunk_data[true]
+            	    // src/main/resources/org/drools/lang/DRL.g:1404:87: curly_chunk_data[true]
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data4798);
-            	    curly_chunk_data293=curly_chunk_data(true);
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data4891);
+            	    curly_chunk_data295=curly_chunk_data(true);
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data293.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data295.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop101;
+            	    break loop103;
                 }
             } while (true);
 
             rc1=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data4809); if (failed) return retval;
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data4902); if (failed) return retval;
             if ( backtracking==0 ) {
             rc1_tree = (Object)adaptor.create(rc1);
             adaptor.addChild(root_0, rc1_tree);
@@ -13556,7 +13709,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // src/main/resources/org/drools/lang/DRL.g:1376:1: paren_chunk : pc= paren_chunk_data[false] -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1414:1: paren_chunk : pc= paren_chunk_data[false] -> 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);
@@ -13567,14 +13720,14 @@
 
 
         RewriteRuleSubtreeStream stream_paren_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk_data");
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1379:3: (pc= paren_chunk_data[false] -> VT_PAREN_CHUNK[$pc.start,text] )
-            // src/main/resources/org/drools/lang/DRL.g:1379:5: pc= paren_chunk_data[false]
+            // src/main/resources/org/drools/lang/DRL.g:1417:3: (pc= paren_chunk_data[false] -> VT_PAREN_CHUNK[$pc.start,text] )
+            // src/main/resources/org/drools/lang/DRL.g:1417:5: pc= paren_chunk_data[false]
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk4830);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk4923);
             pc=paren_chunk_data(false);
             _fsp--;
             if (failed) return retval;
@@ -13594,7 +13747,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1380:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 1418:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -13627,7 +13780,7 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // src/main/resources/org/drools/lang/DRL.g:1383:1: paren_chunk_data[boolean isRecursive] : lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* rp1= RIGHT_PAREN ;
+    // src/main/resources/org/drools/lang/DRL.g:1421:1: paren_chunk_data[boolean isRecursive] : lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* rp1= RIGHT_PAREN ;
     public final paren_chunk_data_return paren_chunk_data(boolean isRecursive) throws RecognitionException {
         paren_chunk_data_return retval = new paren_chunk_data_return();
         retval.start = input.LT(1);
@@ -13637,7 +13790,7 @@
         Token lp1=null;
         Token any=null;
         Token rp1=null;
-        paren_chunk_data_return paren_chunk_data294 = null;
+        paren_chunk_data_return paren_chunk_data296 = null;
 
 
         Object lp1_tree=null;
@@ -13645,13 +13798,13 @@
         Object rp1_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1384:2: (lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* rp1= RIGHT_PAREN )
-            // src/main/resources/org/drools/lang/DRL.g:1384:4: lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* rp1= RIGHT_PAREN
+            // src/main/resources/org/drools/lang/DRL.g:1422:2: (lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* rp1= RIGHT_PAREN )
+            // src/main/resources/org/drools/lang/DRL.g:1422:4: lp1= LEFT_PAREN (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* rp1= RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
             lp1=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data4854); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data4947); if (failed) return retval;
             if ( backtracking==0 ) {
             lp1_tree = (Object)adaptor.create(lp1);
             adaptor.addChild(root_0, lp1_tree);
@@ -13664,23 +13817,23 @@
               			}	
               		
             }
-            // src/main/resources/org/drools/lang/DRL.g:1391:4: (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )*
-            loop102:
+            // src/main/resources/org/drools/lang/DRL.g:1429:4: (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )*
+            loop104:
             do {
-                int alt102=3;
-                int LA102_0 = input.LA(1);
+                int alt104=3;
+                int LA104_0 = input.LA(1);
 
-                if ( ((LA102_0>=VT_COMPILATION_UNIT && LA102_0<=STRING)||LA102_0==COMMA||(LA102_0>=AT && LA102_0<=MULTI_LINE_COMMENT)) ) {
-                    alt102=1;
+                if ( ((LA104_0>=VT_COMPILATION_UNIT && LA104_0<=STRING)||LA104_0==COMMA||(LA104_0>=AT && LA104_0<=MULTI_LINE_COMMENT)) ) {
+                    alt104=1;
                 }
-                else if ( (LA102_0==LEFT_PAREN) ) {
-                    alt102=2;
+                else if ( (LA104_0==LEFT_PAREN) ) {
+                    alt104=2;
                 }
 
 
-                switch (alt102) {
+                switch (alt104) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1391:5: any=~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // src/main/resources/org/drools/lang/DRL.g:1429:5: any=~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
             	    any=(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) ) {
@@ -13692,7 +13845,7 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data4866);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data4959);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -13702,24 +13855,24 @@
             	    }
             	    break;
             	case 2 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1391:87: paren_chunk_data[true]
+            	    // src/main/resources/org/drools/lang/DRL.g:1429:87: paren_chunk_data[true]
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data4882);
-            	    paren_chunk_data294=paren_chunk_data(true);
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data4975);
+            	    paren_chunk_data296=paren_chunk_data(true);
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data294.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data296.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop102;
+            	    break loop104;
                 }
             } while (true);
 
             rp1=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data4893); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data4986); if (failed) return retval;
             if ( backtracking==0 ) {
             rp1_tree = (Object)adaptor.create(rp1);
             adaptor.addChild(root_0, rp1_tree);
@@ -13758,7 +13911,7 @@
     };
 
     // $ANTLR start square_chunk
-    // src/main/resources/org/drools/lang/DRL.g:1401:1: square_chunk : sc= square_chunk_data[false] -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1439:1: square_chunk : sc= square_chunk_data[false] -> 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);
@@ -13769,14 +13922,14 @@
 
 
         RewriteRuleSubtreeStream stream_square_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk_data");
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1404:3: (sc= square_chunk_data[false] -> VT_SQUARE_CHUNK[$sc.start,text] )
-            // src/main/resources/org/drools/lang/DRL.g:1404:5: sc= square_chunk_data[false]
+            // src/main/resources/org/drools/lang/DRL.g:1442:3: (sc= square_chunk_data[false] -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // src/main/resources/org/drools/lang/DRL.g:1442:5: sc= square_chunk_data[false]
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk4914);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk5007);
             sc=square_chunk_data(false);
             _fsp--;
             if (failed) return retval;
@@ -13796,7 +13949,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1405:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 1443:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -13829,7 +13982,7 @@
     };
 
     // $ANTLR start square_chunk_data
-    // src/main/resources/org/drools/lang/DRL.g:1408:1: square_chunk_data[boolean isRecursive] : ls1= LEFT_SQUARE (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* rs1= RIGHT_SQUARE ;
+    // src/main/resources/org/drools/lang/DRL.g:1446:1: square_chunk_data[boolean isRecursive] : ls1= LEFT_SQUARE (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* rs1= RIGHT_SQUARE ;
     public final square_chunk_data_return square_chunk_data(boolean isRecursive) throws RecognitionException {
         square_chunk_data_return retval = new square_chunk_data_return();
         retval.start = input.LT(1);
@@ -13839,7 +13992,7 @@
         Token ls1=null;
         Token any=null;
         Token rs1=null;
-        square_chunk_data_return square_chunk_data295 = null;
+        square_chunk_data_return square_chunk_data297 = null;
 
 
         Object ls1_tree=null;
@@ -13847,13 +14000,13 @@
         Object rs1_tree=null;
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1409:2: (ls1= LEFT_SQUARE (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* rs1= RIGHT_SQUARE )
-            // src/main/resources/org/drools/lang/DRL.g:1409:4: ls1= LEFT_SQUARE (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* rs1= RIGHT_SQUARE
+            // src/main/resources/org/drools/lang/DRL.g:1447:2: (ls1= LEFT_SQUARE (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* rs1= RIGHT_SQUARE )
+            // src/main/resources/org/drools/lang/DRL.g:1447:4: ls1= LEFT_SQUARE (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* rs1= RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
             ls1=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data4937); if (failed) return retval;
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data5030); if (failed) return retval;
             if ( backtracking==0 ) {
             ls1_tree = (Object)adaptor.create(ls1);
             adaptor.addChild(root_0, ls1_tree);
@@ -13866,23 +14019,23 @@
               			}	
               		
             }
-            // src/main/resources/org/drools/lang/DRL.g:1416:4: (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )*
-            loop103:
+            // src/main/resources/org/drools/lang/DRL.g:1454:4: (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )*
+            loop105:
             do {
-                int alt103=3;
-                int LA103_0 = input.LA(1);
+                int alt105=3;
+                int LA105_0 = input.LA(1);
 
-                if ( ((LA103_0>=VT_COMPILATION_UNIT && LA103_0<=NULL)||(LA103_0>=THEN && LA103_0<=MULTI_LINE_COMMENT)) ) {
-                    alt103=1;
+                if ( ((LA105_0>=VT_COMPILATION_UNIT && LA105_0<=NULL)||(LA105_0>=THEN && LA105_0<=MULTI_LINE_COMMENT)) ) {
+                    alt105=1;
                 }
-                else if ( (LA103_0==LEFT_SQUARE) ) {
-                    alt103=2;
+                else if ( (LA105_0==LEFT_SQUARE) ) {
+                    alt105=2;
                 }
 
 
-                switch (alt103) {
+                switch (alt105) {
             	case 1 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1416:5: any=~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // src/main/resources/org/drools/lang/DRL.g:1454:5: any=~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
             	    any=(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) ) {
@@ -13894,7 +14047,7 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data4949);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data5042);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -13904,24 +14057,24 @@
             	    }
             	    break;
             	case 2 :
-            	    // src/main/resources/org/drools/lang/DRL.g:1416:88: square_chunk_data[true]
+            	    // src/main/resources/org/drools/lang/DRL.g:1454:88: square_chunk_data[true]
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data4964);
-            	    square_chunk_data295=square_chunk_data(true);
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data5057);
+            	    square_chunk_data297=square_chunk_data(true);
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data295.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data297.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop103;
+            	    break loop105;
                 }
             } while (true);
 
             rs1=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data4975); if (failed) return retval;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data5068); if (failed) return retval;
             if ( backtracking==0 ) {
             rs1_tree = (Object)adaptor.create(rs1);
             adaptor.addChild(root_0, rs1_tree);
@@ -13960,7 +14113,7 @@
     };
 
     // $ANTLR start lock_on_active_key
-    // src/main/resources/org/drools/lang/DRL.g:1426:1: lock_on_active_key : {...}? =>id1= ID mis1= MISC id2= ID mis2= MISC id3= ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1464:1: lock_on_active_key : {...}? =>id1= ID mis1= MISC id2= ID mis2= MISC id3= 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);
@@ -13978,38 +14131,38 @@
         Object id2_tree=null;
         Object mis2_tree=null;
         Object id3_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1429:3: ({...}? =>id1= ID mis1= MISC id2= ID mis2= MISC id3= ID -> VK_LOCK_ON_ACTIVE[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1429:5: {...}? =>id1= ID mis1= MISC id2= ID mis2= MISC id3= ID
+            // src/main/resources/org/drools/lang/DRL.g:1467:3: ({...}? =>id1= ID mis1= MISC id2= ID mis2= MISC id3= ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1467:5: {...}? =>id1= ID mis1= MISC id2= ID mis2= MISC id3= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key4999); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key5092); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key5003); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key5096); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key5007); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key5100); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             mis2=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key5011); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key5104); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis2);
 
             id3=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key5015); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key5108); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id3);
 
             if ( backtracking==0 ) {
@@ -14034,7 +14187,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1435:3: -> VK_LOCK_ON_ACTIVE[$start, text]
+            // 1473:3: -> VK_LOCK_ON_ACTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
 
@@ -14067,7 +14220,7 @@
     };
 
     // $ANTLR start date_effective_key
-    // src/main/resources/org/drools/lang/DRL.g:1438:1: date_effective_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1476:1: date_effective_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14081,30 +14234,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1441:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_DATE_EFFECTIVE[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1441:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1479:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1479:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key5047); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_effective_key5140); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_effective_key5051); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key5144); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key5055); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_effective_key5148); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14127,7 +14280,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1445:3: -> VK_DATE_EFFECTIVE[$start, text]
+            // 1483:3: -> VK_DATE_EFFECTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
 
@@ -14160,7 +14313,7 @@
     };
 
     // $ANTLR start date_expires_key
-    // src/main/resources/org/drools/lang/DRL.g:1448:1: date_expires_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_DATE_EXPIRES[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1486:1: date_expires_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14174,30 +14327,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1451:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_DATE_EXPIRES[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1451:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1489:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_DATE_EXPIRES[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1489:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key5087); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_expires_key5180); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_expires_key5091); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key5184); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key5095); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_expires_key5188); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14220,7 +14373,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1455:3: -> VK_DATE_EXPIRES[$start, text]
+            // 1493:3: -> VK_DATE_EXPIRES[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
 
@@ -14253,7 +14406,7 @@
     };
 
     // $ANTLR start no_loop_key
-    // src/main/resources/org/drools/lang/DRL.g:1458:1: no_loop_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_NO_LOOP[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1496:1: no_loop_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14267,30 +14420,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1461:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_NO_LOOP[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1461:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1499:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_NO_LOOP[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1499:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key5127); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_no_loop_key5220); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_no_loop_key5131); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key5224); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key5135); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_no_loop_key5228); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14313,7 +14466,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1465:3: -> VK_NO_LOOP[$start, text]
+            // 1503:3: -> VK_NO_LOOP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
 
@@ -14346,7 +14499,7 @@
     };
 
     // $ANTLR start auto_focus_key
-    // src/main/resources/org/drools/lang/DRL.g:1468:1: auto_focus_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_AUTO_FOCUS[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1506:1: auto_focus_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14360,30 +14513,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1471:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_AUTO_FOCUS[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1471:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1509:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_AUTO_FOCUS[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1509:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key5167); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_auto_focus_key5260); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_auto_focus_key5171); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key5264); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key5175); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_auto_focus_key5268); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14406,7 +14559,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1475:3: -> VK_AUTO_FOCUS[$start, text]
+            // 1513:3: -> VK_AUTO_FOCUS[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
 
@@ -14439,7 +14592,7 @@
     };
 
     // $ANTLR start activation_group_key
-    // src/main/resources/org/drools/lang/DRL.g:1478:1: activation_group_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1516:1: activation_group_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14453,30 +14606,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1481:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_ACTIVATION_GROUP[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1481:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1519:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1519:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key5207); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_activation_group_key5300); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_activation_group_key5211); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key5304); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key5215); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_activation_group_key5308); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14499,7 +14652,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1485:3: -> VK_ACTIVATION_GROUP[$start, text]
+            // 1523:3: -> VK_ACTIVATION_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
 
@@ -14532,7 +14685,7 @@
     };
 
     // $ANTLR start agenda_group_key
-    // src/main/resources/org/drools/lang/DRL.g:1488:1: agenda_group_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_AGENDA_GROUP[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1526:1: agenda_group_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14546,30 +14699,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1491:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_AGENDA_GROUP[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1491:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1529:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_AGENDA_GROUP[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1529:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key5247); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_agenda_group_key5340); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_agenda_group_key5251); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key5344); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key5255); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_agenda_group_key5348); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14592,7 +14745,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1495:3: -> VK_AGENDA_GROUP[$start, text]
+            // 1533:3: -> VK_AGENDA_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
 
@@ -14625,7 +14778,7 @@
     };
 
     // $ANTLR start ruleflow_group_key
-    // src/main/resources/org/drools/lang/DRL.g:1498:1: ruleflow_group_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1536:1: ruleflow_group_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14639,30 +14792,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1501:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_RULEFLOW_GROUP[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1501:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1539:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1539:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key5287); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key5380); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key5291); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key5384); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key5295); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key5388); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14685,7 +14838,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1505:3: -> VK_RULEFLOW_GROUP[$start, text]
+            // 1543:3: -> VK_RULEFLOW_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
 
@@ -14718,7 +14871,7 @@
     };
 
     // $ANTLR start entry_point_key
-    // src/main/resources/org/drools/lang/DRL.g:1508:1: entry_point_key : {...}? =>id1= ID mis1= MISC id2= ID -> VK_ENTRY_POINT[$start, text] ;
+    // src/main/resources/org/drools/lang/DRL.g:1546:1: entry_point_key : {...}? =>id1= ID mis1= MISC id2= 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);
@@ -14732,30 +14885,30 @@
         Object id1_tree=null;
         Object mis1_tree=null;
         Object id2_tree=null;
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
-
+        
         	String text = "";
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1511:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_ENTRY_POINT[$start, text] )
-            // src/main/resources/org/drools/lang/DRL.g:1511:5: {...}? =>id1= ID mis1= MISC id2= ID
+            // src/main/resources/org/drools/lang/DRL.g:1549:3: ({...}? =>id1= ID mis1= MISC id2= ID -> VK_ENTRY_POINT[$start, text] )
+            // src/main/resources/org/drools/lang/DRL.g:1549:5: {...}? =>id1= ID mis1= MISC id2= 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))");
             }
             id1=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key5327); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_entry_point_key5420); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id1);
 
             mis1=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key5331); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key5424); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(mis1);
 
             id2=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key5335); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_entry_point_key5428); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id2);
 
             if ( backtracking==0 ) {
@@ -14778,7 +14931,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1515:3: -> VK_ENTRY_POINT[$start, text]
+            // 1553:3: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -14811,7 +14964,7 @@
     };
 
     // $ANTLR start duration_key
-    // src/main/resources/org/drools/lang/DRL.g:1518:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1556: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);
@@ -14824,15 +14977,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1519:2: ({...}? =>id= ID -> VK_DURATION[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1519:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1557:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1557: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_key5364); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_duration_key5457); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -14850,7 +15003,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1521:3: -> VK_DURATION[$id]
+            // 1559:3: -> VK_DURATION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DURATION, id));
 
@@ -14883,7 +15036,7 @@
     };
 
     // $ANTLR start package_key
-    // src/main/resources/org/drools/lang/DRL.g:1524:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1562: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);
@@ -14896,15 +15049,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1525:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1525:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1563:2: ({...}?id= ID -> VK_PACKAGE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1563: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_key5391); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_key5482); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -14922,7 +15075,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1527:3: -> VK_PACKAGE[$id]
+            // 1565:3: -> VK_PACKAGE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, id));
 
@@ -14955,7 +15108,7 @@
     };
 
     // $ANTLR start import_key
-    // src/main/resources/org/drools/lang/DRL.g:1530:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1568: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);
@@ -14968,15 +15121,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1531:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1531:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1569:2: ({...}?id= ID -> VK_IMPORT[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1569: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_key5418); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_key5508); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -14994,7 +15147,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1533:3: -> VK_IMPORT[$id]
+            // 1571:3: -> VK_IMPORT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IMPORT, id));
 
@@ -15027,7 +15180,7 @@
     };
 
     // $ANTLR start dialect_key
-    // src/main/resources/org/drools/lang/DRL.g:1536:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1574: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);
@@ -15040,15 +15193,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1537:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1537:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1575:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1575: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_key5445); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_dialect_key5535); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15066,7 +15219,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1539:3: -> VK_DIALECT[$id]
+            // 1577:3: -> VK_DIALECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DIALECT, id));
 
@@ -15099,7 +15252,7 @@
     };
 
     // $ANTLR start salience_key
-    // src/main/resources/org/drools/lang/DRL.g:1542:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1580: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);
@@ -15112,15 +15265,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1543:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1543:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1581:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1581: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_key5472); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_salience_key5562); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15138,7 +15291,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1545:3: -> VK_SALIENCE[$id]
+            // 1583:3: -> VK_SALIENCE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, id));
 
@@ -15171,7 +15324,7 @@
     };
 
     // $ANTLR start enabled_key
-    // src/main/resources/org/drools/lang/DRL.g:1548:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1586: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);
@@ -15184,15 +15337,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1549:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1549:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1587:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1587: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_key5499); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_enabled_key5589); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15210,7 +15363,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1551:3: -> VK_ENABLED[$id]
+            // 1589:3: -> VK_ENABLED[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENABLED, id));
 
@@ -15243,7 +15396,7 @@
     };
 
     // $ANTLR start attributes_key
-    // src/main/resources/org/drools/lang/DRL.g:1554:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1592: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);
@@ -15256,15 +15409,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1555:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1555:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1593:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1593: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_key5526); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_attributes_key5616); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15282,7 +15435,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1557:3: -> VK_ATTRIBUTES[$id]
+            // 1595:3: -> VK_ATTRIBUTES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, id));
 
@@ -15315,7 +15468,7 @@
     };
 
     // $ANTLR start rule_key
-    // src/main/resources/org/drools/lang/DRL.g:1560:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1598: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);
@@ -15328,15 +15481,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1561:2: ({...}? =>id= ID -> VK_RULE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1561:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1599:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1599: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_key5553); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_rule_key5643); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15354,7 +15507,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1563:3: -> VK_RULE[$id]
+            // 1601:3: -> VK_RULE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULE, id));
 
@@ -15387,7 +15540,7 @@
     };
 
     // $ANTLR start extend_key
-    // src/main/resources/org/drools/lang/DRL.g:1566:1: extend_key : {...}? =>id= ID -> VK_EXTEND[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1604:1: extend_key : {...}? =>id= ID -> VK_EXTEND[$id] ;
     public final extend_key_return extend_key() throws RecognitionException {
         extend_key_return retval = new extend_key_return();
         retval.start = input.LT(1);
@@ -15400,15 +15553,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1567:2: ({...}? =>id= ID -> VK_EXTEND[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1567:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1605:2: ({...}? =>id= ID -> VK_EXTEND[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1605:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXTEND))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "extend_key", "(validateIdentifierKey(DroolsSoftKeywords.EXTEND))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_extend_key5580); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_extend_key5670); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15426,7 +15579,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1569:3: -> VK_EXTEND[$id]
+            // 1607:3: -> VK_EXTEND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXTEND, id));
 
@@ -15459,7 +15612,7 @@
     };
 
     // $ANTLR start template_key
-    // src/main/resources/org/drools/lang/DRL.g:1572:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1610: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);
@@ -15472,15 +15625,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1573:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1573:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1611:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1611: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_key5607); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_template_key5697); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15498,7 +15651,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1575:3: -> VK_TEMPLATE[$id]
+            // 1613:3: -> VK_TEMPLATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, id));
 
@@ -15531,7 +15684,7 @@
     };
 
     // $ANTLR start query_key
-    // src/main/resources/org/drools/lang/DRL.g:1578:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1616: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);
@@ -15544,15 +15697,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1579:2: ({...}? =>id= ID -> VK_QUERY[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1579:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1617:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1617: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_key5634); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_query_key5724); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15570,7 +15723,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1581:3: -> VK_QUERY[$id]
+            // 1619:3: -> VK_QUERY[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_QUERY, id));
 
@@ -15603,7 +15756,7 @@
     };
 
     // $ANTLR start declare_key
-    // src/main/resources/org/drools/lang/DRL.g:1584:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1622: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);
@@ -15616,15 +15769,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1585:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1585:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1623:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1623: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_key5661); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_declare_key5751); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15642,7 +15795,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1587:3: -> VK_DECLARE[$id]
+            // 1625:3: -> VK_DECLARE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DECLARE, id));
 
@@ -15675,7 +15828,7 @@
     };
 
     // $ANTLR start function_key
-    // src/main/resources/org/drools/lang/DRL.g:1590:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1628: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);
@@ -15688,15 +15841,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1591:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1591:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1629:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1629: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_key5688); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_key5778); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15714,7 +15867,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1593:3: -> VK_FUNCTION[$id]
+            // 1631:3: -> VK_FUNCTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, id));
 
@@ -15747,7 +15900,7 @@
     };
 
     // $ANTLR start global_key
-    // src/main/resources/org/drools/lang/DRL.g:1596:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1634: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);
@@ -15760,15 +15913,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1597:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1597:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1635:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1635: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_key5715); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_key5805); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15786,7 +15939,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1599:3: -> VK_GLOBAL[$id]
+            // 1637:3: -> VK_GLOBAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, id));
 
@@ -15819,7 +15972,7 @@
     };
 
     // $ANTLR start eval_key
-    // src/main/resources/org/drools/lang/DRL.g:1602:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1640: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);
@@ -15832,15 +15985,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1603:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1603:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1641:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1641: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_key5742); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key5832); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15858,7 +16011,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1605:3: -> VK_EVAL[$id]
+            // 1643:3: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -15891,7 +16044,7 @@
     };
 
     // $ANTLR start contains_key
-    // src/main/resources/org/drools/lang/DRL.g:1608:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1646: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);
@@ -15904,15 +16057,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1609:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1609:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1647:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1647: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_key5769); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key5859); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -15930,7 +16083,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1611:3: -> VK_CONTAINS[$id]
+            // 1649:3: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -15963,7 +16116,7 @@
     };
 
     // $ANTLR start matches_key
-    // src/main/resources/org/drools/lang/DRL.g:1614:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1652: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);
@@ -15976,15 +16129,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1615:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1615:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1653:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1653: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_key5796); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key5886); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16002,7 +16155,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1617:3: -> VK_MATCHES[$id]
+            // 1655:3: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -16035,7 +16188,7 @@
     };
 
     // $ANTLR start excludes_key
-    // src/main/resources/org/drools/lang/DRL.g:1620:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1658: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);
@@ -16048,15 +16201,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1621:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1621:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1659:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1659: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_key5823); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key5913); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16074,7 +16227,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1623:3: -> VK_EXCLUDES[$id]
+            // 1661:3: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -16107,7 +16260,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // src/main/resources/org/drools/lang/DRL.g:1626:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1664: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);
@@ -16120,15 +16273,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1627:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1627:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1665:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1665: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_key5850); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key5940); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16146,7 +16299,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1629:3: -> VK_SOUNDSLIKE[$id]
+            // 1667:3: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -16179,7 +16332,7 @@
     };
 
     // $ANTLR start memberof_key
-    // src/main/resources/org/drools/lang/DRL.g:1632:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1670: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);
@@ -16192,15 +16345,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1633:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1633:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1671:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1671: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_key5877); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key5967); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16218,7 +16371,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1635:3: -> VK_MEMBEROF[$id]
+            // 1673:3: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -16251,7 +16404,7 @@
     };
 
     // $ANTLR start not_key
-    // src/main/resources/org/drools/lang/DRL.g:1638:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1676: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);
@@ -16264,15 +16417,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1639:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1639:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1677:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1677: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_key5904); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key5994); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16290,7 +16443,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1641:3: -> VK_NOT[$id]
+            // 1679:3: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -16323,7 +16476,7 @@
     };
 
     // $ANTLR start in_key
-    // src/main/resources/org/drools/lang/DRL.g:1644:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1682: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);
@@ -16336,15 +16489,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1645:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1645:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1683:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1683: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_key5931); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key6021); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16362,7 +16515,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1647:3: -> VK_IN[$id]
+            // 1685:3: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -16395,7 +16548,7 @@
     };
 
     // $ANTLR start or_key
-    // src/main/resources/org/drools/lang/DRL.g:1650:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1688: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);
@@ -16408,15 +16561,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1651:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1651:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1689:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1689: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_key5958); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key6048); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16434,7 +16587,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1653:3: -> VK_OR[$id]
+            // 1691:3: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -16467,7 +16620,7 @@
     };
 
     // $ANTLR start and_key
-    // src/main/resources/org/drools/lang/DRL.g:1656:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1694: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);
@@ -16480,15 +16633,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1657:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1657:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1695:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1695: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_key5985); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key6075); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16506,7 +16659,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1659:3: -> VK_AND[$id]
+            // 1697:3: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -16539,7 +16692,7 @@
     };
 
     // $ANTLR start exists_key
-    // src/main/resources/org/drools/lang/DRL.g:1662:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1700: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);
@@ -16552,15 +16705,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1663:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1663:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1701:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1701: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_key6012); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key6102); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16578,7 +16731,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1665:3: -> VK_EXISTS[$id]
+            // 1703:3: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -16611,7 +16764,7 @@
     };
 
     // $ANTLR start forall_key
-    // src/main/resources/org/drools/lang/DRL.g:1668:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1706: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);
@@ -16624,15 +16777,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1669:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1669:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1707:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1707: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_key6039); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key6129); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16650,7 +16803,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1671:3: -> VK_FORALL[$id]
+            // 1709:3: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -16683,7 +16836,7 @@
     };
 
     // $ANTLR start action_key
-    // src/main/resources/org/drools/lang/DRL.g:1674:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1712: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);
@@ -16696,15 +16849,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1675:2: ({...}? =>id= ID -> VK_ACTION[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1675:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1713:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1713: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_key6066); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key6156); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16722,7 +16875,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1677:3: -> VK_ACTION[$id]
+            // 1715:3: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -16755,7 +16908,7 @@
     };
 
     // $ANTLR start reverse_key
-    // src/main/resources/org/drools/lang/DRL.g:1680:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1718: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);
@@ -16768,15 +16921,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1681:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1681:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1719:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1719: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_key6093); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key6183); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16794,7 +16947,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1683:3: -> VK_REVERSE[$id]
+            // 1721:3: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -16827,7 +16980,7 @@
     };
 
     // $ANTLR start result_key
-    // src/main/resources/org/drools/lang/DRL.g:1686:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // src/main/resources/org/drools/lang/DRL.g:1724: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);
@@ -16840,15 +16993,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // src/main/resources/org/drools/lang/DRL.g:1687:2: ({...}? =>id= ID -> VK_RESULT[$id] )
-            // src/main/resources/org/drools/lang/DRL.g:1687:4: {...}? =>id= ID
+            // src/main/resources/org/drools/lang/DRL.g:1725:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // src/main/resources/org/drools/lang/DRL.g:1725: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_key6120); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key6210); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -16866,7 +17019,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1689:3: -> VK_RESULT[$id]
+            // 1727:3: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -16895,11 +17048,11 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:819:5: ( LEFT_PAREN or_key )
-        // src/main/resources/org/drools/lang/DRL.g:819:6: LEFT_PAREN or_key
+        // src/main/resources/org/drools/lang/DRL.g:833:5: ( LEFT_PAREN or_key )
+        // src/main/resources/org/drools/lang/DRL.g:833:6: LEFT_PAREN or_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred12087); if (failed) return ;
-        pushFollow(FOLLOW_or_key_in_synpred12089);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred12092); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred12094);
         or_key();
         _fsp--;
         if (failed) return ;
@@ -16910,28 +17063,28 @@
 
     // $ANTLR start synpred2
     public final void synpred2_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:827:5: ( or_key | DOUBLE_PIPE )
-        int alt104=2;
-        int LA104_0 = input.LA(1);
+        // src/main/resources/org/drools/lang/DRL.g:841:5: ( or_key | DOUBLE_PIPE )
+        int alt106=2;
+        int LA106_0 = input.LA(1);
 
-        if ( (LA104_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-            alt104=1;
+        if ( (LA106_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+            alt106=1;
         }
-        else if ( (LA104_0==DOUBLE_PIPE) ) {
-            alt104=2;
+        else if ( (LA106_0==DOUBLE_PIPE) ) {
+            alt106=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("827:5: synpred2 : ( or_key | DOUBLE_PIPE );", 104, 0, input);
+                new NoViableAltException("841:5: synpred2 : ( or_key | DOUBLE_PIPE );", 106, 0, input);
 
             throw nvae;
         }
-        switch (alt104) {
+        switch (alt106) {
             case 1 :
-                // src/main/resources/org/drools/lang/DRL.g:827:6: or_key
+                // src/main/resources/org/drools/lang/DRL.g:841:6: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred22156);
+                pushFollow(FOLLOW_or_key_in_synpred22161);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -16939,9 +17092,9 @@
                 }
                 break;
             case 2 :
-                // src/main/resources/org/drools/lang/DRL.g:827:13: DOUBLE_PIPE
+                // src/main/resources/org/drools/lang/DRL.g:841:13: DOUBLE_PIPE
                 {
-                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred22158); if (failed) return ;
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred22163); if (failed) return ;
 
                 }
                 break;
@@ -16951,11 +17104,11 @@
 
     // $ANTLR start synpred3
     public final void synpred3_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:836:5: ( LEFT_PAREN and_key )
-        // src/main/resources/org/drools/lang/DRL.g:836:6: LEFT_PAREN and_key
+        // src/main/resources/org/drools/lang/DRL.g:850:5: ( LEFT_PAREN and_key )
+        // src/main/resources/org/drools/lang/DRL.g:850:6: LEFT_PAREN and_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred32215); if (failed) return ;
-        pushFollow(FOLLOW_and_key_in_synpred32217);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred32220); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred32222);
         and_key();
         _fsp--;
         if (failed) return ;
@@ -16966,28 +17119,28 @@
 
     // $ANTLR start synpred4
     public final void synpred4_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:844:5: ( and_key | DOUBLE_AMPER )
-        int alt105=2;
-        int LA105_0 = input.LA(1);
+        // src/main/resources/org/drools/lang/DRL.g:858:5: ( and_key | DOUBLE_AMPER )
+        int alt107=2;
+        int LA107_0 = input.LA(1);
 
-        if ( (LA105_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
-            alt105=1;
+        if ( (LA107_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
+            alt107=1;
         }
-        else if ( (LA105_0==DOUBLE_AMPER) ) {
-            alt105=2;
+        else if ( (LA107_0==DOUBLE_AMPER) ) {
+            alt107=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("844:5: synpred4 : ( and_key | DOUBLE_AMPER );", 105, 0, input);
+                new NoViableAltException("858:5: synpred4 : ( and_key | DOUBLE_AMPER );", 107, 0, input);
 
             throw nvae;
         }
-        switch (alt105) {
+        switch (alt107) {
             case 1 :
-                // src/main/resources/org/drools/lang/DRL.g:844:6: and_key
+                // src/main/resources/org/drools/lang/DRL.g:858:6: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred42285);
+                pushFollow(FOLLOW_and_key_in_synpred42290);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -16995,9 +17148,9 @@
                 }
                 break;
             case 2 :
-                // src/main/resources/org/drools/lang/DRL.g:844:14: DOUBLE_AMPER
+                // src/main/resources/org/drools/lang/DRL.g:858:14: DOUBLE_AMPER
                 {
-                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred42287); if (failed) return ;
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred42292); if (failed) return ;
 
                 }
                 break;
@@ -17007,10 +17160,10 @@
 
     // $ANTLR start synpred5
     public final void synpred5_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:861:4: ( SEMICOLON )
-        // src/main/resources/org/drools/lang/DRL.g:861:5: SEMICOLON
+        // src/main/resources/org/drools/lang/DRL.g:875:4: ( SEMICOLON )
+        // src/main/resources/org/drools/lang/DRL.g:875:5: SEMICOLON
         {
-        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred52410); if (failed) return ;
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred52415); if (failed) return ;
 
         }
     }
@@ -17018,27 +17171,27 @@
 
     // $ANTLR start synpred6
     public final void synpred6_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:867:12: ( LEFT_PAREN ( or_key | and_key ) )
-        // src/main/resources/org/drools/lang/DRL.g:867:13: LEFT_PAREN ( or_key | and_key )
+        // src/main/resources/org/drools/lang/DRL.g:881:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // src/main/resources/org/drools/lang/DRL.g:881:13: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred62447); if (failed) return ;
-        // src/main/resources/org/drools/lang/DRL.g:867:24: ( or_key | and_key )
-        int alt106=2;
-        int LA106_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred62452); if (failed) return ;
+        // src/main/resources/org/drools/lang/DRL.g:881:24: ( or_key | and_key )
+        int alt108=2;
+        int LA108_0 = input.LA(1);
 
-        if ( (LA106_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-            int LA106_1 = input.LA(2);
+        if ( (LA108_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+            int LA108_1 = input.LA(2);
 
             if ( ((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
-                alt106=1;
+                alt108=1;
             }
             else if ( ((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
-                alt106=2;
+                alt108=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("867:24: ( or_key | and_key )", 106, 1, input);
+                    new NoViableAltException("881:24: ( or_key | and_key )", 108, 1, input);
 
                 throw nvae;
             }
@@ -17046,15 +17199,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("867:24: ( or_key | and_key )", 106, 0, input);
+                new NoViableAltException("881:24: ( or_key | and_key )", 108, 0, input);
 
             throw nvae;
         }
-        switch (alt106) {
+        switch (alt108) {
             case 1 :
-                // src/main/resources/org/drools/lang/DRL.g:867:25: or_key
+                // src/main/resources/org/drools/lang/DRL.g:881:25: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred62450);
+                pushFollow(FOLLOW_or_key_in_synpred62455);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -17062,9 +17215,9 @@
                 }
                 break;
             case 2 :
-                // src/main/resources/org/drools/lang/DRL.g:867:32: and_key
+                // src/main/resources/org/drools/lang/DRL.g:881:32: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred62452);
+                pushFollow(FOLLOW_and_key_in_synpred62457);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -17081,27 +17234,27 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:883:5: ( LEFT_PAREN ( or_key | and_key ) )
-        // src/main/resources/org/drools/lang/DRL.g:883:6: LEFT_PAREN ( or_key | and_key )
+        // src/main/resources/org/drools/lang/DRL.g:897:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // src/main/resources/org/drools/lang/DRL.g:897:6: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred72575); if (failed) return ;
-        // src/main/resources/org/drools/lang/DRL.g:883:17: ( or_key | and_key )
-        int alt107=2;
-        int LA107_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred72580); if (failed) return ;
+        // src/main/resources/org/drools/lang/DRL.g:897:17: ( or_key | and_key )
+        int alt109=2;
+        int LA109_0 = input.LA(1);
 
-        if ( (LA107_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-            int LA107_1 = input.LA(2);
+        if ( (LA109_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+            int LA109_1 = input.LA(2);
 
             if ( ((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
-                alt107=1;
+                alt109=1;
             }
             else if ( ((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
-                alt107=2;
+                alt109=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("883:17: ( or_key | and_key )", 107, 1, input);
+                    new NoViableAltException("897:17: ( or_key | and_key )", 109, 1, input);
 
                 throw nvae;
             }
@@ -17109,15 +17262,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("883:17: ( or_key | and_key )", 107, 0, input);
+                new NoViableAltException("897:17: ( or_key | and_key )", 109, 0, input);
 
             throw nvae;
         }
-        switch (alt107) {
+        switch (alt109) {
             case 1 :
-                // src/main/resources/org/drools/lang/DRL.g:883:18: or_key
+                // src/main/resources/org/drools/lang/DRL.g:897:18: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred72578);
+                pushFollow(FOLLOW_or_key_in_synpred72583);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -17125,9 +17278,9 @@
                 }
                 break;
             case 2 :
-                // src/main/resources/org/drools/lang/DRL.g:883:25: and_key
+                // src/main/resources/org/drools/lang/DRL.g:897:25: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred72580);
+                pushFollow(FOLLOW_and_key_in_synpred72585);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -17144,20 +17297,20 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // src/main/resources/org/drools/lang/DRL.g:1052:5: ( LEFT_PAREN )
-        // src/main/resources/org/drools/lang/DRL.g:1052:6: LEFT_PAREN
+        // src/main/resources/org/drools/lang/DRL.g:1066:5: ( LEFT_PAREN )
+        // src/main/resources/org/drools/lang/DRL.g:1066:6: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred83409); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred83414); if (failed) return ;
 
         }
     }
     // $ANTLR end synpred8
 
-    public final boolean synpred5() {
+    public final boolean synpred4() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred5_fragment(); // can never throw exception
+            synpred4_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17167,11 +17320,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred6() {
+    public final boolean synpred7() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred6_fragment(); // can never throw exception
+            synpred7_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17181,11 +17334,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred7() {
+    public final boolean synpred2() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred7_fragment(); // can never throw exception
+            synpred2_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17195,11 +17348,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred8() {
+    public final boolean synpred3() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred8_fragment(); // can never throw exception
+            synpred3_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17223,11 +17376,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred2() {
+    public final boolean synpred5() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred2_fragment(); // can never throw exception
+            synpred5_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17237,11 +17390,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred3() {
+    public final boolean synpred6() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred3_fragment(); // can never throw exception
+            synpred6_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17251,11 +17404,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred4() {
+    public final boolean synpred8() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred4_fragment(); // can never throw exception
+            synpred8_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -17273,7 +17426,6 @@
     protected DFA54 dfa54 = new DFA54(this);
     protected DFA55 dfa55 = new DFA55(this);
     protected DFA66 dfa66 = new DFA66(this);
-    protected DFA69 dfa69 = new DFA69(this);
     protected DFA84 dfa84 = new DFA84(this);
     protected DFA85 dfa85 = new DFA85(this);
     static final String DFA12_eotS =
@@ -17281,9 +17433,9 @@
     static final String DFA12_eofS =
         "\16\uffff";
     static final String DFA12_minS =
-        "\2\124\1\uffff\1\124\1\uffff\2\124\2\164\2\124\1\131\1\164\1\124";
+        "\2\125\1\uffff\1\125\1\uffff\2\125\2\164\2\125\1\132\1\164\1\125";
     static final String DFA12_maxS =
-        "\1\131\1\133\1\uffff\1\163\1\uffff\1\163\1\124\2\164\3\163\1\164"+
+        "\1\132\1\134\1\uffff\1\163\1\uffff\1\163\1\125\2\164\3\163\1\164"+
         "\1\163";
     static final String DFA12_acceptS =
         "\2\uffff\1\2\1\uffff\1\1\11\uffff";
@@ -17293,17 +17445,17 @@
             "\1\2\2\uffff\1\2\1\uffff\1\1",
             "\1\3\4\uffff\1\2\1\uffff\1\4",
             "",
-            "\1\5\1\6\3\uffff\1\2\2\4\1\uffff\1\2\25\uffff\1\7",
+            "\1\5\1\6\3\uffff\1\2\2\4\1\uffff\1\2\24\uffff\1\7",
             "",
-            "\2\2\3\uffff\1\2\2\4\1\uffff\1\2\25\uffff\1\10",
+            "\2\2\3\uffff\1\2\2\4\1\uffff\1\2\24\uffff\1\10",
             "\1\11",
             "\1\12",
             "\1\13",
-            "\1\4\1\6\3\uffff\1\2\31\uffff\1\14",
-            "\1\4\4\uffff\1\2\2\4\27\uffff\1\7",
-            "\1\2\2\4\27\uffff\1\10",
+            "\1\4\1\6\3\uffff\1\2\30\uffff\1\14",
+            "\1\4\4\uffff\1\2\2\4\26\uffff\1\7",
+            "\1\2\2\4\26\uffff\1\10",
             "\1\15",
-            "\1\4\4\uffff\1\2\31\uffff\1\14"
+            "\1\4\4\uffff\1\2\30\uffff\1\14"
     };
 
     static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
@@ -17336,7 +17488,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "538:3: ( parameters )?";
+            return "552:3: ( parameters )?";
         }
     }
     static final String DFA17_eotS =
@@ -17344,20 +17496,20 @@
     static final String DFA17_eofS =
         "\6\uffff";
     static final String DFA17_minS =
-        "\2\124\1\164\2\uffff\1\124";
+        "\2\125\1\uffff\1\164\1\uffff\1\125";
     static final String DFA17_maxS =
-        "\1\124\1\163\1\164\2\uffff\1\163";
+        "\1\125\1\163\1\uffff\1\164\1\uffff\1\163";
     static final String DFA17_acceptS =
-        "\3\uffff\1\2\1\1\1\uffff";
+        "\2\uffff\1\1\1\uffff\1\2\1\uffff";
     static final String DFA17_specialS =
         "\6\uffff}>";
     static final String[] DFA17_transitionS = {
             "\1\1",
-            "\2\4\4\uffff\2\3\27\uffff\1\2",
+            "\2\2\4\uffff\2\4\26\uffff\1\3",
+            "",
             "\1\5",
             "",
-            "",
-            "\1\4\5\uffff\2\3\27\uffff\1\2"
+            "\1\2\5\uffff\2\4\26\uffff\1\3"
     };
 
     static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS);
@@ -17390,7 +17542,7 @@
             this.transition = DFA17_transition;
         }
         public String getDescription() {
-            return "564:4: ( data_type )?";
+            return "578:4: ( data_type )?";
         }
     }
     static final String DFA37_eotS =
@@ -17398,35 +17550,35 @@
     static final String DFA37_eofS =
         "\31\uffff";
     static final String DFA37_minS =
-        "\1\124\1\130\1\124\2\uffff\1\4\1\0\1\130\1\4\2\0\3\uffff\1\0\2"+
-        "\uffff\1\0\7\uffff";
+        "\1\125\1\131\1\125\1\uffff\1\0\1\4\1\uffff\1\131\2\uffff\1\4\2\0"+
+        "\1\uffff\1\0\2\uffff\1\0\7\uffff";
     static final String DFA37_maxS =
-        "\1\124\1\170\1\124\2\uffff\1\u0081\1\0\1\170\1\u0081\2\0\3\uffff"+
-        "\1\0\2\uffff\1\0\7\uffff";
+        "\1\125\1\170\1\125\1\uffff\1\0\1\u0083\1\uffff\1\170\2\uffff\1\u0083"+
+        "\2\0\1\uffff\1\0\2\uffff\1\0\7\uffff";
     static final String DFA37_acceptS =
-        "\3\uffff\1\14\1\11\6\uffff\1\1\1\4\1\13\1\uffff\1\2\1\6\1\uffff"+
-        "\1\1\1\3\1\5\1\7\1\10\1\12\1\1";
+        "\3\uffff\1\14\2\uffff\1\11\1\uffff\1\1\1\4\3\uffff\1\13\1\uffff"+
+        "\1\2\1\6\1\uffff\1\1\1\3\1\5\1\7\1\10\1\12\1\1";
     static final String DFA37_specialS =
-        "\1\7\1\4\1\12\2\uffff\1\3\1\1\1\0\1\11\1\10\1\5\3\uffff\1\6\2\uffff"+
-        "\1\2\7\uffff}>";
+        "\1\10\1\11\1\4\1\uffff\1\7\1\1\1\uffff\1\5\2\uffff\1\6\1\3\1\0\1"+
+        "\uffff\1\12\2\uffff\1\2\7\uffff}>";
     static final String[] DFA37_transitionS = {
             "\1\1",
-            "\1\3\1\5\6\uffff\1\4\1\6\26\uffff\1\2",
+            "\1\3\1\5\6\uffff\1\6\1\4\25\uffff\1\2",
             "\1\7",
             "",
-            "",
-            "\125\10\1\11\1\10\1\12\46\10",
             "\1\uffff",
-            "\1\16\37\uffff\1\15",
-            "\125\10\1\21\1\10\1\12\46\10",
-            "\1\uffff",
-            "\1\uffff",
+            "\126\12\1\13\1\12\1\14\47\12",
             "",
+            "\1\16\36\uffff\1\15",
             "",
             "",
+            "\126\12\1\21\1\12\1\14\47\12",
             "\1\uffff",
+            "\1\uffff",
             "",
+            "\1\uffff",
             "",
+            "",
             "\1\uffff",
             "",
             "",
@@ -17467,43 +17619,41 @@
             this.transition = DFA37_transition;
         }
         public String getDescription() {
-            return "685:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );";
+            return "699: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 int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA37_7 = input.LA(1);
+                        int LA37_12 = input.LA(1);
 
                          
-                        int index37_7 = input.index();
+                        int index37_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA37_7==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE)))) {s = 13;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 8;}
 
-                        else if ( (LA37_7==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 14;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {s = 6;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {s = 16;}
-
                          
-                        input.seek(index37_7);
+                        input.seek(index37_12);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA37_6 = input.LA(1);
+                        int LA37_5 = input.LA(1);
 
                          
-                        int index37_6 = input.index();
+                        int index37_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 11;}
+                        if ( ((LA37_5>=VT_COMPILATION_UNIT && LA37_5<=STRING)||LA37_5==COMMA||(LA37_5>=AT && LA37_5<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 10;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {s = 12;}
+                        else if ( (LA37_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 11;}
 
+                        else if ( (LA37_5==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 12;}
+
                          
-                        input.seek(index37_6);
+                        input.seek(index37_5);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
@@ -17515,142 +17665,144 @@
                         s = -1;
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 24;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {s = 4;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {s = 6;}
 
                          
                         input.seek(index37_17);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA37_5 = input.LA(1);
+                        int LA37_11 = input.LA(1);
 
                          
-                        int index37_5 = input.index();
+                        int index37_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA37_5>=VT_COMPILATION_UNIT && LA37_5<=STRING)||LA37_5==COMMA||(LA37_5>=AT && LA37_5<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 8;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 18;}
 
-                        else if ( (LA37_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 9;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {s = 6;}
 
-                        else if ( (LA37_5==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 10;}
-
                          
-                        input.seek(index37_5);
+                        input.seek(index37_11);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA37_1 = input.LA(1);
+                        int LA37_2 = input.LA(1);
 
                          
-                        int index37_1 = input.index();
+                        int index37_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA37_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 2;}
+                        if ( (LA37_2==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(!
 2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 7;}
 
-                        else if ( (LA37_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 3;}
-
-                        else if ( (LA37_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 4;}
-
-                        else if ( (LA37_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 5;}
-
-                        else if ( (LA37_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 6;}
-
                          
-                        input.seek(index37_1);
+                        input.seek(index37_2);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA37_10 = input.LA(1);
+                        int LA37_7 = input.LA(1);
 
                          
-                        int index37_10 = input.index();
+                        int index37_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 11;}
+                        if ( (LA37_7==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE)))) {s = 13;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {s = 4;}
+                        else if ( (LA37_7==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 14;}
 
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {s = 16;}
+
                          
-                        input.seek(index37_10);
+                        input.seek(index37_7);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA37_14 = input.LA(1);
+                        int LA37_10 = input.LA(1);
 
                          
-                        int index37_14 = input.index();
+                        int index37_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {s = 19;}
+                        if ( (LA37_10==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 12;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {s = 20;}
+                        else if ( ((LA37_10>=VT_COMPILATION_UNIT && LA37_10<=STRING)||LA37_10==COMMA||(LA37_10>=AT && LA37_10<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 10;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {s = 21;}
+                        else if ( (LA37_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 17;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {s = 22;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {s = 23;}
-
                          
-                        input.seek(index37_14);
+                        input.seek(index37_10);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA37_0 = input.LA(1);
+                        int LA37_4 = input.LA(1);
 
                          
-                        int index37_0 = input.index();
+                        int index37_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA37_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(Dro!
 olsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 1;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 8;}
 
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {s = 9;}
+
                          
-                        input.seek(index37_0);
+                        input.seek(index37_4);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA37_9 = input.LA(1);
+                        int LA37_0 = input.LA(1);
 
                          
-                        int index37_9 = input.index();
+                        int index37_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 18;}
+                        if ( (LA37_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifi!
 erKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 1;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {s = 4;}
-
                          
-                        input.seek(index37_9);
+                        input.seek(index37_0);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA37_8 = input.LA(1);
+                        int LA37_1 = input.LA(1);
 
                          
-                        int index37_8 = input.index();
+                        int index37_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA37_8==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 10;}
+                        if ( (LA37_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 2;}
 
-                        else if ( ((LA37_8>=VT_COMPILATION_UNIT && LA37_8<=STRING)||LA37_8==COMMA||(LA37_8>=AT && LA37_8<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 8;}
+                        else if ( (LA37_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 3;}
 
-                        else if ( (LA37_8==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 17;}
+                        else if ( (LA37_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 4;}
 
+                        else if ( (LA37_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))))) {s = 5;}
+
+                        else if ( (LA37_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 6;}
+
                          
-                        input.seek(index37_8);
+                        input.seek(index37_1);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA37_2 = input.LA(1);
+                        int LA37_14 = input.LA(1);
 
                          
-                        int index37_2 = input.index();
+                        int index37_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA37_2==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validate!
 LT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))))) {s = 7;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {s = 19;}
 
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {s = 20;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {s = 21;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {s = 22;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {s = 23;}
+
                          
-                        input.seek(index37_2);
+                        input.seek(index37_14);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -17662,31 +17814,31 @@
         }
     }
     static final String DFA54_eotS =
-        "\u0082\uffff";
+        "\174\uffff";
     static final String DFA54_eofS =
-        "\u0082\uffff";
+        "\174\uffff";
     static final String DFA54_minS =
-        "\3\124\2\0\2\124\1\164\1\0\3\uffff\1\125\1\124\1\125\1\131\1\uffff"+
-        "\1\124\1\164\1\124\1\125\1\124\1\125\1\131\1\124\2\0\1\124\1\164"+
-        "\2\124\2\0\1\124\1\0\1\4\11\124\2\uffff\1\125\1\131\1\124\1\0\2"+
-        "\124\1\4\11\124\1\0\1\uffff\1\124\1\uffff\1\4\32\0\1\uffff\23\0"+
-        "\1\uffff\17\0";
+        "\3\125\2\0\2\125\1\164\1\0\3\uffff\1\126\1\125\1\126\1\132\1\uffff"+
+        "\1\125\1\164\1\125\1\126\1\125\1\126\1\132\1\125\2\0\1\125\1\164"+
+        "\2\125\2\0\1\125\1\0\1\4\10\125\2\uffff\1\126\1\132\1\125\1\0\2"+
+        "\125\1\0\1\4\10\125\1\uffff\1\125\1\uffff\1\4\30\0\1\uffff\4\0\1"+
+        "\uffff\34\0";
     static final String DFA54_maxS =
-        "\2\131\1\163\2\0\1\131\1\124\1\164\1\0\3\uffff\1\163\1\124\2\163"+
-        "\1\uffff\1\124\1\164\1\133\1\163\1\133\3\163\2\0\1\124\1\164\1\133"+
-        "\1\163\2\0\1\124\1\0\1\u0081\1\124\7\162\1\124\2\uffff\3\163\1\0"+
-        "\1\142\1\124\1\u0081\1\124\7\162\1\124\1\0\1\uffff\1\163\1\uffff"+
-        "\1\u0081\32\0\1\uffff\23\0\1\uffff\17\0";
+        "\2\132\1\163\2\0\1\132\1\125\1\164\1\0\3\uffff\1\163\1\125\2\163"+
+        "\1\uffff\1\125\1\164\1\134\1\163\1\134\3\163\2\0\1\125\1\164\1\134"+
+        "\1\163\2\0\1\125\1\0\1\u0083\1\125\1\163\6\162\2\uffff\3\163\1\0"+
+        "\1\143\1\125\1\0\1\u0083\1\125\1\163\6\162\1\uffff\1\163\1\uffff"+
+        "\1\u0083\30\0\1\uffff\4\0\1\uffff\34\0";
     static final String DFA54_acceptS =
-        "\11\uffff\1\1\2\2\4\uffff\1\3\34\uffff\2\3\21\uffff\1\3\1\uffff"+
-        "\1\3\33\uffff\1\3\23\uffff\1\3\17\uffff";
+        "\11\uffff\1\1\2\2\4\uffff\1\3\33\uffff\2\3\20\uffff\1\3\1\uffff"+
+        "\1\3\31\uffff\1\3\4\uffff\1\3\34\uffff";
     static final String DFA54_specialS =
-        "\2\uffff\1\2\1\12\1\11\3\uffff\1\10\20\uffff\1\7\1\3\4\uffff\1"+
-        "\6\1\4\1\uffff\1\0\17\uffff\1\5\14\uffff\1\1\102\uffff}>";
+        "\2\uffff\1\12\1\6\1\5\3\uffff\1\4\20\uffff\1\7\1\0\4\uffff\1\3\1"+
+        "\11\1\uffff\1\1\16\uffff\1\10\2\uffff\1\2\107\uffff}>";
     static final String[] DFA54_transitionS = {
             "\1\2\4\uffff\1\1",
             "\1\3\4\uffff\1\4",
-            "\1\11\1\6\3\uffff\1\10\3\uffff\1\5\25\uffff\1\7",
+            "\1\11\1\6\3\uffff\1\10\3\uffff\1\5\24\uffff\1\7",
             "\1\uffff",
             "\1\uffff",
             "\1\14\4\uffff\1\15",
@@ -17696,81 +17848,78 @@
             "",
             "",
             "",
-            "\1\21\3\uffff\1\23\31\uffff\1\22",
+            "\1\21\3\uffff\1\23\30\uffff\1\22",
             "\1\24",
-            "\1\6\3\uffff\1\25\31\uffff\1\7",
-            "\1\25\31\uffff\1\7",
+            "\1\6\3\uffff\1\25\30\uffff\1\7",
+            "\1\25\30\uffff\1\7",
             "",
             "\1\26",
             "\1\27",
             "\1\30\4\uffff\1\31\1\uffff\1\32",
-            "\1\33\3\uffff\1\35\31\uffff\1\34",
+            "\1\33\3\uffff\1\35\30\uffff\1\34",
             "\1\36\4\uffff\1\37\1\uffff\1\40",
-            "\1\21\3\uffff\1\23\31\uffff\1\22",
-            "\1\23\31\uffff\1\22",
-            "\1\45\1\44\3\uffff\1\42\3\uffff\1\41\14\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\30\uffff\1\22",
+            "\1\23\30\uffff\1\22",
+            "\1\45\1\44\3\uffff\1\42\3\uffff\1\41\14\uffff\1\46\1\47\1\50"+
+            "\1\51\1\52\1\53\2\uffff\1\43",
             "\1\uffff",
             "\1\uffff",
+            "\1\56",
             "\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\14\uffff\1\70\1\71\1"+
-            "\72\1\73\1\74\1\75\1\76\2\uffff\1\65",
+            "\1\60\4\uffff\1\61\1\uffff\1\62",
+            "\1\67\1\66\3\uffff\1\64\3\uffff\1\63\14\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\2\uffff\1\65",
             "\1\uffff",
             "\1\uffff",
-            "\1\101",
+            "\1\77",
             "\1\uffff",
-            "\157\103\1\104\1\105\15\103",
-            "\1\106",
-            "\1\107\3\uffff\1\110\1\115\6\uffff\1\113\1\111\16\uffff\1"+
-            "\116\1\112\1\114",
-            "\1\117\3\uffff\1\110\1\120\6\uffff\1\113\1\111\17\uffff\1"+
-            "\112\1\114",
-            "\1\117\3\uffff\1\110\1\120\6\uffff\1\113\1\111\17\uffff\1"+
-            "\112\1\114",
-            "\1\117\3\uffff\1\110\1\120\6\uffff\1\113\1\111\17\uffff\1"+
-            "\112\1\114",
-            "\1\117\3\uffff\1\110\1\120\6\uffff\1\113\1\111\17\uffff\1"+
-            "\112\1\114",
-            "\1\117\3\uffff\1\110\1\120\6\uffff\1\113\1\111\17\uffff\1"+
-            "\112\1\114",
-            "\1\117\3\uffff\1\110\1\120\6\uffff\1\113\1\111\17\uffff\1"+
-            "\112\1\114",
-            "\1\121",
+            "\157\101\1\102\1\103\17\101",
+            "\1\104",
+            "\1\106\3\uffff\1\107\1\114\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113\1\105",
+            "\1\115\3\uffff\1\107\1\116\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113",
+            "\1\115\3\uffff\1\107\1\116\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113",
+            "\1\115\3\uffff\1\107\1\116\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113",
+            "\1\115\3\uffff\1\107\1\116\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113",
+            "\1\115\3\uffff\1\107\1\116\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113",
+            "\1\115\3\uffff\1\107\1\116\6\uffff\1\112\1\110\16\uffff\1\111"+
+            "\1\113",
             "",
             "",
-            "\1\33\3\uffff\1\35\31\uffff\1\34",
-            "\1\35\31\uffff\1\34",
-            "\1\125\1\124\3\uffff\1\135\3\uffff\1\122\14\uffff\1\126\1"+
-            "\127\1\130\1\131\1\132\1\133\1\134\2\uffff\1\123",
+            "\1\33\3\uffff\1\35\30\uffff\1\34",
+            "\1\35\30\uffff\1\34",
+            "\1\122\1\121\3\uffff\1\131\3\uffff\1\117\14\uffff\1\123\1\124"+
+            "\1\125\1\126\1\127\1\130\2\uffff\1\120",
             "\1\uffff",
-            "\1\137\6\uffff\1\141\6\uffff\1\140",
-            "\1\142",
-            "\157\143\1\144\1\145\15\143",
-            "\1\146",
-            "\1\147\3\uffff\1\150\1\155\6\uffff\1\153\1\151\16\uffff\1"+
-            "\156\1\152\1\154",
-            "\1\157\3\uffff\1\150\1\160\6\uffff\1\153\1\151\17\uffff\1"+
-            "\152\1\154",
-            "\1\157\3\uffff\1\150\1\160\6\uffff\1\153\1\151\17\uffff\1"+
-            "\152\1\154",
-            "\1\157\3\uffff\1\150\1\160\6\uffff\1\153\1\151\17\uffff\1"+
-            "\152\1\154",
-            "\1\157\3\uffff\1\150\1\160\6\uffff\1\153\1\151\17\uffff\1"+
-            "\152\1\154",
-            "\1\157\3\uffff\1\150\1\160\6\uffff\1\153\1\151\17\uffff\1"+
-            "\152\1\154",
-            "\1\157\3\uffff\1\150\1\160\6\uffff\1\153\1\151\17\uffff\1"+
-            "\152\1\154",
-            "\1\161",
+            "\1\133\6\uffff\1\135\6\uffff\1\134",
+            "\1\136",
             "\1\uffff",
+            "\157\140\1\141\1\142\17\140",
+            "\1\143",
+            "\1\145\3\uffff\1\146\1\144\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152\1\153",
+            "\1\154\3\uffff\1\146\1\155\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152",
+            "\1\154\3\uffff\1\146\1\155\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152",
+            "\1\154\3\uffff\1\146\1\155\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152",
+            "\1\154\3\uffff\1\146\1\155\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152",
+            "\1\154\3\uffff\1\146\1\155\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152",
+            "\1\154\3\uffff\1\146\1\155\6\uffff\1\151\1\147\16\uffff\1\150"+
+            "\1\152",
             "",
-            "\1\165\1\164\3\uffff\1\175\1\u0081\1\32\6\uffff\1\u0080\1"+
-            "\177\5\uffff\1\176\1\166\1\167\1\170\1\171\1\172\1\173\1\174"+
-            "\2\uffff\1\163",
+            "\1\160\1\157\3\uffff\1\167\1\173\1\32\6\uffff\1\172\1\171\5"+
+            "\uffff\1\170\1\161\1\162\1\163\1\164\1\165\1\166\2\uffff\1\156",
             "",
-            "\157\103\1\104\1\105\15\103",
+            "\157\101\1\102\1\103\17\101",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17795,13 +17944,12 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17817,7 +17965,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17830,8 +17977,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "\1\uffff"
     };
 
@@ -17865,120 +18010,114 @@
             this.transition = DFA54_transition;
         }
         public String getDescription() {
-            return "867:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "881: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 LA54_34 = input.LA(1);
+                        int LA54_26 = input.LA(1);
 
                          
-                        int index54_34 = input.index();
+                        int index54_26 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 66;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index54_34);
+                        input.seek(index54_26);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA54_63 = input.LA(1);
+                        int LA54_34 = input.LA(1);
 
                          
-                        int index54_63 = input.index();
+                        int index54_34 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 114;}
+                        else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index54_63);
+                        input.seek(index54_34);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA54_2 = input.LA(1);
+                        int LA54_52 = input.LA(1);
 
                          
-                        int index54_2 = input.index();
+                        int index54_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA54_2==COLON) ) {s = 5;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (LA54_2==DOT) ) {s = 6;}
+                        else if ( (true) ) {s = 95;}
 
-                        else if ( (LA54_2==LEFT_SQUARE) ) {s = 7;}
-
-                        else if ( (LA54_2==LEFT_PAREN) ) {s = 8;}
-
-                        else if ( (LA54_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||((synpred6()&&validateNotWithBinding())&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred!
 6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))))) {s = 9;}
-
                          
-                        input.seek(index54_2);
+                        input.seek(index54_52);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA54_26 = input.LA(1);
+                        int LA54_31 = input.LA(1);
 
                          
-                        int index54_26 = input.index();
+                        int index54_31 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 62;}
 
                          
-                        input.seek(index54_26);
+                        input.seek(index54_31);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA54_32 = input.LA(1);
+                        int LA54_8 = input.LA(1);
 
                          
-                        int index54_32 = input.index();
+                        int index54_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL))))) ) {s = 9;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 16;}
 
                          
-                        input.seek(index54_32);
+                        input.seek(index54_8);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA54_50 = input.LA(1);
+                        int LA54_4 = input.LA(1);
 
                          
-                        int index54_50 = input.index();
+                        int index54_4 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 94;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index54_50);
+                        input.seek(index54_4);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA54_31 = input.LA(1);
+                        int LA54_3 = input.LA(1);
 
                          
-                        int index54_31 = input.index();
+                        int index54_3 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index54_31);
+                        input.seek(index54_3);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
@@ -17990,55 +18129,61 @@
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 44;}
 
                          
                         input.seek(index54_25);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA54_8 = input.LA(1);
+                        int LA54_49 = input.LA(1);
 
                          
-                        int index54_8 = input.index();
+                        int index54_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 16;}
+                        else if ( (true) ) {s = 90;}
 
                          
-                        input.seek(index54_8);
+                        input.seek(index54_49);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA54_4 = input.LA(1);
+                        int LA54_32 = input.LA(1);
 
                          
-                        int index54_4 = input.index();
+                        int index54_32 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index54_4);
+                        input.seek(index54_32);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA54_3 = input.LA(1);
+                        int LA54_2 = input.LA(1);
 
                          
-                        int index54_3 = input.index();
+                        int index54_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (LA54_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (LA54_2==DOT) ) {s = 6;}
 
+                        else if ( (LA54_2==LEFT_SQUARE) ) {s = 7;}
+
+                        else if ( (LA54_2==LEFT_PAREN) ) {s = 8;}
+
+                        else if ( (LA54_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.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdent!
 ifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||((synpred6()&&validateNotWithBinding())&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 9;}
+
                          
-                        input.seek(index54_3);
+                        input.seek(index54_2);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18050,114 +18195,111 @@
         }
     }
     static final String DFA55_eotS =
-        "\u0082\uffff";
+        "\174\uffff";
     static final String DFA55_eofS =
-        "\u0082\uffff";
+        "\174\uffff";
     static final String DFA55_minS =
-        "\3\124\2\0\1\124\1\uffff\1\124\1\164\1\0\2\uffff\1\125\1\124\1"+
-        "\125\1\131\1\uffff\1\124\1\164\1\124\1\125\1\124\1\125\1\131\1\124"+
-        "\2\0\1\124\1\164\2\124\2\0\1\124\1\4\11\124\1\0\2\uffff\1\125\1"+
-        "\131\1\124\1\0\2\124\1\0\1\4\11\124\1\uffff\1\124\1\4\16\0\1\uffff"+
-        "\14\0\1\uffff\4\0\1\uffff\36\0";
+        "\3\125\2\0\1\125\1\0\1\uffff\1\125\1\164\2\uffff\1\126\1\125\1\uffff"+
+        "\1\126\1\132\1\125\1\164\1\125\1\126\1\125\1\126\1\132\1\125\2\0"+
+        "\1\125\1\164\2\125\2\0\1\125\1\4\10\125\1\0\2\uffff\1\126\1\132"+
+        "\1\125\1\0\2\125\1\0\1\4\10\125\1\uffff\1\125\1\4\15\0\1\uffff\13"+
+        "\0\1\uffff\4\0\1\uffff\34\0";
     static final String DFA55_maxS =
-        "\2\131\1\163\2\0\1\131\1\uffff\1\124\1\164\1\0\2\uffff\1\163\1"+
-        "\124\2\163\1\uffff\1\124\1\164\1\133\1\163\1\133\3\163\2\0\1\124"+
-        "\1\164\1\133\1\163\2\0\1\124\1\u0081\1\124\7\162\1\124\1\0\2\uffff"+
-        "\3\163\1\0\1\142\1\124\1\0\1\u0081\1\124\7\162\1\124\1\uffff\1\163"+
-        "\1\u0081\16\0\1\uffff\14\0\1\uffff\4\0\1\uffff\36\0";
+        "\2\132\1\163\2\0\1\132\1\0\1\uffff\1\125\1\164\2\uffff\1\163\1\125"+
+        "\1\uffff\2\163\1\125\1\164\1\134\1\163\1\134\3\163\2\0\1\125\1\164"+
+        "\1\134\1\163\2\0\1\125\1\u0083\1\125\1\163\6\162\1\0\2\uffff\3\163"+
+        "\1\0\1\143\1\125\1\0\1\u0083\1\125\1\163\6\162\1\uffff\1\163\1\u0083"+
+        "\15\0\1\uffff\13\0\1\uffff\4\0\1\uffff\34\0";
     static final String DFA55_acceptS =
-        "\6\uffff\1\1\3\uffff\2\2\4\uffff\1\3\34\uffff\2\3\21\uffff\1\3"+
-        "\20\uffff\1\3\14\uffff\1\3\4\uffff\1\3\36\uffff";
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\17"+
+        "\uffff\1\3\13\uffff\1\3\4\uffff\1\3\34\uffff";
     static final String DFA55_specialS =
-        "\2\uffff\1\2\1\11\1\4\4\uffff\1\12\17\uffff\1\6\1\0\4\uffff\1\5"+
-        "\1\3\13\uffff\1\1\5\uffff\1\7\2\uffff\1\10\114\uffff}>";
+        "\2\uffff\1\11\1\0\1\12\1\uffff\1\2\22\uffff\1\7\1\5\4\uffff\1\6"+
+        "\1\4\12\uffff\1\10\5\uffff\1\3\2\uffff\1\1\107\uffff}>";
     static final String[] DFA55_transitionS = {
             "\1\2\4\uffff\1\1",
-            "\1\4\4\uffff\1\3",
-            "\1\6\1\7\3\uffff\1\11\3\uffff\1\5\25\uffff\1\10",
+            "\1\3\4\uffff\1\4",
+            "\1\7\1\10\3\uffff\1\6\3\uffff\1\5\24\uffff\1\11",
             "\1\uffff",
             "\1\uffff",
             "\1\14\4\uffff\1\15",
+            "\1\uffff",
             "",
-            "\1\16",
             "\1\17",
-            "\1\uffff",
+            "\1\20",
             "",
             "",
-            "\1\21\3\uffff\1\23\31\uffff\1\22",
+            "\1\21\3\uffff\1\23\30\uffff\1\22",
             "\1\24",
-            "\1\7\3\uffff\1\25\31\uffff\1\10",
-            "\1\25\31\uffff\1\10",
             "",
+            "\1\10\3\uffff\1\25\30\uffff\1\11",
+            "\1\25\30\uffff\1\11",
             "\1\26",
             "\1\27",
             "\1\30\4\uffff\1\31\1\uffff\1\32",
-            "\1\33\3\uffff\1\35\31\uffff\1\34",
+            "\1\33\3\uffff\1\35\30\uffff\1\34",
             "\1\36\4\uffff\1\37\1\uffff\1\40",
-            "\1\21\3\uffff\1\23\31\uffff\1\22",
-            "\1\23\31\uffff\1\22",
-            "\1\44\1\43\3\uffff\1\54\3\uffff\1\41\14\uffff\1\45\1\46\1"+
-            "\47\1\50\1\51\1\52\1\53\2\uffff\1\42",
+            "\1\21\3\uffff\1\23\30\uffff\1\22",
+            "\1\23\30\uffff\1\22",
+            "\1\44\1\43\3\uffff\1\53\3\uffff\1\41\14\uffff\1\45\1\46\1\47"+
+            "\1\50\1\51\1\52\2\uffff\1\42",
             "\1\uffff",
             "\1\uffff",
+            "\1\56",
             "\1\57",
-            "\1\60",
-            "\1\61\4\uffff\1\62\1\uffff\1\63",
-            "\1\70\1\67\3\uffff\1\65\3\uffff\1\64\14\uffff\1\71\1\72\1"+
-            "\73\1\74\1\75\1\76\1\77\2\uffff\1\66",
+            "\1\60\4\uffff\1\61\1\uffff\1\62",
+            "\1\67\1\66\3\uffff\1\64\3\uffff\1\63\14\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\2\uffff\1\65",
             "\1\uffff",
             "\1\uffff",
-            "\1\101",
-            "\157\102\1\103\1\104\15\102",
-            "\1\105",
-            "\1\106\3\uffff\1\107\1\114\6\uffff\1\112\1\110\16\uffff\1"+
-            "\115\1\111\1\113",
-            "\1\116\3\uffff\1\107\1\117\6\uffff\1\112\1\110\17\uffff\1"+
-            "\111\1\113",
-            "\1\116\3\uffff\1\107\1\117\6\uffff\1\112\1\110\17\uffff\1"+
-            "\111\1\113",
-            "\1\116\3\uffff\1\107\1\117\6\uffff\1\112\1\110\17\uffff\1"+
-            "\111\1\113",
-            "\1\116\3\uffff\1\107\1\117\6\uffff\1\112\1\110\17\uffff\1"+
-            "\111\1\113",
-            "\1\116\3\uffff\1\107\1\117\6\uffff\1\112\1\110\17\uffff\1"+
-            "\111\1\113",
-            "\1\116\3\uffff\1\107\1\117\6\uffff\1\112\1\110\17\uffff\1"+
-            "\111\1\113",
-            "\1\120",
+            "\1\77",
+            "\157\100\1\101\1\102\17\100",
+            "\1\103",
+            "\1\104\3\uffff\1\105\1\112\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111\1\113",
+            "\1\114\3\uffff\1\105\1\115\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111",
+            "\1\114\3\uffff\1\105\1\115\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111",
+            "\1\114\3\uffff\1\105\1\115\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111",
+            "\1\114\3\uffff\1\105\1\115\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111",
+            "\1\114\3\uffff\1\105\1\115\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111",
+            "\1\114\3\uffff\1\105\1\115\6\uffff\1\110\1\106\16\uffff\1\107"+
+            "\1\111",
             "\1\uffff",
             "",
             "",
-            "\1\33\3\uffff\1\35\31\uffff\1\34",
-            "\1\35\31\uffff\1\34",
-            "\1\126\1\125\3\uffff\1\123\3\uffff\1\122\14\uffff\1\127\1"+
-            "\130\1\131\1\132\1\133\1\134\1\135\2\uffff\1\124",
+            "\1\33\3\uffff\1\35\30\uffff\1\34",
+            "\1\35\30\uffff\1\34",
+            "\1\123\1\122\3\uffff\1\120\3\uffff\1\117\14\uffff\1\124\1\125"+
+            "\1\126\1\127\1\130\1\131\2\uffff\1\121",
             "\1\uffff",
-            "\1\137\6\uffff\1\141\6\uffff\1\140",
-            "\1\142",
+            "\1\133\6\uffff\1\135\6\uffff\1\134",
+            "\1\136",
             "\1\uffff",
-            "\157\144\1\145\1\146\15\144",
-            "\1\147",
-            "\1\150\3\uffff\1\151\1\156\6\uffff\1\154\1\152\16\uffff\1"+
-            "\157\1\153\1\155",
-            "\1\160\3\uffff\1\151\1\161\6\uffff\1\154\1\152\17\uffff\1"+
-            "\153\1\155",
-            "\1\160\3\uffff\1\151\1\161\6\uffff\1\154\1\152\17\uffff\1"+
-            "\153\1\155",
-            "\1\160\3\uffff\1\151\1\161\6\uffff\1\154\1\152\17\uffff\1"+
-            "\153\1\155",
-            "\1\160\3\uffff\1\151\1\161\6\uffff\1\154\1\152\17\uffff\1"+
-            "\153\1\155",
-            "\1\160\3\uffff\1\151\1\161\6\uffff\1\154\1\152\17\uffff\1"+
-            "\153\1\155",
-            "\1\160\3\uffff\1\151\1\161\6\uffff\1\154\1\152\17\uffff\1"+
-            "\153\1\155",
-            "\1\162",
+            "\157\140\1\141\1\142\17\140",
+            "\1\143",
+            "\1\144\3\uffff\1\145\1\152\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151\1\153",
+            "\1\154\3\uffff\1\145\1\155\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151",
+            "\1\154\3\uffff\1\145\1\155\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151",
+            "\1\154\3\uffff\1\145\1\155\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151",
+            "\1\154\3\uffff\1\145\1\155\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151",
+            "\1\154\3\uffff\1\145\1\155\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151",
+            "\1\154\3\uffff\1\145\1\155\6\uffff\1\150\1\146\16\uffff\1\147"+
+            "\1\151",
             "",
-            "\1\165\1\164\3\uffff\1\175\1\u0081\1\32\6\uffff\1\u0080\1"+
-            "\177\5\uffff\1\176\1\166\1\167\1\170\1\171\1\172\1\173\1\174"+
-            "\2\uffff\1\163",
-            "\157\102\1\103\1\104\15\102",
+            "\1\160\1\157\3\uffff\1\167\1\173\1\32\6\uffff\1\172\1\171\5"+
+            "\uffff\1\170\1\161\1\162\1\163\1\164\1\165\1\166\2\uffff\1\156",
+            "\157\100\1\101\1\102\17\100",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18171,7 +18313,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
             "",
             "\1\uffff",
             "\1\uffff",
@@ -18184,7 +18325,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
             "",
             "\1\uffff",
             "\1\uffff",
@@ -18218,8 +18358,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "\1\uffff"
     };
 
@@ -18253,180 +18391,180 @@
             this.transition = DFA55_transition;
         }
         public String getDescription() {
-            return "883:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "897: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 LA55_26 = input.LA(1);
+                        int LA55_3 = input.LA(1);
 
                          
-                        int index55_26 = input.index();
+                        int index55_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index55_26);
+                        input.seek(index55_3);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA55_44 = input.LA(1);
+                        int LA55_52 = input.LA(1);
 
                          
-                        int index55_44 = input.index();
+                        int index55_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 81;}
+                        else if ( (true) ) {s = 95;}
 
                          
-                        input.seek(index55_44);
+                        input.seek(index55_52);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA55_2 = input.LA(1);
+                        int LA55_6 = input.LA(1);
 
                          
-                        int index55_2 = input.index();
+                        int index55_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA55_2==COLON) ) {s = 5;}
+                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 7;}
 
-                        else if ( (LA55_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(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.NOT)))||((synpred7()&&validateNotWithBinding())&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred!
 7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 6;}
+                        else if ( (true) ) {s = 14;}
 
-                        else if ( (LA55_2==DOT) ) {s = 7;}
-
-                        else if ( (LA55_2==LEFT_SQUARE) ) {s = 8;}
-
-                        else if ( (LA55_2==LEFT_PAREN) ) {s = 9;}
-
                          
-                        input.seek(index55_2);
+                        input.seek(index55_6);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA55_32 = input.LA(1);
+                        int LA55_49 = input.LA(1);
 
                          
-                        int index55_32 = input.index();
+                        int index55_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 90;}
 
                          
-                        input.seek(index55_32);
+                        input.seek(index55_49);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA55_4 = input.LA(1);
+                        int LA55_32 = input.LA(1);
 
                          
-                        int index55_4 = input.index();
+                        int index55_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index55_4);
+                        input.seek(index55_32);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA55_31 = input.LA(1);
+                        int LA55_26 = input.LA(1);
 
                          
-                        int index55_31 = input.index();
+                        int index55_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index55_31);
+                        input.seek(index55_26);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA55_25 = input.LA(1);
+                        int LA55_31 = input.LA(1);
 
                          
-                        int index55_25 = input.index();
+                        int index55_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 62;}
 
                          
-                        input.seek(index55_25);
+                        input.seek(index55_31);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA55_50 = input.LA(1);
+                        int LA55_25 = input.LA(1);
 
                          
-                        int index55_50 = input.index();
+                        int index55_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 94;}
+                        else if ( (true) ) {s = 44;}
 
                          
-                        input.seek(index55_50);
+                        input.seek(index55_25);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA55_53 = input.LA(1);
+                        int LA55_43 = input.LA(1);
 
                          
-                        int index55_53 = input.index();
+                        int index55_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 99;}
+                        else if ( (true) ) {s = 78;}
 
                          
-                        input.seek(index55_53);
+                        input.seek(index55_43);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA55_3 = input.LA(1);
+                        int LA55_2 = input.LA(1);
 
                          
-                        int index55_3 = input.index();
+                        int index55_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 6;}
+                        if ( (LA55_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (LA55_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA55_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(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.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(!
 DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||((synpred7()&&validateNotWithBinding())&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
+
+                        else if ( (LA55_2==DOT) ) {s = 8;}
+
+                        else if ( (LA55_2==LEFT_SQUARE) ) {s = 9;}
+
                          
-                        input.seek(index55_3);
+                        input.seek(index55_2);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA55_9 = input.LA(1);
+                        int LA55_4 = input.LA(1);
 
                          
-                        int index55_9 = input.index();
+                        int index55_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) ) {s = 6;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 16;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index55_9);
+                        input.seek(index55_4);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18442,20 +18580,20 @@
     static final String DFA66_eofS =
         "\13\uffff";
     static final String DFA66_minS =
-        "\1\124\1\131\2\4\1\0\1\124\1\0\4\uffff";
+        "\1\125\1\132\2\4\1\0\1\125\1\0\4\uffff";
     static final String DFA66_maxS =
-        "\1\124\1\131\2\u0081\1\0\1\133\1\0\4\uffff";
+        "\1\125\1\132\2\u0083\1\0\1\134\1\0\4\uffff";
     static final String DFA66_acceptS =
-        "\7\uffff\1\1\1\2\1\1\1\2";
+        "\7\uffff\1\1\2\2\1\1";
     static final String DFA66_specialS =
-        "\1\2\1\6\1\5\1\3\1\4\1\0\1\1\4\uffff}>";
+        "\1\1\1\3\1\6\1\4\1\5\1\0\1\2\4\uffff}>";
     static final String[] DFA66_transitionS = {
             "\1\1",
             "\1\2",
-            "\125\3\1\4\1\3\1\5\46\3",
-            "\125\3\1\6\1\3\1\5\46\3",
+            "\126\3\1\4\1\3\1\5\47\3",
+            "\126\3\1\6\1\3\1\5\47\3",
             "\1\uffff",
-            "\1\11\5\uffff\1\11\1\12",
+            "\1\12\5\uffff\1\12\1\11",
             "\1\uffff",
             "",
             "",
@@ -18493,7 +18631,7 @@
             this.transition = DFA66_transition;
         }
         public String getDescription() {
-            return "977:2: ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )?";
+            return "991:2: ( reverse_key pc3= accumulate_paren_chunk[Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE] (cm3= COMMA )? )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -18505,43 +18643,56 @@
                         int index66_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA66_5==ID||LA66_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 9;}
+                        if ( (LA66_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 9;}
 
-                        else if ( (LA66_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 10;}
+                        else if ( (LA66_5==ID||LA66_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 10;}
 
                          
                         input.seek(index66_5);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
+                        int LA66_0 = input.LA(1);
+
+                         
+                        int index66_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA66_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 1;}
+
+                         
+                        input.seek(index66_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
                         int LA66_6 = input.LA(1);
 
                          
                         int index66_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 9;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 10;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 10;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 9;}
 
                          
                         input.seek(index66_6);
                         if ( s>=0 ) return s;
                         break;
-                    case 2 : 
-                        int LA66_0 = input.LA(1);
+                    case 3 : 
+                        int LA66_1 = input.LA(1);
 
                          
-                        int index66_0 = input.index();
+                        int index66_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA66_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 1;}
+                        if ( (LA66_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
 
                          
-                        input.seek(index66_0);
+                        input.seek(index66_1);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
+                    case 4 : 
                         int LA66_3 = input.LA(1);
 
                          
@@ -18558,7 +18709,7 @@
                         input.seek(index66_3);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
+                    case 5 : 
                         int LA66_4 = input.LA(1);
 
                          
@@ -18573,7 +18724,7 @@
                         input.seek(index66_4);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
+                    case 6 : 
                         int LA66_2 = input.LA(1);
 
                          
@@ -18590,19 +18741,6 @@
                         input.seek(index66_2);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA66_1 = input.LA(1);
-
-                         
-                        int index66_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA66_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
-
-                         
-                        input.seek(index66_1);
-                        if ( s>=0 ) return s;
-                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
@@ -18611,349 +18749,42 @@
             throw nvae;
         }
     }
-    static final String DFA69_eotS =
-        "\25\uffff";
-    static final String DFA69_eofS =
-        "\25\uffff";
-    static final String DFA69_minS =
-        "\1\123\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 DFA69_maxS =
-        "\1\165\1\u0081\1\uffff\1\u0081\1\0\2\uffff\1\u0081\2\0\3\u0081"+
-        "\1\0\1\u0081\1\uffff\1\u0081\4\0";
-    static final String DFA69_acceptS =
-        "\2\uffff\1\2\2\uffff\2\1\10\uffff\1\1\5\uffff";
-    static final String DFA69_specialS =
-        "\1\uffff\1\10\1\uffff\1\1\1\0\2\uffff\1\4\1\7\1\5\1\2\1\6\1\13"+
-        "\1\3\1\12\1\uffff\1\11\4\uffff}>";
-    static final String[] DFA69_transitionS = {
-            "\3\2\1\uffff\1\2\1\uffff\1\1\2\2\6\uffff\2\2\3\uffff\1\2\15"+
-            "\uffff\1\2",
-            "\120\5\1\3\4\5\1\4\1\5\1\6\46\5",
-            "",
-            "\120\5\1\11\1\12\3\5\1\10\1\5\1\6\1\5\1\7\25\5\1\13\16\5",
-            "\1\uffff",
-            "",
-            "",
-            "\120\5\1\14\4\5\1\15\1\5\1\6\46\5",
-            "\1\uffff",
-            "\1\uffff",
-            "\120\5\1\16\4\5\1\17\1\5\1\6\46\5",
-            "\125\5\1\17\1\5\1\6\30\5\1\20\15\5",
-            "\121\5\1\21\3\5\1\23\1\5\1\6\27\5\1\22\16\5",
-            "\1\uffff",
-            "\121\5\1\12\3\5\1\24\1\5\1\6\27\5\1\13\16\5",
-            "",
-            "\125\5\1\24\1\5\1\6\27\5\1\13\16\5",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff"
-    };
-
-    static final short[] DFA69_eot = DFA.unpackEncodedString(DFA69_eotS);
-    static final short[] DFA69_eof = DFA.unpackEncodedString(DFA69_eofS);
-    static final char[] DFA69_min = DFA.unpackEncodedStringToUnsignedChars(DFA69_minS);
-    static final char[] DFA69_max = DFA.unpackEncodedStringToUnsignedChars(DFA69_maxS);
-    static final short[] DFA69_accept = DFA.unpackEncodedString(DFA69_acceptS);
-    static final short[] DFA69_special = DFA.unpackEncodedString(DFA69_specialS);
-    static final short[][] DFA69_transition;
-
-    static {
-        int numStates = DFA69_transitionS.length;
-        DFA69_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA69_transition[i] = DFA.unpackEncodedString(DFA69_transitionS[i]);
-        }
-    }
-
-    class DFA69 extends DFA {
-
-        public DFA69(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 69;
-            this.eot = DFA69_eot;
-            this.eof = DFA69_eof;
-            this.min = DFA69_min;
-            this.max = DFA69_max;
-            this.accept = DFA69_accept;
-            this.special = DFA69_special;
-            this.transition = DFA69_transition;
-        }
-        public String getDescription() {
-            return "1052:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
-        }
-        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA69_4 = input.LA(1);
-
-                         
-                        int index69_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index69_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA69_3 = input.LA(1);
-
-                         
-                        int index69_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_3==COLON) ) {s = 7;}
-
-                        else if ( (LA69_3==LEFT_PAREN) ) {s = 8;}
-
-                        else if ( (LA69_3==ID) ) {s = 9;}
-
-                        else if ( (LA69_3==DOT) ) {s = 10;}
-
-                        else if ( (LA69_3==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA69_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_3>=VT_COMPILATION_UNIT && LA69_3<=SEMICOLON)||(LA69_3>=DOT_STAR && LA69_3<=STRING)||LA69_3==COMMA||LA69_3==AT||(LA69_3>=EQUALS && LA69_3<=NULL)||(LA69_3>=RIGHT_SQUARE && LA69_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index69_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA69_10 = input.LA(1);
-
-                         
-                        int index69_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_10==ID) ) {s = 14;}
-
-                        else if ( (LA69_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_10>=VT_COMPILATION_UNIT && LA69_10<=SEMICOLON)||(LA69_10>=DOT && LA69_10<=STRING)||LA69_10==COMMA||(LA69_10>=AT && LA69_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA69_10==LEFT_PAREN) && (synpred8())) {s = 15;}
-
-                         
-                        input.seek(index69_10);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA69_13 = input.LA(1);
-
-                         
-                        int index69_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 15;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index69_13);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA69_7 = input.LA(1);
-
-                         
-                        int index69_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_7==ID) ) {s = 12;}
-
-                        else if ( (LA69_7==LEFT_PAREN) ) {s = 13;}
-
-                        else if ( (LA69_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_7>=VT_COMPILATION_UNIT && LA69_7<=SEMICOLON)||(LA69_7>=DOT && LA69_7<=STRING)||LA69_7==COMMA||(LA69_7>=AT && LA69_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index69_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA69_9 = input.LA(1);
-
-                         
-                        int index69_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index69_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA69_11 = input.LA(1);
-
-                         
-                        int index69_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_11==RIGHT_SQUARE) ) {s = 16;}
-
-                        else if ( (LA69_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_11>=VT_COMPILATION_UNIT && LA69_11<=STRING)||LA69_11==COMMA||(LA69_11>=AT && LA69_11<=LEFT_SQUARE)||(LA69_11>=THEN && LA69_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA69_11==LEFT_PAREN) && (synpred8())) {s = 15;}
-
-                         
-                        input.seek(index69_11);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA69_8 = input.LA(1);
-
-                         
-                        int index69_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index69_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA69_1 = input.LA(1);
-
-                         
-                        int index69_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_1==ID) ) {s = 3;}
-
-                        else if ( (LA69_1==LEFT_PAREN) ) {s = 4;}
-
-                        else if ( ((LA69_1>=VT_COMPILATION_UNIT && LA69_1<=SEMICOLON)||(LA69_1>=DOT && LA69_1<=STRING)||LA69_1==COMMA||(LA69_1>=AT && LA69_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA69_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                         
-                        input.seek(index69_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA69_16 = input.LA(1);
-
-                         
-                        int index69_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_16==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA69_16==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA69_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_16>=VT_COMPILATION_UNIT && LA69_16<=STRING)||LA69_16==COMMA||(LA69_16>=AT && LA69_16<=NULL)||(LA69_16>=RIGHT_SQUARE && LA69_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index69_16);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
-                        int LA69_14 = input.LA(1);
-
-                         
-                        int index69_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_14==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA69_14==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA69_14==DOT) ) {s = 10;}
-
-                        else if ( (LA69_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_14>=VT_COMPILATION_UNIT && LA69_14<=ID)||(LA69_14>=DOT_STAR && LA69_14<=STRING)||LA69_14==COMMA||(LA69_14>=AT && LA69_14<=NULL)||(LA69_14>=RIGHT_SQUARE && LA69_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index69_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA69_12 = input.LA(1);
-
-                         
-                        int index69_12 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA69_12==DOT) ) {s = 17;}
-
-                        else if ( (LA69_12==LEFT_SQUARE) ) {s = 18;}
-
-                        else if ( (LA69_12==LEFT_PAREN) ) {s = 19;}
-
-                        else if ( (LA69_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA69_12>=VT_COMPILATION_UNIT && LA69_12<=ID)||(LA69_12>=DOT_STAR && LA69_12<=STRING)||LA69_12==COMMA||(LA69_12>=AT && LA69_12<=NULL)||(LA69_12>=RIGHT_SQUARE && LA69_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index69_12);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 69, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
     static final String DFA84_eotS =
         "\40\uffff";
     static final String DFA84_eofS =
-        "\40\uffff";
+        "\1\1\5\uffff\1\4\31\uffff";
     static final String DFA84_minS =
-        "\1\132\1\uffff\2\124\1\uffff\1\0\1\124\1\0\1\124\6\0\1\4\1\163"+
-        "\2\4\15\0";
+        "\1\133\1\uffff\2\125\1\uffff\1\0\1\125\1\0\3\4\6\0\1\4\16\0";
     static final String DFA84_maxS =
-        "\1\143\1\uffff\1\160\1\163\1\uffff\1\0\1\163\1\0\1\124\6\0\1\u0081"+
-        "\1\163\2\u0081\15\0";
+        "\1\144\1\uffff\1\160\1\163\1\uffff\1\0\1\163\1\0\3\u0083\6\0\1\u0083"+
+        "\16\0";
     static final String DFA84_acceptS =
         "\1\uffff\1\2\2\uffff\1\1\33\uffff";
     static final String DFA84_specialS =
-        "\2\uffff\1\3\1\5\1\uffff\1\4\1\2\1\12\1\uffff\1\10\1\0\1\1\1\11"+
-        "\1\7\1\6\21\uffff}>";
+        "\2\uffff\1\10\1\3\1\uffff\1\4\1\5\1\1\3\uffff\1\7\1\0\1\6\1\12\1"+
+        "\2\1\11\17\uffff}>";
     static final String[] DFA84_transitionS = {
             "\2\1\6\uffff\1\2\1\1",
             "",
-            "\1\3\4\uffff\1\5\20\uffff\7\4",
-            "\1\6\1\1\2\uffff\1\4\1\7\3\uffff\1\1\2\uffff\2\4\10\uffff"+
-            "\6\1\1\10\2\4\1\1",
+            "\1\3\4\uffff\1\5\20\uffff\6\4",
+            "\1\6\1\1\2\uffff\1\4\1\7\3\uffff\1\1\2\uffff\2\4\10\uffff\6"+
+            "\1\2\4\1\10",
             "",
             "\1\uffff",
-            "\1\11\1\4\2\uffff\1\12\1\17\2\4\4\uffff\1\15\1\13\2\4\14\uffff"+
-            "\1\1\1\14\1\16\1\4",
+            "\1\13\1\4\2\uffff\1\14\1\12\2\4\4\uffff\1\17\1\15\2\4\14\uffff"+
+            "\1\16\1\20\1\11",
             "\1\uffff",
-            "\1\20",
+            "\157\21\1\22\1\23\17\21",
+            "\157\24\1\25\1\26\17\24",
+            "\121\36\1\27\3\36\1\30\1\35\1\36\1\37\4\36\1\33\1\31\16\36\1"+
+            "\32\1\34\21\36",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\120\30\1\21\3\30\1\22\1\27\1\30\1\31\4\30\1\25\1\23\17\30"+
-            "\1\24\1\26\17\30",
-            "\1\32",
-            "\121\30\1\36\3\30\1\35\1\37\1\33\27\30\1\34\16\30",
-            "\125\30\1\35\1\37\1\33\46\30",
+            "\157\21\1\22\1\23\17\21",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18966,6 +18797,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
@@ -18999,16 +18831,16 @@
             this.transition = DFA84_transition;
         }
         public String getDescription() {
-            return "()* loopback of 1176:25: ({...}? => DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 1191:25: ({...}? => DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA84_10 = input.LA(1);
+                        int LA84_12 = input.LA(1);
 
                          
-                        int index84_10 = input.index();
+                        int index84_12 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -19016,14 +18848,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index84_10);
+                        input.seek(index84_12);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA84_11 = input.LA(1);
+                        int LA84_7 = input.LA(1);
 
                          
-                        int index84_11 = input.index();
+                        int index84_7 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -19031,53 +18863,43 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index84_11);
+                        input.seek(index84_7);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA84_6 = input.LA(1);
+                        int LA84_15 = input.LA(1);
 
                          
-                        int index84_6 = input.index();
+                        int index84_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA84_6==ID) ) {s = 9;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA84_6==STRING) ) {s = 10;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA84_6==INT) ) {s = 11;}
-
-                        else if ( (LA84_6==FLOAT) ) {s = 12;}
-
-                        else if ( (LA84_6==BOOL) ) {s = 13;}
-
-                        else if ( (LA84_6==NULL) ) {s = 14;}
-
-                        else if ( (LA84_6==LEFT_PAREN) ) {s = 15;}
-
-                        else if ( (LA84_6==DOT||(LA84_6>=COMMA && LA84_6<=RIGHT_PAREN)||(LA84_6>=DOUBLE_PIPE && LA84_6<=DOUBLE_AMPER)||LA84_6==LEFT_SQUARE) && ((validateRestr()))) {s = 4;}
-
-                        else if ( (LA84_6==GRAVE_ACCENT) ) {s = 1;}
-
                          
-                        input.seek(index84_6);
+                        input.seek(index84_15);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA84_2 = input.LA(1);
+                        int LA84_3 = input.LA(1);
 
                          
-                        int index84_2 = input.index();
+                        int index84_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA84_2==ID) ) {s = 3;}
+                        if ( (LA84_3==DOT||LA84_3==COLON||(LA84_3>=EQUAL && LA84_3<=NOT_EQUAL)) ) {s = 1;}
 
-                        else if ( ((LA84_2>=EQUAL && LA84_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
+                        else if ( (LA84_3==ID) ) {s = 6;}
 
-                        else if ( (LA84_2==LEFT_PAREN) ) {s = 5;}
+                        else if ( (LA84_3==STRING||(LA84_3>=BOOL && LA84_3<=INT)||(LA84_3>=FLOAT && LA84_3<=NULL)) && ((validateRestr()))) {s = 4;}
 
+                        else if ( (LA84_3==LEFT_PAREN) ) {s = 7;}
+
+                        else if ( (LA84_3==LEFT_SQUARE) ) {s = 8;}
+
                          
-                        input.seek(index84_2);
+                        input.seek(index84_3);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
@@ -19096,31 +18918,39 @@
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA84_3 = input.LA(1);
+                        int LA84_6 = input.LA(1);
 
                          
-                        int index84_3 = input.index();
+                        int index84_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA84_3==DOT||LA84_3==COLON||(LA84_3>=EQUAL && LA84_3<=NOT_EQUAL)||LA84_3==LEFT_SQUARE) ) {s = 1;}
+                        if ( (LA84_6==LEFT_SQUARE) ) {s = 9;}
 
-                        else if ( (LA84_3==ID) ) {s = 6;}
+                        else if ( (LA84_6==EOF||LA84_6==DOT||(LA84_6>=COMMA && LA84_6<=RIGHT_PAREN)||(LA84_6>=DOUBLE_PIPE && LA84_6<=DOUBLE_AMPER)) && ((validateRestr()))) {s = 4;}
 
-                        else if ( (LA84_3==STRING||(LA84_3>=BOOL && LA84_3<=INT)||(LA84_3>=FLOAT && LA84_3<=NULL)) && ((validateRestr()))) {s = 4;}
+                        else if ( (LA84_6==LEFT_PAREN) ) {s = 10;}
 
-                        else if ( (LA84_3==LEFT_PAREN) ) {s = 7;}
+                        else if ( (LA84_6==ID) ) {s = 11;}
 
-                        else if ( (LA84_3==GRAVE_ACCENT) ) {s = 8;}
+                        else if ( (LA84_6==STRING) ) {s = 12;}
 
+                        else if ( (LA84_6==INT) ) {s = 13;}
+
+                        else if ( (LA84_6==FLOAT) ) {s = 14;}
+
+                        else if ( (LA84_6==BOOL) ) {s = 15;}
+
+                        else if ( (LA84_6==NULL) ) {s = 16;}
+
                          
-                        input.seek(index84_3);
+                        input.seek(index84_6);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA84_14 = input.LA(1);
+                        int LA84_13 = input.LA(1);
 
                          
-                        int index84_14 = input.index();
+                        int index84_13 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -19128,14 +18958,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index84_14);
+                        input.seek(index84_13);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA84_13 = input.LA(1);
+                        int LA84_11 = input.LA(1);
 
                          
-                        int index84_13 = input.index();
+                        int index84_11 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -19143,29 +18973,31 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index84_13);
+                        input.seek(index84_11);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA84_9 = input.LA(1);
+                        int LA84_2 = input.LA(1);
 
                          
-                        int index84_9 = input.index();
+                        int index84_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 4;}
+                        if ( (LA84_2==ID) ) {s = 3;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( ((LA84_2>=EQUAL && LA84_2<=NOT_EQUAL)) && ((validateRestr()))) {s = 4;}
 
+                        else if ( (LA84_2==LEFT_PAREN) ) {s = 5;}
+
                          
-                        input.seek(index84_9);
+                        input.seek(index84_2);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA84_12 = input.LA(1);
+                        int LA84_16 = input.LA(1);
 
                          
-                        int index84_12 = input.index();
+                        int index84_16 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -19173,14 +19005,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index84_12);
+                        input.seek(index84_16);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA84_7 = input.LA(1);
+                        int LA84_14 = input.LA(1);
 
                          
-                        int index84_7 = input.index();
+                        int index84_14 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -19188,7 +19020,7 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index84_7);
+                        input.seek(index84_14);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -19200,35 +19032,34 @@
         }
     }
     static final String DFA85_eotS =
-        "\75\uffff";
+        "\100\uffff";
     static final String DFA85_eofS =
-        "\75\uffff";
+        "\1\1\5\uffff\1\4\71\uffff";
     static final String DFA85_minS =
-        "\1\132\1\uffff\3\124\1\uffff\2\124\1\4\1\124\7\0\1\4\1\163\1\4"+
-        "\2\0\2\4\45\0";
+        "\1\133\1\uffff\2\125\1\uffff\2\125\2\4\1\125\7\0\5\4\52\0";
     static final String DFA85_maxS =
-        "\1\143\1\uffff\1\160\1\163\1\160\1\uffff\1\163\1\124\1\u0081\1"+
-        "\163\7\0\1\u0081\1\163\1\u0081\2\0\2\u0081\45\0";
+        "\1\144\1\uffff\1\160\1\163\1\uffff\1\160\1\163\2\u0083\1\163\7\0"+
+        "\5\u0083\52\0";
     static final String DFA85_acceptS =
-        "\1\uffff\1\2\3\uffff\1\1\67\uffff";
+        "\1\uffff\1\2\2\uffff\1\1\73\uffff";
     static final String DFA85_specialS =
-        "\2\uffff\1\6\1\12\1\15\1\uffff\1\11\2\uffff\1\13\1\5\1\10\1\3\1"+
-        "\4\1\0\1\1\1\2\3\uffff\1\7\1\14\47\uffff}>";
+        "\2\uffff\1\12\1\3\1\uffff\1\0\1\6\2\uffff\1\4\1\7\1\13\1\5\1\2\1"+
+        "\1\1\11\1\10\57\uffff}>";
     static final String[] DFA85_transitionS = {
             "\2\1\6\uffff\1\1\1\2",
             "",
-            "\1\3\4\uffff\1\4\20\uffff\7\5",
-            "\1\6\1\1\2\uffff\1\5\1\10\3\uffff\1\1\2\uffff\2\5\10\uffff"+
-            "\6\1\1\7\2\5\1\1",
-            "\1\11\4\uffff\1\12\20\uffff\7\5",
+            "\1\3\4\uffff\1\5\20\uffff\6\4",
+            "\1\6\1\1\2\uffff\1\4\1\7\3\uffff\1\1\2\uffff\2\4\10\uffff\6"+
+            "\1\2\4\1\10",
             "",
-            "\1\13\1\5\2\uffff\1\14\1\21\2\5\4\uffff\1\17\1\15\2\5\14\uffff"+
-            "\1\1\1\16\1\20\1\5",
-            "\1\22",
-            "\120\42\1\23\3\42\1\26\1\24\1\42\1\25\4\42\1\31\1\27\10\42"+
-            "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\30\1\32\17\42",
-            "\1\43\1\1\2\uffff\1\5\1\45\3\uffff\1\1\2\uffff\2\5\10\uffff"+
-            "\6\1\1\44\2\5\1\1",
+            "\1\11\4\uffff\1\12\20\uffff\6\4",
+            "\1\13\1\4\2\uffff\1\14\1\21\2\4\4\uffff\1\17\1\15\2\4\14\uffff"+
+            "\1\16\1\20\1\22",
+            "\121\41\1\23\3\41\1\24\1\31\1\41\1\33\4\41\1\27\1\25\10\41\1"+
+            "\32\1\34\1\35\1\36\1\37\1\40\1\26\1\30\21\41",
+            "\157\42\1\43\1\44\17\42",
+            "\1\46\1\1\2\uffff\1\4\1\45\3\uffff\1\1\2\uffff\2\4\10\uffff"+
+            "\6\1\2\4\1\47",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -19236,15 +19067,15 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\120\56\1\46\3\56\1\51\1\47\1\56\1\50\4\56\1\54\1\52\17\56"+
-            "\1\53\1\55\17\56",
-            "\1\57",
-            "\120\42\1\60\1\70\2\42\1\61\1\66\1\71\1\72\4\42\1\64\1\62"+
-            "\16\42\1\73\1\63\1\65\1\67\16\42",
+            "\121\60\1\50\3\60\1\53\1\51\1\60\1\52\4\60\1\56\1\54\16\60\1"+
+            "\55\1\57\21\60",
+            "\157\61\1\62\1\63\17\61",
+            "\121\41\1\64\1\75\2\41\1\65\1\72\1\76\1\74\4\41\1\70\1\66\16"+
+            "\41\1\67\1\71\1\73\20\41",
+            "\126\41\1\77\1\76\1\74\47\41",
+            "\126\41\1\77\1\76\1\74\47\41",
             "\1\uffff",
             "\1\uffff",
-            "\125\42\1\74\1\71\1\72\46\42",
-            "\125\42\1\74\1\71\1\72\46\42",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -19281,6 +19112,9 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
@@ -19314,149 +19148,116 @@
             this.transition = DFA85_transition;
         }
         public String getDescription() {
-            return "()* loopback of 1181:26: ({...}? => DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 1196:26: ({...}? => DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA85_14 = input.LA(1);
+                        int LA85_5 = input.LA(1);
 
                          
-                        int index85_14 = input.index();
+                        int index85_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( (LA85_5==ID) ) {s = 9;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA85_5==LEFT_PAREN) ) {s = 10;}
 
+                        else if ( ((LA85_5>=EQUAL && LA85_5<=NOT_EQUAL)) && ((validateRestr()))) {s = 4;}
+
                          
-                        input.seek(index85_14);
+                        input.seek(index85_5);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA85_15 = input.LA(1);
+                        int LA85_14 = input.LA(1);
 
                          
-                        int index85_15 = input.index();
+                        int index85_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index85_15);
+                        input.seek(index85_14);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA85_16 = input.LA(1);
+                        int LA85_13 = input.LA(1);
 
                          
-                        int index85_16 = input.index();
+                        int index85_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index85_16);
+                        input.seek(index85_13);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA85_12 = input.LA(1);
+                        int LA85_3 = input.LA(1);
 
                          
-                        int index85_12 = input.index();
+                        int index85_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( (LA85_3==DOT||LA85_3==COLON||(LA85_3>=EQUAL && LA85_3<=NOT_EQUAL)) ) {s = 1;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA85_3==ID) ) {s = 6;}
 
-                         
-                        input.seek(index85_12);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA85_13 = input.LA(1);
+                        else if ( (LA85_3==STRING||(LA85_3>=BOOL && LA85_3<=INT)||(LA85_3>=FLOAT && LA85_3<=NULL)) && ((validateRestr()))) {s = 4;}
 
-                         
-                        int index85_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        else if ( (LA85_3==LEFT_PAREN) ) {s = 7;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA85_3==LEFT_SQUARE) ) {s = 8;}
 
                          
-                        input.seek(index85_13);
+                        input.seek(index85_3);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
-                        int LA85_10 = input.LA(1);
+                    case 4 : 
+                        int LA85_9 = input.LA(1);
 
                          
-                        int index85_10 = input.index();
+                        int index85_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( (LA85_9==DOT||LA85_9==COLON||(LA85_9>=EQUAL && LA85_9<=NOT_EQUAL)) ) {s = 1;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA85_9==LEFT_PAREN) ) {s = 37;}
 
-                         
-                        input.seek(index85_10);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA85_2 = input.LA(1);
+                        else if ( (LA85_9==ID) ) {s = 38;}
 
-                         
-                        int index85_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA85_2==ID) ) {s = 3;}
+                        else if ( (LA85_9==STRING||(LA85_9>=BOOL && LA85_9<=INT)||(LA85_9>=FLOAT && LA85_9<=NULL)) && ((validateRestr()))) {s = 4;}
 
-                        else if ( (LA85_2==LEFT_PAREN) ) {s = 4;}
+                        else if ( (LA85_9==LEFT_SQUARE) ) {s = 39;}
 
-                        else if ( ((LA85_2>=EQUAL && LA85_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 5;}
-
                          
-                        input.seek(index85_2);
+                        input.seek(index85_9);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA85_20 = input.LA(1);
+                    case 5 : 
+                        int LA85_12 = input.LA(1);
 
                          
-                        int index85_20 = input.index();
+                        int index85_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index85_20);
+                        input.seek(index85_12);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
-                        int LA85_11 = input.LA(1);
-
-                         
-                        int index85_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index85_11);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
+                    case 6 : 
                         int LA85_6 = input.LA(1);
 
                          
@@ -19477,86 +19278,89 @@
 
                         else if ( (LA85_6==LEFT_PAREN) ) {s = 17;}
 
-                        else if ( (LA85_6==DOT||(LA85_6>=COMMA && LA85_6<=RIGHT_PAREN)||(LA85_6>=DOUBLE_PIPE && LA85_6<=DOUBLE_AMPER)||LA85_6==LEFT_SQUARE) && ((validateRestr()))) {s = 5;}
+                        else if ( (LA85_6==LEFT_SQUARE) ) {s = 18;}
 
-                        else if ( (LA85_6==GRAVE_ACCENT) ) {s = 1;}
+                        else if ( (LA85_6==EOF||LA85_6==DOT||(LA85_6>=COMMA && LA85_6<=RIGHT_PAREN)||(LA85_6>=DOUBLE_PIPE && LA85_6<=DOUBLE_AMPER)) && ((validateRestr()))) {s = 4;}
 
                          
                         input.seek(index85_6);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
-                        int LA85_3 = input.LA(1);
+                    case 7 : 
+                        int LA85_10 = input.LA(1);
 
                          
-                        int index85_3 = input.index();
+                        int index85_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA85_3==DOT||LA85_3==COLON||(LA85_3>=EQUAL && LA85_3<=NOT_EQUAL)||LA85_3==LEFT_SQUARE) ) {s = 1;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA85_3==ID) ) {s = 6;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA85_3==GRAVE_ACCENT) ) {s = 7;}
+                         
+                        input.seek(index85_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA85_16 = input.LA(1);
 
-                        else if ( (LA85_3==STRING||(LA85_3>=BOOL && LA85_3<=INT)||(LA85_3>=FLOAT && LA85_3<=NULL)) && ((validateRestr()))) {s = 5;}
+                         
+                        int index85_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA85_3==LEFT_PAREN) ) {s = 8;}
+                        else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index85_3);
+                        input.seek(index85_16);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
-                        int LA85_9 = input.LA(1);
+                    case 9 : 
+                        int LA85_15 = input.LA(1);
 
                          
-                        int index85_9 = input.index();
+                        int index85_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA85_9==DOT||LA85_9==COLON||(LA85_9>=EQUAL && LA85_9<=NOT_EQUAL)||LA85_9==LEFT_SQUARE) ) {s = 1;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA85_9==ID) ) {s = 35;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA85_9==GRAVE_ACCENT) ) {s = 36;}
-
-                        else if ( (LA85_9==LEFT_PAREN) ) {s = 37;}
-
-                        else if ( (LA85_9==STRING||(LA85_9>=BOOL && LA85_9<=INT)||(LA85_9>=FLOAT && LA85_9<=NULL)) && ((validateRestr()))) {s = 5;}
-
                          
-                        input.seek(index85_9);
+                        input.seek(index85_15);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
-                        int LA85_21 = input.LA(1);
+                    case 10 : 
+                        int LA85_2 = input.LA(1);
 
                          
-                        int index85_21 = input.index();
+                        int index85_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( (LA85_2==ID) ) {s = 3;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( ((LA85_2>=EQUAL && LA85_2<=NOT_EQUAL)) && ((validateRestr()))) {s = 4;}
 
+                        else if ( (LA85_2==LEFT_PAREN) ) {s = 5;}
+
                          
-                        input.seek(index85_21);
+                        input.seek(index85_2);
                         if ( s>=0 ) return s;
                         break;
-                    case 13 : 
-                        int LA85_4 = input.LA(1);
+                    case 11 : 
+                        int LA85_11 = input.LA(1);
 
                          
-                        int index85_4 = input.index();
+                        int index85_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA85_4==ID) ) {s = 9;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA85_4==LEFT_PAREN) ) {s = 10;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( ((LA85_4>=EQUAL && LA85_4<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 5;}
-
                          
-                        input.seek(index85_4);
+                        input.seek(index85_11);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -19569,451 +19373,449 @@
     }
  
 
-    public static final BitSet FOLLOW_package_statement_in_compilation_unit392 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit397 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_EOF_in_compilation_unit402 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_package_key_in_package_statement462 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_package_id_in_package_statement466 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_package_statement468 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_id495 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_DOT_in_package_id501 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_package_id505 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_rule_attribute_in_statement549 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_statement556 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_statement562 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_statement568 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_statement574 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_in_statement582 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_type_declaration_in_statement590 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_in_statement595 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_in_statement600 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_import_statement627 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_import_name_in_import_statement629 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_import_statement632 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_function_import_statement675 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_function_key_in_function_import_statement677 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement679 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement682 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_name716 = new BitSet(new long[]{0x0000000000000002L,0x0000000000600000L});
-    public static final BitSet FOLLOW_DOT_in_import_name722 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_import_name726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000600000L});
-    public static final BitSet FOLLOW_DOT_STAR_in_import_name733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_key_in_global778 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_data_type_in_global780 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_global_id_in_global782 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_global784 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_id813 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_key_in_function850 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_data_type_in_function852 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_function_id_in_function855 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_parameters_in_function857 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
-    public static final BitSet FOLLOW_curly_chunk_in_function859 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_id889 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_key_in_query926 = new BitSet(new long[]{0x0000000000000000L,0x0000000001100000L});
-    public static final BitSet FOLLOW_query_id_in_query928 = new BitSet(new long[]{0x0000000000000000L,0x0000000002900000L});
-    public static final BitSet FOLLOW_parameters_in_query936 = new BitSet(new long[]{0x0000000000000000L,0x0000000002900000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query945 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800000L});
-    public static final BitSet FOLLOW_END_in_query950 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_query952 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_id987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_query_id1003 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters1022 = new BitSet(new long[]{0x0000000000000000L,0x0000000008100000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters1031 = new BitSet(new long[]{0x0000000000000000L,0x000000000C000000L});
-    public static final BitSet FOLLOW_COMMA_in_parameters1034 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters1038 = new BitSet(new long[]{0x0000000000000000L,0x000000000C000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters1047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_param_definition1073 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_argument_in_param_definition1076 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument1087 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_argument1093 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
-    public static final BitSet FOLLOW_declare_key_in_type_declaration1121 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_type_declare_id_in_type_declaration1124 = new BitSet(new long[]{0x0000000000000000L,0x0000000010900000L});
-    public static final BitSet FOLLOW_decl_metadata_in_type_declaration1128 = new BitSet(new long[]{0x0000000000000000L,0x0000000010900000L});
-    public static final BitSet FOLLOW_decl_field_in_type_declaration1133 = new BitSet(new long[]{0x0000000000000000L,0x0000000000900000L});
-    public static final BitSet FOLLOW_END_in_type_declaration1138 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_type_declare_id1173 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AT_in_decl_metadata1192 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_decl_metadata1200 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_decl_metadata1207 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_decl_field1230 = new BitSet(new long[]{0x0000000000000000L,0x0000000060000000L});
-    public static final BitSet FOLLOW_decl_field_initialization_in_decl_field1236 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_COLON_in_decl_field1242 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_data_type_in_decl_field1248 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
-    public static final BitSet FOLLOW_decl_metadata_in_decl_field1252 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
-    public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization1280 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_decl_field_initialization1286 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_key_in_template1323 = new BitSet(new long[]{0x0000000000000000L,0x0000000001100000L});
-    public static final BitSet FOLLOW_template_id_in_template1325 = new BitSet(new long[]{0x0000000000000000L,0x0000000000180000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template1332 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_template_slot_in_template1340 = new BitSet(new long[]{0x0000000000000000L,0x0000000000900000L});
-    public static final BitSet FOLLOW_END_in_template1345 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template1349 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_id1382 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_template_id1398 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_template_slot1418 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_slot_id_in_template_slot1420 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template_slot1422 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_slot_id1451 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_key_in_rule1488 = new BitSet(new long[]{0x0000000000000000L,0x0000000001100000L});
-    public static final BitSet FOLLOW_rule_id_in_rule1490 = new BitSet(new long[]{0x0000000000000000L,0x0020000090100000L});
-    public static final BitSet FOLLOW_extend_key_in_rule1499 = new BitSet(new long[]{0x0000000000000000L,0x0000000001100000L});
-    public static final BitSet FOLLOW_rule_id_in_rule1501 = new BitSet(new long[]{0x0000000000000000L,0x0020000090100000L});
-    public static final BitSet FOLLOW_decl_metadata_in_rule1505 = new BitSet(new long[]{0x0000000000000000L,0x0020000090100000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule1508 = new BitSet(new long[]{0x0000000000000000L,0x0020000080000000L});
-    public static final BitSet FOLLOW_when_part_in_rule1511 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_in_rule1514 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_WHEN_in_when_part1554 = new BitSet(new long[]{0x0000000000000002L,0x0000000022100000L});
-    public static final BitSet FOLLOW_COLON_in_when_part1560 = new BitSet(new long[]{0x0000000000000002L,0x0000000002100000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1570 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_id1591 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_rule_id1607 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1628 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_COLON_in_rule_attributes1630 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1640 = new BitSet(new long[]{0x0000000000000002L,0x0000000004100000L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes1644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1651 = new BitSet(new long[]{0x0000000000000002L,0x0000000004100000L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1690 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1696 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1701 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1708 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1715 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1721 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1727 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1739 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1745 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1751 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1756 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_key_in_date_effective1772 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1777 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_key_in_date_expires1791 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_key_in_enabled1811 = new BitSet(new long[]{0x0000000000000000L,0x0000000102000000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1824 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_enabled1835 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_salience_key_in_salience1855 = new BitSet(new long[]{0x0000000000000000L,0x0000000202000000L});
-    public static final BitSet FOLLOW_INT_in_salience1864 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_salience1873 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_key_in_no_loop1888 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1893 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1908 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1913 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_key_in_activation_group1930 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1935 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1949 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1954 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1968 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1973 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_key_in_duration1987 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-    public static final BitSet FOLLOW_INT_in_duration1992 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_key_in_dialect2008 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_STRING_in_dialect2013 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active2031 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active2036 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block2051 = new BitSet(new long[]{0x0000000000000002L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs2072 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or2096 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2114 = new BitSet(new long[]{0x0000000000000000L,0x000000000A100000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or2120 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2143 = new BitSet(new long[]{0x0000000000000002L,0x0000000400100000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or2165 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or2172 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2183 = new BitSet(new long[]{0x0000000000000002L,0x0000000400100000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and2224 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and2234 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2242 = new BitSet(new long[]{0x0000000000000000L,0x000000000A100000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and2248 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2272 = new BitSet(new long[]{0x0000000000000002L,0x0000000800100000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and2294 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and2301 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2312 = new BitSet(new long[]{0x0000000000000002L,0x0000000800100000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2343 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_lhs_not_binding_in_lhs_unary2351 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2357 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2363 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2369 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2375 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2386 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2392 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2400 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary2414 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exists_key_in_lhs_exist2430 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2457 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2464 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2472 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2479 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2494 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not_binding2540 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_not_binding2542 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not2565 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2587 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2594 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2603 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2609 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2619 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_lhs_eval2658 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forall_key_in_lhs_forall2694 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2699 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2707 = new BitSet(new long[]{0x0000000000000000L,0x0000000008100000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2713 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2749 = new BitSet(new long[]{0x0000000000000002L,0x0000003000000000L});
-    public static final BitSet FOLLOW_over_clause_in_pattern_source2753 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_FROM_in_pattern_source2763 = new BitSet(new long[]{0x0000000000000000L,0x0000014000100000L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2783 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source2799 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2816 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_pattern_source2832 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_OVER_in_over_clause2864 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_over_elements_in_over_clause2869 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
-    public static final BitSet FOLLOW_COMMA_in_over_clause2876 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_over_elements_in_over_clause2881 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
-    public static final BitSet FOLLOW_ID_in_over_elements2896 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_COLON_in_over_elements2903 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_over_elements2912 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_over_elements2919 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2945 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2954 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2962 = new BitSet(new long[]{0x0000000000000000L,0x0000008004100000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2967 = new BitSet(new long[]{0x0000000000000000L,0x0000008000100000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2977 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2983 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2991 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INIT_in_accumulate_init_clause3037 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3048 = new BitSet(new long[]{0x0000000000000000L,0x0000000004100000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause3053 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause3064 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3068 = new BitSet(new long[]{0x0000000000000000L,0x0000000004100000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause3073 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause3086 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3090 = new BitSet(new long[]{0x0000000000000000L,0x0000000004100000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause3095 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause3110 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3116 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk3174 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_paren_chunk_data3198 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_set_in_accumulate_paren_chunk_data3210 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk_data3226 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_paren_chunk_data3237 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause3253 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause3259 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_collect_statement3281 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement3290 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement3297 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement3302 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement3329 = new BitSet(new long[]{0x0000000000000000L,0x0000000001100000L});
-    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement3337 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entrypoint_id3363 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_entrypoint_id3380 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source3400 = new BitSet(new long[]{0x0000000000000002L,0x0000000002200000L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source3415 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source3422 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain3455 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_expression_chain3462 = new BitSet(new long[]{0x0000000000000002L,0x0008000002200000L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain3478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain3492 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain3503 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern3536 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern3549 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_fact_binding3569 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding3582 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding3590 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding3598 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression3639 = new BitSet(new long[]{0x0000000000000002L,0x0000000400100000L});
-    public static final BitSet FOLLOW_or_key_in_fact_binding_expression3651 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3657 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression3662 = new BitSet(new long[]{0x0000000000000002L,0x0000000400100000L});
-    public static final BitSet FOLLOW_pattern_type_in_fact3702 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3707 = new BitSet(new long[]{0x0000000000000000L,0x000000000A100000L});
-    public static final BitSet FOLLOW_constraints_in_fact3718 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3724 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints3758 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
-    public static final BitSet FOLLOW_COMMA_in_constraints3762 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_constraint_in_constraints3769 = new BitSet(new long[]{0x0000000000000002L,0x0000000004000000L});
-    public static final BitSet FOLLOW_or_constr_in_constraint3783 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3794 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3798 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3805 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3820 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3824 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3831 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_eval_key_in_unary_constr3864 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_unary_constr3867 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr3872 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3878 = new BitSet(new long[]{0x0000000000000000L,0x0000000002100000L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr3888 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3893 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_field_constraint3913 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3915 = new BitSet(new long[]{0x0000000000000002L,0x0001FE0002100000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3922 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ARROW_in_field_constraint3928 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_field_constraint3932 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3986 = new BitSet(new long[]{0x0000000000000000L,0x0001FC0002100000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3988 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_label4013 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_COLON_in_label4020 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective4041 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective4047 = new BitSet(new long[]{0x0000000000000000L,0x0001FC0002100000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective4055 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective4070 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective4076 = new BitSet(new long[]{0x0000000000000000L,0x0001FC0002100000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective4083 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression4105 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression4110 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression4115 = new BitSet(new long[]{0x0000000000000000L,0x0001FC0002100000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression4124 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression4129 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator4158 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator4166 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator4174 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_LESS_in_simple_operator4182 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator4190 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator4198 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_not_key_in_simple_operator4206 = new BitSet(new long[]{0x0000000000000000L,0x0001000000100000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator4213 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator4220 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator4227 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator4234 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator4243 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator4254 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator4262 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator4268 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator4274 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator4280 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator4286 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator4292 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator4298 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator4306 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator4316 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator4324 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator4330 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator4337 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator4355 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator4360 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator4362 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator4373 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator4381 = new BitSet(new long[]{0x0000000000000000L,0x000000000C000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator4385 = new BitSet(new long[]{0x0000000000000000L,0x0006000303100000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator4390 = new BitSet(new long[]{0x0000000000000000L,0x000000000C000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator4398 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value4419 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value4424 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value4430 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint4449 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint4456 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint4463 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint4470 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_literal_constraint4477 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_pattern_type4492 = new BitSet(new long[]{0x0000000000000002L,0x0008000000200000L});
-    public static final BitSet FOLLOW_DOT_in_pattern_type4498 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_pattern_type4502 = new BitSet(new long[]{0x0000000000000002L,0x0008000000200000L});
-    public static final BitSet FOLLOW_dimension_definition_in_pattern_type4517 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
-    public static final BitSet FOLLOW_ID_in_data_type4545 = new BitSet(new long[]{0x0000000000000002L,0x0008000000200000L});
-    public static final BitSet FOLLOW_DOT_in_data_type4551 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_data_type4555 = new BitSet(new long[]{0x0000000000000002L,0x0008000000200000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type4560 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition4589 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition4596 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path4610 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path4614 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path4618 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_accessor_element4642 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element4648 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk4677 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data4696 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_set_in_rhs_chunk_data4709 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_END_in_rhs_chunk_data4722 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data4728 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk4747 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data4770 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data4782 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data4798 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data4809 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk4830 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data4854 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data4866 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data4882 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data4893 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk4914 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data4937 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_set_in_square_chunk_data4949 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data4964 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000003L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data4975 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4999 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key5003 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key5007 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key5011 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key5015 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key5047 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_effective_key5051 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key5055 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key5087 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_expires_key5091 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key5095 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key5127 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_no_loop_key5131 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key5135 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key5167 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_auto_focus_key5171 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key5175 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key5207 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_activation_group_key5211 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key5215 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key5247 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_agenda_group_key5251 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key5255 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key5287 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key5291 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key5295 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key5327 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key5331 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key5335 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_duration_key5364 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_key5391 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_key5418 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dialect_key5445 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_salience_key5472 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enabled_key5499 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_attributes_key5526 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_key5553 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_extend_key5580 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_key5607 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_key5634 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_declare_key5661 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_key5688 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_key5715 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key5742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key5769 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key5796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key5823 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key5850 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key5877 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key5904 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key5931 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key5958 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key5985 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key6012 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key6039 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key6066 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key6093 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key6120 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred12087 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_or_key_in_synpred12089 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_or_key_in_synpred22156 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred22158 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred32215 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_and_key_in_synpred32217 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred42285 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred42287 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_synpred52410 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred62447 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_or_key_in_synpred62450 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred62452 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72575 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
-    public static final BitSet FOLLOW_or_key_in_synpred72578 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred72580 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred83409 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit396 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit401 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_EOF_in_compilation_unit407 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_key_in_package_statement467 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_package_id_in_package_statement471 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_package_statement473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_id500 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOT_in_package_id506 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_package_id510 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement561 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement567 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement573 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement579 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement587 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_type_declaration_in_statement595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement600 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement605 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_import_statement632 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_import_name_in_import_statement634 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_import_statement637 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_function_import_statement680 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_function_key_in_function_import_statement682 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement684 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement687 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_name721 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_DOT_in_import_name727 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_import_name731 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name738 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_key_in_global783 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_global785 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_global_id_in_global787 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_global789 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_id818 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_key_in_function855 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_function857 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_function_id_in_function860 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_parameters_in_function862 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_id894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_key_in_query931 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_query_id_in_query933 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
+    public static final BitSet FOLLOW_parameters_in_query941 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query950 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_END_in_query955 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_query957 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_id992 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_query_id1008 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters1027 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters1036 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_COMMA_in_parameters1039 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters1043 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters1052 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_param_definition1078 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_argument_in_param_definition1081 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument1092 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument1098 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
+    public static final BitSet FOLLOW_declare_key_in_type_declaration1126 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_type_declare_id_in_type_declaration1129 = new BitSet(new long[]{0x0000000000000000L,0x0000000021200000L});
+    public static final BitSet FOLLOW_decl_metadata_in_type_declaration1133 = new BitSet(new long[]{0x0000000000000000L,0x0000000021200000L});
+    public static final BitSet FOLLOW_decl_field_in_type_declaration1138 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
+    public static final BitSet FOLLOW_END_in_type_declaration1143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_type_declare_id1178 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AT_in_decl_metadata1197 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_decl_metadata1205 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_decl_metadata1212 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_decl_field1235 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_decl_field_initialization_in_decl_field1241 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_decl_field1247 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_decl_field1253 = new BitSet(new long[]{0x0000000000000002L,0x0000000020000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_decl_field1257 = new BitSet(new long[]{0x0000000000000002L,0x0000000020000000L});
+    public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization1285 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_decl_field_initialization1291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_key_in_template1328 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_template_id_in_template1330 = new BitSet(new long[]{0x0000000000000000L,0x0000000000300000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template1337 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_template_slot_in_template1345 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
+    public static final BitSet FOLLOW_END_in_template1350 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template1354 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_id1387 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_template_id1403 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_template_slot1423 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_slot_id_in_template_slot1425 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template_slot1427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_slot_id1456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_key_in_rule1493 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_rule_id_in_rule1495 = new BitSet(new long[]{0x0000000000000000L,0x0020000120200000L});
+    public static final BitSet FOLLOW_extend_key_in_rule1504 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_rule_id_in_rule1506 = new BitSet(new long[]{0x0000000000000000L,0x0020000120200000L});
+    public static final BitSet FOLLOW_decl_metadata_in_rule1510 = new BitSet(new long[]{0x0000000000000000L,0x0020000120200000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule1513 = new BitSet(new long[]{0x0000000000000000L,0x0020000100000000L});
+    public static final BitSet FOLLOW_when_part_in_rule1516 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule1519 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_WHEN_in_when_part1559 = new BitSet(new long[]{0x0000000000000002L,0x0000000044200000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1565 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1612 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1633 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1635 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1645 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1649 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1656 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1695 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1701 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1706 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1713 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1720 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1726 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1732 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1738 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1744 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1750 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1761 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1777 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1782 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1796 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1801 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1816 = new BitSet(new long[]{0x0000000000000000L,0x0000000204000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1829 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_enabled1840 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1860 = new BitSet(new long[]{0x0000000000000000L,0x0000000404000000L});
+    public static final BitSet FOLLOW_INT_in_salience1869 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1878 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1893 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1913 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1918 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1935 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1940 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1954 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1973 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1978 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1992 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
+    public static final BitSet FOLLOW_INT_in_duration1997 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect2013 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect2018 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active2036 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active2041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block2056 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs2077 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or2101 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or2111 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2119 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or2125 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2148 = new BitSet(new long[]{0x0000000000000002L,0x0000000800200000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or2170 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or2177 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2188 = new BitSet(new long[]{0x0000000000000002L,0x0000000800200000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and2229 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and2239 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2247 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and2253 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2277 = new BitSet(new long[]{0x0000000000000002L,0x0000001000200000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and2299 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and2306 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2317 = new BitSet(new long[]{0x0000000000000002L,0x0000001000200000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2348 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_not_binding_in_lhs_unary2356 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2362 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2368 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2374 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2380 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2391 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2397 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2405 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary2419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist2435 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2462 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2469 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2477 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2484 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2499 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not_binding2545 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_not_binding2547 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not2570 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2592 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2599 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2608 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2614 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2624 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval2663 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2672 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall2699 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2704 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2712 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2718 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2754 = new BitSet(new long[]{0x0000000000000002L,0x0000006000000000L});
+    public static final BitSet FOLLOW_over_clause_in_pattern_source2758 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_FROM_in_pattern_source2768 = new BitSet(new long[]{0x0000000000000000L,0x0000028000200000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2788 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2821 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source2837 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OVER_in_over_clause2869 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_over_elements_in_over_clause2874 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_COMMA_in_over_clause2881 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_over_elements_in_over_clause2886 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_ID_in_over_elements2901 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_over_elements2908 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_over_elements2917 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_over_elements2924 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2950 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2959 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2967 = new BitSet(new long[]{0x0000000000000000L,0x0000010008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2972 = new BitSet(new long[]{0x0000000000000000L,0x0000010000200000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2982 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2988 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2996 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INIT_in_accumulate_init_clause3042 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3053 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause3058 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause3069 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3073 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause3078 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause3091 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3095 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause3100 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause3115 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_accumulate_paren_chunk_in_accumulate_init_clause3121 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk3179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_paren_chunk_data3203 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_set_in_accumulate_paren_chunk_data3215 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_accumulate_paren_chunk_data_in_accumulate_paren_chunk_data3231 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_paren_chunk_data3242 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause3258 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause3264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_collect_statement3286 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement3295 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement3302 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement3307 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement3334 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement3342 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id3368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id3385 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source3405 = new BitSet(new long[]{0x0000000000000002L,0x0000000004400000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source3420 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source3427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain3460 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain3467 = new BitSet(new long[]{0x0000000000000002L,0x0008000004400000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain3483 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain3497 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain3508 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern3541 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern3554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding3574 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding3580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding3587 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding3595 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding3603 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression3644 = new BitSet(new long[]{0x0000000000000002L,0x0000000800200000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression3656 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3662 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression3667 = new BitSet(new long[]{0x0000000000000002L,0x0000000800200000L});
+    public static final BitSet FOLLOW_pattern_type_in_fact3707 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3712 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_constraints_in_fact3723 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3729 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints3763 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints3767 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_constraint_in_constraints3774 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint3788 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3799 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3803 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3810 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3825 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3829 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3836 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr3869 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr3872 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr3877 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3883 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr3893 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint3927 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3929 = new BitSet(new long[]{0x0000000000000002L,0x0001FC0004200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3936 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint3942 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint3946 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint4000 = new BitSet(new long[]{0x0000000000000000L,0x0001F80004200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint4002 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label4027 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_label4034 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective4055 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective4061 = new BitSet(new long[]{0x0000000000000000L,0x0001F80004200000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective4069 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective4084 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective4090 = new BitSet(new long[]{0x0000000000000000L,0x0001F80004200000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective4097 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression4122 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression4127 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression4132 = new BitSet(new long[]{0x0000000000000000L,0x0001F80004200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression4141 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression4146 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator4175 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator4183 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator4191 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator4199 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator4207 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator4215 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator4223 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator4230 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator4237 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator4244 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator4251 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_neg_operator_key_in_simple_operator4258 = new BitSet(new long[]{0x0000000000000000L,0x000E000606200000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator4261 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator4287 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator4293 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator4299 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator4305 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator4311 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_operator_key_in_simple_operator4318 = new BitSet(new long[]{0x0000000000000000L,0x000E000606200000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator4321 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator4339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator4357 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator4362 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator4364 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator4375 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator4383 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator4387 = new BitSet(new long[]{0x0000000000000000L,0x0006000606200000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator4392 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator4400 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_operator_key4429 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_neg_operator_key4472 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value4512 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value4517 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value4523 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint4542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint4549 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint4556 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint4563 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_literal_constraint4570 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_pattern_type4585 = new BitSet(new long[]{0x0000000000000002L,0x0008000000400000L});
+    public static final BitSet FOLLOW_DOT_in_pattern_type4591 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_pattern_type4595 = new BitSet(new long[]{0x0000000000000002L,0x0008000000400000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type4610 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
+    public static final BitSet FOLLOW_ID_in_data_type4638 = new BitSet(new long[]{0x0000000000000002L,0x0008000000400000L});
+    public static final BitSet FOLLOW_DOT_in_data_type4644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_data_type4648 = new BitSet(new long[]{0x0000000000000002L,0x0008000000400000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type4653 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition4682 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition4689 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path4703 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path4707 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path4711 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element4735 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element4741 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk4770 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data4789 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data4802 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data4815 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data4821 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk4840 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data4863 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data4875 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data4891 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data4902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk4923 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data4947 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data4959 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data4975 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data4986 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk5007 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data5030 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_set_in_square_chunk_data5042 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data5057 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x000000000000000FL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data5068 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key5092 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key5096 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key5100 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key5104 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key5108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key5140 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key5144 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key5148 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key5180 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key5184 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key5188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key5220 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key5224 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key5228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key5260 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key5264 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key5268 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key5300 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key5304 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key5308 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key5340 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key5344 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key5348 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key5380 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key5384 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key5388 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key5420 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key5424 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key5428 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key5457 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key5482 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key5508 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key5535 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key5562 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key5589 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key5616 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key5643 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_extend_key5670 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key5697 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key5724 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key5751 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key5778 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key5805 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key5832 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key5859 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key5886 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key5913 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key5940 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key5967 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key5994 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key6021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key6048 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key6075 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key6102 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key6129 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key6156 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key6183 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key6210 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred12092 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred12094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred22161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred22163 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred32220 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_and_key_in_synpred32222 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred42290 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred42292 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred52415 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred62452 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred62455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred62457 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72580 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred72583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred72585 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred83414 = new BitSet(new long[]{0x0000000000000002L});
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2008-11-12 01:39:11 UTC (rev 23825)
@@ -1,176 +1,172 @@
-// $ANTLR 3.0.1 src/main/resources/org/drools/lang/DescrBuilderTree.g 2008-10-18 17:54:42
+// $ANTLR 3.0.1 src/main/resources/org/drools/lang/DescrBuilderTree.g 2008-11-11 20:36:19
 
 	package org.drools.lang;
 
-	import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
+	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.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.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.TypeDeclarationDescr;
+	import org.drools.lang.descr.TypeFieldDescr;
 
-import org.antlr.runtime.BitSet;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
-import org.antlr.runtime.tree.TreeNodeStream;
-import org.antlr.runtime.tree.TreeParser;
-import org.antlr.runtime.tree.TreeRuleReturnScope;
-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.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.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.TypeDeclarationDescr;
-import org.drools.lang.descr.TypeFieldDescr;
 
+import org.antlr.runtime.*;
+import org.antlr.runtime.tree.*;import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
 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_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_RULE", "VK_EXTEND", "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_ACTION", "VK_REVERSE", "VK_RESULT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "AT", "COLON", "EQUALS", "WHEN", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "FROM", "OVER", "ACCUMULATE", "INIT", "COLLECT", "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_RULE", "VK_EXTEND", "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_ACTION", "VK_REVERSE", "VK_RESULT", "VK_OPERATOR", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "AT", "COLON", "EQUALS", "WHEN", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "FROM", "OVER", "ACCUMULATE", "INIT", "COLLECT", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "GRAVE_ACCENT", "TILDE", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int VT_ACCESSOR_ELEMENT=37;
-    public static final int ACCUMULATE=102;
-    public static final int VT_DATA_TYPE=38;
-    public static final int DOT_STAR=86;
+    public static final int COMMA=91;
+    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 VK_GLOBAL=66;
-    public static final int VK_AND=77;
-    public static final int EQUALS=94;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=127;
+    public static final int END=88;
+    public static final int HexDigit=124;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int MISC=120;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=117;
     public static final int VK_AUTO_FOCUS=49;
-    public static final int VK_SALIENCE=55;
-    public static final int EOF=-1;
-    public static final int VT_PATTERN_TYPE=39;
-    public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VT_OR_INFIX=26;
-    public static final int DOUBLE_AMPER=99;
-    public static final int EOL=121;
-    public static final int GREATER=107;
+    public static final int TILDE=128;
+    public static final int DOT=86;
     public static final int VK_IMPORT=60;
-    public static final int NOT_EQUAL=111;
-    public static final int VK_ACTION=80;
-    public static final int VK_RULE=58;
-    public static final int VK_MEMBEROF=72;
-    public static final int LESS=109;
-    public static final int GRAVE_ACCENT=112;
     public static final int VT_SLOT=15;
-    public static final int VK_OR=76;
-    public static final int VT_AND_PREFIX=23;
-    public static final int NULL=114;
-    public static final int BOOL=96;
-    public static final int VK_QUERY=63;
-    public static final int SEMICOLON=83;
-    public static final int INT=97;
-    public static final int VT_FUNCTION_ID=43;
-    public static final int VT_RHS_CHUNK=17;
-    public static final int VT_FACT_BINDING=32;
-    public static final int VK_ENTRY_POINT=73;
-    public static final int VK_RULEFLOW_GROUP=52;
-    public static final int VK_RESULT=82;
     public static final int VT_PACKAGE_ID=40;
+    public static final int LEFT_SQUARE=115;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=129;
+    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=118;
+    public static final int AT=93;
+    public static final int LEFT_PAREN=90;
+    public static final int DOUBLE_AMPER=100;
+    public static final int VT_QUERY_ID=9;
+    public static final int VT_ACCESSOR_PATH=36;
     public static final int VT_LABEL=8;
+    public static final int WHEN=96;
+    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=122;
-    public static final int VK_NO_LOOP=48;
-    public static final int LEFT_CURLY=118;
-    public static final int VT_FACT=6;
-    public static final int VT_PATTERN=31;
-    public static final int VK_IN=75;
-    public static final int LEFT_PAREN=89;
-    public static final int LESS_EQUAL=110;
-    public static final int VT_IMPORT_ID=41;
-    public static final int VT_RULE_ID=12;
-    public static final int MISC=120;
-    public static final int FROM=100;
-    public static final int END=87;
-    public static final int COLLECT=104;
-    public static final int INIT=103;
-    public static final int EscapeSequence=123;
-    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int OVER=102;
+    public static final int STRING=89;
+    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=81;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=127;
+    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 COLLECT=105;
     public static final int VK_ENABLED=56;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=128;
+    public static final int EQUALS=95;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=125;
     public static final int VK_PACKAGE=61;
-    public static final int OVER=101;
-    public static final int VK_EXTEND=59;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=107;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=62;
+    public static final int VT_AND_IMPLICIT=22;
+    public static final int NULL=114;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=131;
+    public static final int VT_RULE_ATTRIBUTES=16;
     public static final int RIGHT_SQUARE=116;
-    public static final int RIGHT_CURLY=119;
-    public static final int VK_MATCHES=69;
+    public static final int VK_AGENDA_GROUP=51;
     public static final int VT_FACT_OR=33;
-    public static final int VT_FIELD=35;
-    public static final int FLOAT=113;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
-    public static final int VK_EXISTS=78;
+    public static final int VK_NOT=74;
     public static final int VK_DATE_EXPIRES=46;
-    public static final int ID=84;
-    public static final int HexDigit=124;
+    public static final int ARROW=106;
+    public static final int FLOAT=113;
+    public static final int INIT=104;
+    public static final int VK_EXTEND=59;
+    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=99;
+    public static final int LESS=110;
+    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=123;
+    public static final int VK_EXISTS=78;
+    public static final int INT=98;
+    public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=58;
     public static final int VK_EVAL=67;
-    public static final int DOUBLE_PIPE=98;
-    public static final int AT=92;
-    public static final int RIGHT_PAREN=91;
-    public static final int THEN=117;
-    public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_EXPRESSION_CHAIN=30;
-    public static final int COMMA=90;
-    public static final int EQUAL=106;
-    public static final int VT_BEHAVIOR=21;
-    public static final int VT_QUERY_ID=9;
-    public static final int VK_DIALECT=54;
-    public static final int DOT=85;
-    public static final int VT_GLOBAL_ID=42;
-    public static final int VK_NOT=74;
+    public static final int GREATER=108;
+    public static final int VT_FACT_BINDING=32;
+    public static final int ID=85;
+    public static final int FROM=101;
+    public static final int NOT_EQUAL=112;
+    public static final int RIGHT_CURLY=119;
+    public static final int VK_OPERATOR=83;
+    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=97;
     public static final int VT_FROM_SOURCE=29;
-    public static final int VK_DECLARE=64;
-    public static final int VT_ENTRYPOINT_ID=13;
-    public static final int VT_PAREN_CHUNK=20;
     public static final int VK_CONTAINS=68;
-    public static final int VT_TYPE_DECLARE_ID=11;
-    public static final int VK_REVERSE=81;
     public static final int VK_LOCK_ON_ACTIVE=47;
-    public static final int VK_TEMPLATE=62;
-    public static final int VK_DURATION=53;
-    public static final int VT_RULE_ATTRIBUTES=16;
-    public static final int VT_AND_INFIX=25;
-    public static final int VT_ACCESSOR_PATH=36;
-    public static final int MULTI_LINE_COMMENT=129;
-    public static final int VK_FORALL=79;
-    public static final int COLON=93;
-    public static final int VK_EXCLUDES=70;
-    public static final int VK_SOUNDSLIKE=71;
-    public static final int VT_AND_IMPLICIT=22;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
-    public static final int VT_CURLY_CHUNK=18;
-    public static final int VT_SLOT_ID=14;
-    public static final int VK_ATTRIBUTES=57;
-    public static final int WHEN=95;
-    public static final int UnicodeEscape=125;
-    public static final int VT_SQUARE_CHUNK=19;
-    public static final int VK_DATE_EFFECTIVE=45;
-    public static final int VT_TEMPLATE_ID=10;
-    public static final int VT_PARAM_LIST=44;
-    public static final int ARROW=105;
-    public static final int VT_BIND_FIELD=34;
-    public static final int VK_AGENDA_GROUP=51;
+    public static final int VT_FUNCTION_IMPORT=5;
+    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=109;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=111;
+    public static final int ACCUMULATE=103;
+    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 LEFT_SQUARE=115;
-    public static final int GREATER_EQUAL=108;
+    public static final int VT_IMPORT_ID=41;
+    public static final int EOL=121;
+    public static final int VK_ACTIVATION_GROUP=50;
     public static final int OctalEscape=126;
-    public static final int STRING=88;
+    public static final int VK_ACTION=80;
+    public static final int VK_EXCLUDES=70;
+    public static final int RIGHT_PAREN=92;
+    public static final int VT_TEMPLATE_ID=10;
+    public static final int VK_DECLARE=64;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=130;
 
         public DescrBuilderTree(TreeNodeStream input) {
             super(input);
@@ -180,7 +176,7 @@
     public String[] getTokenNames() { return tokenNames; }
     public String getGrammarFileName() { return "src/main/resources/org/drools/lang/DescrBuilderTree.g"; }
 
-
+    
     	DescrFactory factory = new DescrFactory();
     	PackageDescr packageDescr = null;
     	
@@ -891,7 +887,7 @@
         FieldTemplateDescr ts = null;
 
 
-
+        
         	List slotList = new LinkedList<FieldTemplateDescr>();
 
         try {
@@ -1257,7 +1253,7 @@
         AttributeDescr rl = null;
 
 
-
+        
         	attrList = new LinkedList<AttributeDescr>();
 
         try {
@@ -1344,7 +1340,7 @@
         Map p = null;
 
 
-
+        
         	paramList = new LinkedList<Map<BaseDescr, BaseDescr>>();
 
         try {
@@ -2187,7 +2183,7 @@
         lhs_return dt = null;
 
 
-
+        
         	andDescr = new AndDescr();
 
         try {
@@ -2267,7 +2263,7 @@
         from_elements_return fe = null;
 
 
-
+        
         	List<BaseDescr> lhsList = new LinkedList<BaseDescr>();
 
         try {
@@ -3332,7 +3328,7 @@
     };
 
     // $ANTLR start fact_expression
-    // src/main/resources/org/drools/lang/DescrBuilderTree.g:321: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 (n!
 ot= 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 );
+    // src/main/resources/org/drools/lang/DescrBuilderTree.g:321: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= VK_OP!
 ERATOR (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);
@@ -3363,11 +3359,11 @@
         BaseDescr ae = null;
 
 
-
+        
         	List<BaseDescr> exprList = new LinkedList<BaseDescr>();
 
         try {
-            // src/main/resources/org/drools/lang/DescrBuilderTree.g:324: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_expression ) | ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUN!
 K )? 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 )
+            // src/main/resources/org/drools/lang/DescrBuilderTree.g:324: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_expression ) | ^(op= VK_OPERATOR (not= VK_NOT )? (param= VT_SQ!
 UARE_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 alt56=28;
             switch ( input.LA(1) ) {
             case VT_FACT:
@@ -3455,7 +3451,7 @@
                 alt56=17;
                 }
                 break;
-            case ID:
+            case VK_OPERATOR:
                 {
                 alt56=18;
                 }
@@ -3512,7 +3508,7 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("321: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 );", 56, 0, input);
+                    new NoViableAltException("321: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= VK_OPERATOR (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 );", 56, 0, input);
 
                 throw nvae;
             }
@@ -3534,7 +3530,7 @@
                         int alt44=2;
                         int LA44_0 = input.LA(1);
 
-                        if ( (LA44_0==VT_FACT||LA44_0==VT_PAREN_CHUNK||(LA44_0>=VT_FACT_BINDING && LA44_0<=VT_ACCESSOR_PATH)||(LA44_0>=VK_EVAL && LA44_0<=VK_MEMBEROF)||LA44_0==VK_IN||LA44_0==ID||LA44_0==STRING||(LA44_0>=BOOL && LA44_0<=DOUBLE_AMPER)||(LA44_0>=EQUAL && LA44_0<=NOT_EQUAL)||(LA44_0>=FLOAT && LA44_0<=NULL)) ) {
+                        if ( (LA44_0==VT_FACT||LA44_0==VT_PAREN_CHUNK||(LA44_0>=VT_FACT_BINDING && LA44_0<=VT_ACCESSOR_PATH)||(LA44_0>=VK_EVAL && LA44_0<=VK_MEMBEROF)||LA44_0==VK_IN||LA44_0==VK_OPERATOR||LA44_0==STRING||(LA44_0>=BOOL && LA44_0<=DOUBLE_AMPER)||(LA44_0>=EQUAL && LA44_0<=NULL)) ) {
                             alt44=1;
                         }
 
@@ -3616,7 +3612,7 @@
                     int alt45=2;
                     int LA45_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)) ) {
+                    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==VK_OPERATOR||LA45_0==STRING||(LA45_0>=BOOL && LA45_0<=DOUBLE_AMPER)||(LA45_0>=EQUAL && LA45_0<=NULL)) ) {
                         alt45=1;
                     }
                     switch (alt45) {
@@ -3958,13 +3954,13 @@
                     }
                     break;
                 case 18 :
-                    // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:4: ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression )
+                    // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:4: ^(op= VK_OPERATOR (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_fact_expression2010); 
+                    match(input,VK_OPERATOR,FOLLOW_VK_OPERATOR_in_fact_expression2010); 
 
                     match(input, Token.DOWN, null); 
-                    // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:15: (not= VK_NOT )?
+                    // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:24: (not= VK_NOT )?
                     int alt51=2;
                     int LA51_0 = input.LA(1);
 
@@ -3973,7 +3969,7 @@
                     }
                     switch (alt51) {
                         case 1 :
-                            // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:15: not= VK_NOT
+                            // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:24: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
                             match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression2014); 
@@ -3983,7 +3979,7 @@
 
                     }
 
-                    // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:29: (param= VT_SQUARE_CHUNK )?
+                    // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:38: (param= VT_SQUARE_CHUNK )?
                     int alt52=2;
                     int LA52_0 = input.LA(1);
 
@@ -3992,7 +3988,7 @@
                     }
                     switch (alt52) {
                         case 1 :
-                            // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:29: param= VT_SQUARE_CHUNK
+                            // src/main/resources/org/drools/lang/DescrBuilderTree.g:365:38: param= VT_SQUARE_CHUNK
                             {
                             param=(DroolsTree)input.LT(1);
                             match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression2019); 
@@ -4044,7 +4040,7 @@
                         int alt54=2;
                         int LA54_0 = input.LA(1);
 
-                        if ( (LA54_0==VT_FACT||LA54_0==VT_PAREN_CHUNK||(LA54_0>=VT_FACT_BINDING && LA54_0<=VT_ACCESSOR_PATH)||(LA54_0>=VK_EVAL && LA54_0<=VK_MEMBEROF)||LA54_0==VK_IN||LA54_0==ID||LA54_0==STRING||(LA54_0>=BOOL && LA54_0<=DOUBLE_AMPER)||(LA54_0>=EQUAL && LA54_0<=NOT_EQUAL)||(LA54_0>=FLOAT && LA54_0<=NULL)) ) {
+                        if ( (LA54_0==VT_FACT||LA54_0==VT_PAREN_CHUNK||(LA54_0>=VT_FACT_BINDING && LA54_0<=VT_ACCESSOR_PATH)||(LA54_0>=VK_EVAL && LA54_0<=VK_MEMBEROF)||LA54_0==VK_IN||LA54_0==VK_OPERATOR||LA54_0==STRING||(LA54_0>=BOOL && LA54_0<=DOUBLE_AMPER)||(LA54_0>=EQUAL && LA54_0<=NULL)) ) {
                             alt54=1;
                         }
 
@@ -4239,7 +4235,7 @@
         BaseDescr ae = null;
 
 
-
+        
         	List<BaseDescr> aeList = new LinkedList<BaseDescr>();
 
         try {
@@ -4572,7 +4568,7 @@
     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,0x0000000000100000L});
+    public static final BitSet FOLLOW_ID_in_package_id106 = new BitSet(new long[]{0x0000000000000008L,0x0000000000200000L});
     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});
@@ -4588,7 +4584,7 @@
     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,0x0000000000500000L});
+    public static final BitSet FOLLOW_ID_in_import_name281 = new BitSet(new long[]{0x0000000000000008L,0x0000000000A00000L});
     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});
@@ -4600,7 +4596,7 @@
     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,0x0000000000800000L});
+    public static final BitSet FOLLOW_template_slot_in_template394 = new BitSet(new long[]{0x0000000000008000L,0x0000000001000000L});
     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});
@@ -4608,14 +4604,14 @@
     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,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_block_in_query465 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
     public static final BitSet FOLLOW_END_in_query469 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_RULE_in_rule496 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_RULE_ID_in_rule500 = new BitSet(new long[]{0x0800000000030000L,0x0000000090000000L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule500 = new BitSet(new long[]{0x0800000000030000L,0x0000000120000000L});
     public static final BitSet FOLLOW_VK_EXTEND_in_rule505 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_RULE_ID_in_rule509 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_decl_metadata_in_rule519 = new BitSet(new long[]{0x0000000000030000L,0x0000000090000000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule530 = new BitSet(new long[]{0x0000000000020000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_rule519 = new BitSet(new long[]{0x0000000000030000L,0x0000000120000000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule530 = new BitSet(new long[]{0x0000000000020000L,0x0000000100000000L});
     public static final BitSet FOLLOW_when_part_in_rule539 = new BitSet(new long[]{0x0000000000020000L});
     public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule544 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_WHEN_in_when_part563 = new BitSet(new long[]{0x0000000000400000L});
@@ -4624,24 +4620,24 @@
     public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes591 = new BitSet(new long[]{0x01FFE00000000000L});
     public static final BitSet FOLLOW_rule_attribute_in_rule_attributes597 = new BitSet(new long[]{0x01FFE00000000008L});
     public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters621 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_param_definition_in_parameters626 = new BitSet(new long[]{0x0000004000000008L,0x0000000000100000L});
-    public static final BitSet FOLLOW_data_type_in_param_definition648 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters626 = new BitSet(new long[]{0x0000004000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition648 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
     public static final BitSet FOLLOW_argument_in_param_definition653 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_ID_in_argument673 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
     public static final BitSet FOLLOW_LEFT_SQUARE_in_argument676 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
     public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument680 = new BitSet(new long[]{0x0000000000000002L,0x0008000000000000L});
     public static final BitSet FOLLOW_VK_DECLARE_in_type_declaration706 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration710 = new BitSet(new long[]{0x0000000000000000L,0x0000000010900000L});
-    public static final BitSet FOLLOW_decl_metadata_in_type_declaration719 = new BitSet(new long[]{0x0000000000000000L,0x0000000010900000L});
-    public static final BitSet FOLLOW_decl_field_in_type_declaration732 = new BitSet(new long[]{0x0000000000000000L,0x0000000000900000L});
+    public static final BitSet FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration710 = new BitSet(new long[]{0x0000000000000000L,0x0000000021200000L});
+    public static final BitSet FOLLOW_decl_metadata_in_type_declaration719 = new BitSet(new long[]{0x0000000000000000L,0x0000000021200000L});
+    public static final BitSet FOLLOW_decl_field_in_type_declaration732 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
     public static final BitSet FOLLOW_END_in_type_declaration738 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_AT_in_decl_metadata763 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_ID_in_decl_metadata767 = new BitSet(new long[]{0x0000000000100000L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_metadata771 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_ID_in_decl_field798 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_decl_field_initialization_in_decl_field802 = new BitSet(new long[]{0x0000004000000000L});
-    public static final BitSet FOLLOW_data_type_in_decl_field807 = new BitSet(new long[]{0x0000000000000008L,0x0000000010000000L});
-    public static final BitSet FOLLOW_decl_metadata_in_decl_field812 = new BitSet(new long[]{0x0000000000000008L,0x0000000010000000L});
+    public static final BitSet FOLLOW_data_type_in_decl_field807 = new BitSet(new long[]{0x0000000000000008L,0x0000000020000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_decl_field812 = new BitSet(new long[]{0x0000000000000008L,0x0000000020000000L});
     public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization839 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization843 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute866 = new BitSet(new long[]{0x0000000000000004L});
@@ -4671,16 +4667,16 @@
     public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute1038 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_STRING_in_rule_attribute1042 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block1067 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs_block1072 = new BitSet(new long[]{0x0000000087800008L,0x000000100000C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block1072 = new BitSet(new long[]{0x0000000087800008L,0x000000200000C408L});
     public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs1098 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs1103 = new BitSet(new long[]{0x0000000087800008L,0x000000100000C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1103 = new BitSet(new long[]{0x0000000087800008L,0x000000200000C408L});
     public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs1119 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs1123 = new BitSet(new long[]{0x0000000087800000L,0x000000100000C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1123 = new BitSet(new long[]{0x0000000087800000L,0x000000200000C408L});
     public static final BitSet FOLLOW_lhs_in_lhs1127 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs1139 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs1144 = new BitSet(new long[]{0x0000000087800008L,0x000000100000C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1144 = new BitSet(new long[]{0x0000000087800008L,0x000000200000C408L});
     public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs1160 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs1164 = new BitSet(new long[]{0x0000000087800000L,0x000000100000C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1164 = new BitSet(new long[]{0x0000000087800000L,0x000000200000C408L});
     public static final BitSet FOLLOW_lhs_in_lhs1168 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EXISTS_in_lhs1180 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_lhs_in_lhs1184 = new BitSet(new long[]{0x0000000000000008L});
@@ -4689,9 +4685,9 @@
     public static final BitSet FOLLOW_VK_EVAL_in_lhs1212 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs1216 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_FORALL_in_lhs1228 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs1233 = new BitSet(new long[]{0x0000000087800008L,0x000000100000C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1233 = new BitSet(new long[]{0x0000000087800008L,0x000000200000C408L});
     public static final BitSet FOLLOW_FROM_in_lhs1247 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs1251 = new BitSet(new long[]{0x0000000020000000L,0x0000014000000200L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs1251 = new BitSet(new long[]{0x0000000020000000L,0x0000028000000200L});
     public static final BitSet FOLLOW_from_elements_in_lhs1255 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_lhs_pattern_in_lhs1266 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_ACCUMULATE_in_from_elements1287 = new BitSet(new long[]{0x0000000000000004L});
@@ -4732,23 +4728,23 @@
     public static final BitSet FOLLOW_OVER_in_over_clause1633 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_over_element_in_over_clause1638 = new BitSet(new long[]{0x0000000000200008L});
     public static final BitSet FOLLOW_VT_BEHAVIOR_in_over_element1659 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_over_element1661 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
+    public static final BitSet FOLLOW_ID_in_over_element1661 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
     public static final BitSet FOLLOW_ID_in_over_element1665 = new BitSet(new long[]{0x0000000000100000L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_over_element1669 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FACT_in_fact_expression1692 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_pattern_type_in_fact_expression1696 = new BitSet(new long[]{0x0000001F00100048L,0x0006FC0F011009F8L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1701 = new BitSet(new long[]{0x0000001F00100048L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_pattern_type_in_fact_expression1696 = new BitSet(new long[]{0x0000001F00100048L,0x0007F81E020809F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1701 = new BitSet(new long[]{0x0000001F00100048L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression1715 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1719 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1719 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1723 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression1735 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1739 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1739 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1743 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1754 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_field_element_in_fact_expression1758 = new BitSet(new long[]{0x0000001F00100048L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_field_element_in_fact_expression1758 = new BitSet(new long[]{0x0000001F00100048L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1762 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1773 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1777 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1777 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1781 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EVAL_in_fact_expression1792 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1796 = new BitSet(new long[]{0x0000000000000008L});
@@ -4765,32 +4761,32 @@
     public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression1889 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1893 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression1905 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1909 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1909 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1914 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression1926 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1930 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1930 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1935 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression1947 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1951 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1951 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1956 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression1968 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1972 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1972 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1977 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression1989 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1993 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1993 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1998 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_ID_in_fact_expression2010 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression2014 = new BitSet(new long[]{0x0000001F00180040L,0x0006FC0F011009F8L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression2019 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_OPERATOR_in_fact_expression2010 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression2014 = new BitSet(new long[]{0x0000001F00180040L,0x0007F81E020809F8L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression2019 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression2024 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_IN_in_fact_expression2035 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression2039 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression2045 = new BitSet(new long[]{0x0000001F00100048L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression2039 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2045 = new BitSet(new long[]{0x0000001F00100048L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression2060 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression2064 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2064 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression2068 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression2078 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression2082 = new BitSet(new long[]{0x0000001F00100040L,0x0006FC0F011009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2082 = new BitSet(new long[]{0x0000001F00100040L,0x0007F81E020809F8L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression2086 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression2097 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_accessor_element_in_fact_expression2102 = new BitSet(new long[]{0x0000002000000008L});
@@ -4806,12 +4802,12 @@
     public static final BitSet FOLLOW_ID_in_accessor_element2222 = new BitSet(new long[]{0x0000000000080008L});
     public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element2226 = new BitSet(new long[]{0x0000000000080008L});
     public static final BitSet FOLLOW_VT_PATTERN_TYPE_in_pattern_type2247 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_pattern_type2251 = new BitSet(new long[]{0x0000000000000008L,0x0008000000100000L});
+    public static final BitSet FOLLOW_ID_in_pattern_type2251 = new BitSet(new long[]{0x0000000000000008L,0x0008000000200000L});
     public static final BitSet FOLLOW_LEFT_SQUARE_in_pattern_type2255 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
     public static final BitSet FOLLOW_RIGHT_SQUARE_in_pattern_type2259 = new BitSet(new long[]{0x0000000000000008L,0x0008000000000000L});
     public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type2281 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_data_type2285 = new BitSet(new long[]{0x0000000000000008L,0x0008000000100000L});
+    public static final BitSet FOLLOW_ID_in_data_type2285 = new BitSet(new long[]{0x0000000000000008L,0x0008000000200000L});
     public static final BitSet FOLLOW_LEFT_SQUARE_in_data_type2289 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
     public static final BitSet FOLLOW_RIGHT_SQUARE_in_data_type2293 = new BitSet(new long[]{0x0000000000000008L,0x0008000000000000L});
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DroolsSoftKeywords.java
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DroolsSoftKeywords.java	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/main/java/org/drools/lang/DroolsSoftKeywords.java	2008-11-12 01:39:11 UTC (rev 23825)
@@ -1,5 +1,11 @@
 package org.drools.lang;
 
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.evaluators.Operator;
+
 /**
  * Simple holder class identifying all the DRL soft keywords. This is used by
  * DRLParser.
@@ -52,4 +58,13 @@
 	public static final String ACTION = "action";
 	public static final String REVERSE = "reverse";
 	public static final String RESULT = "result";
+	
+	public static boolean isOperator( final String operator, final boolean negated ) {
+	    try {
+	        Operator.determineOperator( operator, negated );
+	        return true;
+	    } catch( RuntimeDroolsException rde )  {
+	        return false;
+	    }
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-11-12 01:39:11 UTC (rev 23825)
@@ -94,6 +94,7 @@
 	VK_ACTION;
 	VK_REVERSE;
 	VK_RESULT;
+	VK_OPERATOR;
 }
 
 @parser::header {
@@ -212,19 +213,32 @@
 		}
 		return lastIntergerValue;
 	}
-
-	private boolean validateLT(int LTNumber, String text) {
-		if (null == input)
-			return false;
+	
+	private String retrieveLT(int LTNumber) {
+      		if (null == input)
+			return null;
 		if (null == input.LT(LTNumber))
-			return false;
+			return null;
 		if (null == input.LT(LTNumber).getText())
-			return false;
+			return null;
 	
-		String text2Validate = input.LT(LTNumber).getText();
-		return text2Validate.equalsIgnoreCase(text);
+		return input.LT(LTNumber).getText();
 	}
+
+	private boolean validateLT(int LTNumber, String text) {
+		String text2Validate = retrieveLT( LTNumber );
+		return text2Validate == null ? false : text2Validate.equalsIgnoreCase(text);
+	}
 	
+	private boolean isPluggableEvaluator( int offset, boolean negated ) {
+		String text2Validate = retrieveLT( offset );
+	        return text2Validate == null ? false : DroolsSoftKeywords.isOperator( text2Validate, negated );
+	}
+	
+	private boolean isPluggableEvaluator( boolean negated ) {
+	        return isPluggableEvaluator( 1, negated );
+	}
+	
 	private boolean validateIdentifierKey(String text) {
 		return validateLT(1, text);
 	}
@@ -395,7 +409,7 @@
 
 compilation_unit
 	:	package_statement?
-		statement*
+		statement* 
 		EOF
 		-> ^(VT_COMPILATION_UNIT package_statement? statement*) 
 	;
@@ -1156,6 +1170,7 @@
 }
 
 field_constraint
+options { backtrack=true; }
 @init{
 	boolean isArrow = false;
 }	:	label accessor_path 
@@ -1185,7 +1200,8 @@
 constraint_expression
 options{
 k=3;
-}	:	compound_operator
+}	
+ 	:	compound_operator
 	|	simple_operator
 	|	LEFT_PAREN! {	emit($LEFT_PAREN, DroolsEditorType.SYMBOL);	} 
 			or_restr_connective 
@@ -1245,15 +1261,19 @@
 		|	soundslike_key^
 		|	matches_key^
 		|	memberof_key^
-		|	id1=ID^ {	emit($id1, DroolsEditorType.IDENTIFIER);	}
-		|	ga1=GRAVE_ACCENT!  {	emit($ga1, DroolsEditorType.SYMBOL);	} id2=ID^  {	emit($id2, DroolsEditorType.IDENTIFIER);	} square_chunk)
+		|	neg_operator_key^ square_chunk?
+//		|	neg_operator_key^ 
+//		|	ga1=TILDE!  {	emit($ga1, DroolsEditorType.SYMBOL);	} neg_operator_key^ square_chunk
+                )
 	|	contains_key^
 	|	excludes_key^
 	|	matches_key^
 	|	soundslike_key^
 	|	memberof_key^
-	|	id3=ID^ {	emit($id3, DroolsEditorType.IDENTIFIER);	}
-	|	ga2=GRAVE_ACCENT!  {	emit($ga2, DroolsEditorType.SYMBOL);	} id4=ID^  {	emit($id4, DroolsEditorType.IDENTIFIER);	} square_chunk)
+//	|	param_operator^ square_chunk
+	|	operator_key^ square_chunk?
+//	|	ga2=TILDE!  {	emit($ga2, DroolsEditorType.SYMBOL);	} operator_key^ square_chunk
+        )
 	{	emit(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);	}
 	expression_value
 	;
@@ -1275,6 +1295,24 @@
 		emit(true, Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
 	}	}
 
+operator_key
+	:      {(isPluggableEvaluator(false))}? id=ID
+	       { emit($id, DroolsEditorType.IDENTIFIER); }
+	       -> VK_OPERATOR[$id]
+	;
+
+neg_operator_key
+	:      {(isPluggableEvaluator(true))}? id=ID 
+	       { emit($id, DroolsEditorType.IDENTIFIER); } 
+	       -> VK_OPERATOR[$id]
+	;
+	
+/*param_operator
+	:	( id=AFTER -> VK_OPERATOR[$id.text]
+		| id2=BEFORE -> VK_OPERATOR[$id2.text]
+		)
+	;	
+*/
 expression_value
 	:	(accessor_path
 	|	literal_constraint 
@@ -1522,13 +1560,13 @@
 	;
 
 package_key
-	:	{(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))}?=>  id=ID
+	:	{(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))}? id=ID
 	{	emit($id, DroolsEditorType.KEYWORD);	}
 		->	VK_PACKAGE[$id]
 	;
 
 import_key
-	:	{(validateIdentifierKey(DroolsSoftKeywords.IMPORT))}?=>  id=ID
+	:	{(validateIdentifierKey(DroolsSoftKeywords.IMPORT))}?  id=ID
 	{	emit($id, DroolsEditorType.KEYWORD);	}
 		->	VK_IMPORT[$id]
 	;
@@ -1782,10 +1820,20 @@
 WHEN
 	:	'when'
 	;
-
+	
+/*AFTER
+	:	'after'
+	;
+	
+BEFORE
+	:	'before'
+	;
+*/
 GRAVE_ACCENT
 	:	'`'
 	;
+	
+TILDE	:	'~';	
 
 AT	:	'@'
 	;
@@ -1896,4 +1944,4 @@
 
 MISC 	:
 		'!' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '/' | '\'' | '\\' | '|' | '&'
-	;
\ No newline at end of file
+	;

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2008-11-12 01:39:11 UTC (rev 23825)
@@ -362,7 +362,7 @@
 	{	$descr = factory.setupRestriction($op, $not, $fe.descr);	}
 	|	^(op=VK_MEMBEROF not=VK_NOT? fe=fact_expression)
 	{	$descr = factory.setupRestriction($op, $not, $fe.descr);	}
-	|	^(op=ID not=VK_NOT? param=VT_SQUARE_CHUNK? fe=fact_expression)
+	|	^(op=VK_OPERATOR not=VK_NOT? param=VT_SQUARE_CHUNK? fe=fact_expression)
 	{	$descr = factory.setupRestriction($op, $not, $fe.descr, $param);	}
 
 	|	^(VK_IN not=VK_NOT? (fe=fact_expression {exprList.add($fe.descr);})+)
@@ -409,4 +409,4 @@
 data_type returns [BaseDescr dataType]
 	:	^(VT_DATA_TYPE idList+=ID+ (LEFT_SQUARE rightList+=RIGHT_SQUARE)*)
 	{	$dataType = factory.createDataType($idList, $rightList);	}
-	;
\ No newline at end of file
+	;

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2008-11-12 01:39:11 UTC (rev 23825)
@@ -23,7 +23,9 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import junit.framework.TestCase;
 
@@ -31,6 +33,7 @@
 import org.antlr.runtime.CharStream;
 import org.antlr.runtime.CommonTokenStream;
 import org.antlr.runtime.tree.CommonTreeNodeStream;
+import org.drools.base.evaluators.EvaluatorRegistry;
 import org.drools.compiler.DrlParser;
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.AccumulateDescr;
@@ -76,6 +79,9 @@
 	protected void setUp() throws Exception {
 		super.setUp();
 		this.walker = null;
+		
+		// initializes pluggable operators
+		new EvaluatorRegistry();
 	}
 
 	protected void tearDown() throws Exception {
@@ -3229,4 +3235,5 @@
 
 		assertEquals(cleanExpected, cleanActual);
 	}
+	
 }

Modified: labs/jbossrules/branches/etirelli/drools-compiler/src/test/resources/org/drools/lang/pluggable_operators.drl
===================================================================
--- labs/jbossrules/branches/etirelli/drools-compiler/src/test/resources/org/drools/lang/pluggable_operators.drl	2008-11-12 01:28:27 UTC (rev 23824)
+++ labs/jbossrules/branches/etirelli/drools-compiler/src/test/resources/org/drools/lang/pluggable_operators.drl	2008-11-12 01:39:11 UTC (rev 23825)
@@ -3,9 +3,9 @@
 rule "test pluggable operators"
 when
     $a : EventA()
-    $b : EventB( this ` after[1,10] $a )
+    $b : EventB( this after[1,10] $a )
     $c : EventC( this finishes $b )
     $d : EventD( this not starts $a )
-    $e : EventE( this not ` before [1, 10] $b )
+    $e : EventE( this not before[1, 10] $b )
 then
 end
\ No newline at end of file




More information about the jboss-svn-commits mailing list