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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 8 17:16:09 EDT 2008


Author: porcelli
Date: 2008-05-08 17:16:04 -0400 (Thu, 08 May 2008)
New Revision: 19914

Modified:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g
Log:
NewDRL and its TreeWalker now supports the full DRL language.

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java	2008-05-08 18:46:10 UTC (rev 19913)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java	2008-05-08 21:16:04 UTC (rev 19914)
@@ -1,6 +1,6 @@
 package org.drools.lang;
 
-// $ANTLR 3.0.1 /Users/porcelli/Desktop/testes/NewDRL.g 2008-04-28 10:54:02
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g 2008-05-08 18:07:22
 
 import org.antlr.runtime.*;
 import java.util.Stack;
@@ -9,103 +9,141 @@
 import java.util.Map;
 import java.util.HashMap;
 public class NewDRLLexer extends Lexer {
-    public static final int COMMA=53;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=18;
-    public static final int VT_FACT_OR=23;
-    public static final int VK_NOT=35;
-    public static final int HexDigit=77;
-    public static final int VK_ACCUMULATE=42;
-    public static final int VT_EXPRESSION_CHAIN=20;
-    public static final int ARROW=56;
-    public static final int VT_AND_PREFIX=13;
-    public static final int MISC=73;
-    public static final int FLOAT=66;
-    public static final int VT_CURLY_CHUNK=9;
-    public static final int TILDE=80;
-    public static final int DOT=55;
-    public static final int VT_OR_PREFIX=14;
-    public static final int DOUBLE_PIPE=50;
-    public static final int LESS=61;
-    public static final int VT_PATTERN=21;
-    public static final int EscapeSequence=76;
-    public static final int VK_EXISTS=39;
-    public static final int INT=65;
-    public static final int VT_BIND_FIELD=24;
-    public static final int VK_COLLECT=47;
-    public static final int VK_EVAL=28;
-    public static final int LEFT_SQUARE=69;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=81;
-    public static final int GREATER=59;
-    public static final int VT_FACT=4;
-    public static final int VK_MATCHES=30;
-    public static final int LEFT_CURLY=71;
-    public static final int VT_FACT_BINDING=22;
-    public static final int ID=54;
-    public static final int NOT_EQUAL=63;
-    public static final int DOUBLE_AMPER=51;
-    public static final int LEFT_PAREN=48;
-    public static final int RIGHT_CURLY=72;
-    public static final int BOOL=67;
-    public static final int VT_AND_INFIX=15;
-    public static final int VK_ENTRY_POINT=34;
-    public static final int VT_ACCESSOR_PATH=26;
-    public static final int VT_FROM_SOURCE=19;
-    public static final int VT_LABEL=7;
-    public static final int VK_CONTAINS=29;
-    public static final int VK_SOUNDSLIKE=32;
-    public static final int VT_FIELD=25;
-    public static final int WS=75;
-    public static final int VT_QUALIFIED_ID=6;
-    public static final int VK_AND=38;
-    public static final int STRING=64;
-    public static final int VK_IN=36;
-    public static final int VT_ACCESSOR_ELEMENT=27;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=17;
-    public static final int VK_REVERSE=45;
-    public static final int VK_MEMBEROF=33;
-    public static final int GREATER_EQUAL=60;
-    public static final int VT_OR_INFIX=16;
-    public static final int VK_FORALL=40;
-    public static final int VT_SQUARE_CHUNK=10;
-    public static final int VK_OR=37;
-    public static final int VT_PAREN_CHUNK=11;
-    public static final int VT_NAME=8;
-    public static final int LESS_EQUAL=62;
-    public static final int VK_RESULT=46;
-    public static final int UnicodeEscape=78;
-    public static final int EQUAL=58;
-    public static final int SEMICOLON=52;
-    public static final int VT_AND_IMPLICIT=12;
+    public static final int COMMA=91;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
+    public static final int VK_FUNCTION=62;
+    public static final int VK_DIALECT=51;
+    public static final int END=88;
+    public static final int HexDigit=116;
+    public static final int VK_ATTRIBUTES=54;
+    public static final int VT_EXPRESSION_CHAIN=28;
+    public static final int VK_ACCUMULATE=78;
+    public static final int MISC=112;
+    public static final int VT_AND_PREFIX=21;
+    public static final int VK_QUERY=60;
+    public static final int THEN=109;
+    public static final int VK_AUTO_FOCUS=46;
+    public static final int DOT=86;
+    public static final int VK_IMPORT=57;
+    public static final int VT_SLOT=14;
+    public static final int VT_PACKAGE_ID=37;
+    public static final int LEFT_SQUARE=107;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_DATA_TYPE=36;
+    public static final int VK_MATCHES=66;
+    public static final int VT_FACT=6;
+    public static final int LEFT_CURLY=110;
+    public static final int LEFT_PAREN=90;
+    public static final int DOUBLE_AMPER=97;
+    public static final int VT_QUERY_ID=9;
+    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_LABEL=8;
+    public static final int VT_ENTRYPOINT_ID=12;
+    public static final int VK_SOUNDSLIKE=68;
+    public static final int VK_SALIENCE=52;
+    public static final int VT_FIELD=33;
+    public static final int WS=114;
+    public static final int STRING=89;
+    public static final int VK_AND=74;
+    public static final int VT_ACCESSOR_ELEMENT=35;
+    public static final int VK_REVERSE=81;
+    public static final int VK_GLOBAL=63;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
+    public static final int VK_DURATION=50;
+    public static final int VT_SQUARE_CHUNK=18;
+    public static final int VK_FORALL=76;
+    public static final int VT_COMPILATION_UNIT=4;
+    public static final int VT_PAREN_CHUNK=19;
+    public static final int VK_ENABLED=53;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=117;
+    public static final int VK_PACKAGE=58;
+    public static final int VT_RULE_ID=11;
+    public static final int EQUAL=99;
+    public static final int VK_NO_LOOP=45;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=59;
+    public static final int VT_AND_IMPLICIT=20;
+    public static final int NULL=106;
+    public static final int COLON=93;
+    public static final int MULTI_LINE_COMMENT=121;
+    public static final int VT_RULE_ATTRIBUTES=15;
+    public static final int RIGHT_SQUARE=108;
+    public static final int VK_AGENDA_GROUP=48;
+    public static final int VT_FACT_OR=31;
+    public static final int VK_NOT=71;
+    public static final int VK_DATE_EXPIRES=43;
+    public static final int ARROW=98;
+    public static final int FLOAT=105;
+    public static final int VT_SLOT_ID=13;
+    public static final int VT_CURLY_CHUNK=17;
+    public static final int VT_OR_PREFIX=22;
+    public static final int DOUBLE_PIPE=96;
+    public static final int LESS=102;
+    public static final int VT_PATTERN=29;
+    public static final int VK_DATE_EFFECTIVE=42;
+    public static final int EscapeSequence=115;
+    public static final int VK_EXISTS=75;
+    public static final int INT=95;
+    public static final int VT_BIND_FIELD=32;
+    public static final int VK_RULE=56;
+    public static final int VK_EVAL=64;
+    public static final int VK_COLLECT=83;
+    public static final int GREATER=100;
+    public static final int VT_FACT_BINDING=30;
+    public static final int ID=85;
+    public static final int NOT_EQUAL=104;
+    public static final int RIGHT_CURLY=111;
+    public static final int VK_ENTRY_POINT=70;
+    public static final int BOOL=94;
+    public static final int VT_PARAM_LIST=41;
+    public static final int VT_AND_INFIX=23;
+    public static final int VT_FROM_SOURCE=27;
+    public static final int VK_CONTAINS=65;
+    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VT_FUNCTION_IMPORT=5;
+    public static final int VK_IN=72;
+    public static final int VT_RHS_CHUNK=16;
+    public static final int VK_MEMBEROF=69;
+    public static final int GREATER_EQUAL=101;
+    public static final int VT_OR_INFIX=24;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=73;
+    public static final int VT_GLOBAL_ID=39;
+    public static final int LESS_EQUAL=103;
+    public static final int VK_WHEN=55;
+    public static final int VK_RULEFLOW_GROUP=49;
+    public static final int VT_FUNCTION_ID=40;
     public static final int EOF=-1;
-    public static final int VT_CONSTRAINTS=5;
-    public static final int NULL=68;
-    public static final int EOL=74;
-    public static final int VK_INIT=43;
-    public static final int Tokens=84;
-    public static final int COLON=57;
-    public static final int OctalEscape=79;
-    public static final int VK_ACTION=44;
-    public static final int MULTI_LINE_COMMENT=83;
-    public static final int VK_FROM=41;
-    public static final int VK_EXCLUDES=31;
-    public static final int RIGHT_PAREN=49;
-    public static final int RIGHT_SQUARE=70;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=82;
+    public static final int VT_CONSTRAINTS=7;
+    public static final int VT_IMPORT_ID=38;
+    public static final int EOL=113;
+    public static final int VK_INIT=79;
+    public static final int VK_ACTIVATION_GROUP=47;
+    public static final int Tokens=122;
+    public static final int OctalEscape=118;
+    public static final int VK_ACTION=80;
+    public static final int VK_FROM=77;
+    public static final int VK_EXCLUDES=67;
+    public static final int RIGHT_PAREN=92;
+    public static final int VT_TEMPLATE_ID=10;
+    public static final int VK_DECLARE=61;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
     public NewDRLLexer() {;} 
     public NewDRLLexer(CharStream input) {
         super(input);
-        ruleMemo = new HashMap[38+1];
+        ruleMemo = new HashMap[40+1];
      }
-    public String getGrammarFileName() { return "/Users/porcelli/Desktop/testes/NewDRL.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g"; }
 
     // $ANTLR start WS
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:458:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:458:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:819:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:819:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:458:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:819:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -137,28 +175,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:458:19: ' '
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:819:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:459:19: '\\t'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:820:19: '\\t'
             	    {
             	    match('\t'); if (failed) return ;
 
             	    }
             	    break;
             	case 3 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:460:19: '\\f'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:821:19: '\\f'
             	    {
             	    match('\f'); if (failed) return ;
 
             	    }
             	    break;
             	case 4 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:461:19: EOL
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:822:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -191,10 +229,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:467:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:468:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:828:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:829:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:468:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:829:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -213,13 +251,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("468:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("829:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:468:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:829:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -227,14 +265,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:469:25: '\\r'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:830:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:470:25: '\\n'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:831:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -256,10 +294,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:475:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:475:4: ( '-' )? ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:836:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:836:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:475:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:836:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -268,7 +306,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:475:5: '-'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:836:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -277,7 +315,7 @@
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:475:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:836:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -291,7 +329,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:475:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:836:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -322,10 +360,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:479:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:479:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:479:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -334,7 +372,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:479:5: '-'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -343,7 +381,7 @@
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:479:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -357,7 +395,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:479:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -375,7 +413,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:479:26: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -389,7 +427,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:479:27: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:840:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -420,7 +458,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:483:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -433,19 +471,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("482:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("843:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -461,14 +499,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:483:15: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:483:32: ~ ( '\\\\' | '\"' )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:844:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -498,13 +536,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:484:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:845:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:484:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:484:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:845:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:845:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:484:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:845:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -520,14 +558,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:484:16: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:845:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:484:33: ~ ( '\\\\' | '\\'' )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:845:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -568,8 +606,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:488:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:488:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:849:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:849: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();
@@ -594,7 +632,7 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:492:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:853: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);
 
@@ -666,7 +704,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("490: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("851: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;
                 }
@@ -675,13 +713,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("490: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("851:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:492:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:853: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)<='}') ) {
@@ -699,14 +737,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:496:9: UnicodeEscape
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:857:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:497:9: OctalEscape
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:858:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -723,7 +761,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:502:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -734,9 +772,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 {
@@ -757,7 +795,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("500:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("861:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -765,31 +803,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("500:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("861:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:14: ( '0' .. '3' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:15: '0' .. '3'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:14: ( '0' .. '3' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:25: ( '0' .. '7' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:36: ( '0' .. '7' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:37: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:36: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:863:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -799,18 +837,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:864:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:14: ( '0' .. '7' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:864:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:864:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:25: ( '0' .. '7' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:864:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:864:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -820,11 +858,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:504:9: '\\\\' ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:865:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:504:14: ( '0' .. '7' )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:504:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:865:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:865:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -844,8 +882,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:509:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:509:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:870:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:870:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -866,10 +904,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:513:2: ( ( 'true' | 'false' ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:513:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:874:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:874:4: ( 'true' | 'false' )
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:513:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:874:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -882,13 +920,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("513:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("874:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:513:5: 'true'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:874:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -896,7 +934,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:513:12: 'false'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:874:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -920,8 +958,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:516:6: ( 'null' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:516:8: 'null'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:877:6: ( 'null' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:877:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -935,12 +973,50 @@
     }
     // $ANTLR end NULL
 
+    // $ANTLR start THEN
+    public final void mTHEN() throws RecognitionException {
+        try {
+            int _type = THEN;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:881:2: ( 'then' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:881:4: 'then'
+            {
+            match("then"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end THEN
+
+    // $ANTLR start END
+    public final void mEND() throws RecognitionException {
+        try {
+            int _type = END;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:884:5: ( 'end' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:884:7: 'end'
+            {
+            match("end"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end END
+
     // $ANTLR start SEMICOLON
     public final void mSEMICOLON() throws RecognitionException {
         try {
             int _type = SEMICOLON;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:519:2: ( ';' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:519:4: ';'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:888:2: ( ';' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:888:4: ';'
             {
             match(';'); if (failed) return ;
 
@@ -953,12 +1029,31 @@
     }
     // $ANTLR end SEMICOLON
 
+    // $ANTLR start DOT_STAR
+    public final void mDOT_STAR() throws RecognitionException {
+        try {
+            int _type = DOT_STAR;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:892:2: ( '.*' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:892:4: '.*'
+            {
+            match(".*"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DOT_STAR
+
     // $ANTLR start COLON
     public final void mCOLON() throws RecognitionException {
         try {
             int _type = COLON;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:523:2: ( ':' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:523:4: ':'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:896:2: ( ':' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:896:4: ':'
             {
             match(':'); if (failed) return ;
 
@@ -975,8 +1070,8 @@
     public final void mEQUAL() throws RecognitionException {
         try {
             int _type = EQUAL;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:528:2: ( '==' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:528:4: '=='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:901:2: ( '==' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:901:4: '=='
             {
             match("=="); if (failed) return ;
 
@@ -994,8 +1089,8 @@
     public final void mNOT_EQUAL() throws RecognitionException {
         try {
             int _type = NOT_EQUAL;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:532:2: ( '!=' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:532:4: '!='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:905:2: ( '!=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:905:4: '!='
             {
             match("!="); if (failed) return ;
 
@@ -1013,8 +1108,8 @@
     public final void mGREATER() throws RecognitionException {
         try {
             int _type = GREATER;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:536:2: ( '>' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:536:4: '>'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:909:2: ( '>' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:909:4: '>'
             {
             match('>'); if (failed) return ;
 
@@ -1031,8 +1126,8 @@
     public final void mGREATER_EQUAL() throws RecognitionException {
         try {
             int _type = GREATER_EQUAL;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:540:2: ( '>=' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:540:4: '>='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:913:2: ( '>=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:913:4: '>='
             {
             match(">="); if (failed) return ;
 
@@ -1050,8 +1145,8 @@
     public final void mLESS() throws RecognitionException {
         try {
             int _type = LESS;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:544:2: ( '<' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:544:4: '<'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:917:2: ( '<' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:917:4: '<'
             {
             match('<'); if (failed) return ;
 
@@ -1068,8 +1163,8 @@
     public final void mLESS_EQUAL() throws RecognitionException {
         try {
             int _type = LESS_EQUAL;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:548:2: ( '<=' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:548:4: '<='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:921:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:921:4: '<='
             {
             match("<="); if (failed) return ;
 
@@ -1087,8 +1182,8 @@
     public final void mARROW() throws RecognitionException {
         try {
             int _type = ARROW;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:552:2: ( '->' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:552:4: '->'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:925:2: ( '->' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:925:4: '->'
             {
             match("->"); if (failed) return ;
 
@@ -1106,8 +1201,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:556:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:556:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:929:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:929: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();
@@ -1120,7 +1215,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:556:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:929:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1133,7 +1228,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:
             	    {
             	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
             	        input.consume();
@@ -1169,8 +1264,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:560:9: ( '(' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:560:11: '('
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:933:9: ( '(' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:933:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1187,8 +1282,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:564:9: ( ')' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:564:11: ')'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:937:9: ( ')' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:937:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1205,8 +1300,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:568:9: ( '[' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:568:11: '['
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:941:9: ( '[' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:941:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1223,8 +1318,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:572:9: ( ']' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:572:11: ']'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:945:9: ( ']' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:945:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -1241,8 +1336,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:576:9: ( '{' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:576:11: '{'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:949:9: ( '{' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:949:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -1259,8 +1354,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:580:9: ( '}' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:580:11: '}'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:953:9: ( '}' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:953:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -1277,8 +1372,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:583:7: ( ',' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:583:9: ','
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:956:7: ( ',' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:956:9: ','
             {
             match(','); if (failed) return ;
 
@@ -1295,8 +1390,8 @@
     public final void mDOT() throws RecognitionException {
         try {
             int _type = DOT;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:586:5: ( '.' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:586:7: '.'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:959:5: ( '.' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:959:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -1313,8 +1408,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:590:2: ( '&&' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:590:4: '&&'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:963:2: ( '&&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:963:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -1332,8 +1427,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:594:2: ( '||' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:594:4: '||'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:967:2: ( '||' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:967:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -1347,33 +1442,15 @@
     }
     // $ANTLR end DOUBLE_PIPE
 
-    // $ANTLR start TILDE
-    public final void mTILDE() throws RecognitionException {
-        try {
-            int _type = TILDE;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:597:7: ( '~' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:597:9: '~'
-            {
-            match('~'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end TILDE
-
     // $ANTLR start SH_STYLE_SINGLE_LINE_COMMENT
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:600:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:600:4: '#' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:971:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:971:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:600:8: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:971:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -1392,7 +1469,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:600:35: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:971:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1422,12 +1499,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:606:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:606:4: '//' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:977:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:977:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:606:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:977:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -1446,7 +1523,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:606:36: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:977:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1476,12 +1553,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:611:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:611:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:982:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:982:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:611:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:982:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -1506,7 +1583,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:611:35: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:982:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1537,8 +1614,8 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /Users/porcelli/Desktop/testes/NewDRL.g:615:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:986:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:
             {
             if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
                 input.consume();
@@ -1562,223 +1639,237 @@
     // $ANTLR end MISC
 
     public void mTokens() throws RecognitionException {
-        // /Users/porcelli/Desktop/testes/NewDRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | NULL | SEMICOLON | 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 | TILDE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC )
-        int alt18=31;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | NULL | THEN | END | SEMICOLON | DOT_STAR | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC )
+        int alt18=33;
         alt18 = dfa18.predict(input);
         switch (alt18) {
             case 1 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:10: WS
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:10: WS
                 {
                 mWS(); if (failed) return ;
 
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:13: INT
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:13: INT
                 {
                 mINT(); if (failed) return ;
 
                 }
                 break;
             case 3 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:17: FLOAT
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:17: FLOAT
                 {
                 mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 4 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:23: STRING
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:23: STRING
                 {
                 mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 5 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:30: BOOL
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:30: BOOL
                 {
                 mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 6 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:35: NULL
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:35: NULL
                 {
                 mNULL(); if (failed) return ;
 
                 }
                 break;
             case 7 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:40: SEMICOLON
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:40: THEN
                 {
-                mSEMICOLON(); if (failed) return ;
+                mTHEN(); if (failed) return ;
 
                 }
                 break;
             case 8 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:50: COLON
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:45: END
                 {
-                mCOLON(); if (failed) return ;
+                mEND(); if (failed) return ;
 
                 }
                 break;
             case 9 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:56: EQUAL
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:49: SEMICOLON
                 {
-                mEQUAL(); if (failed) return ;
+                mSEMICOLON(); if (failed) return ;
 
                 }
                 break;
             case 10 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:62: NOT_EQUAL
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:59: DOT_STAR
                 {
-                mNOT_EQUAL(); if (failed) return ;
+                mDOT_STAR(); if (failed) return ;
 
                 }
                 break;
             case 11 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:72: GREATER
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:68: COLON
                 {
-                mGREATER(); if (failed) return ;
+                mCOLON(); if (failed) return ;
 
                 }
                 break;
             case 12 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:80: GREATER_EQUAL
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:74: EQUAL
                 {
-                mGREATER_EQUAL(); if (failed) return ;
+                mEQUAL(); if (failed) return ;
 
                 }
                 break;
             case 13 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:94: LESS
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:80: NOT_EQUAL
                 {
-                mLESS(); if (failed) return ;
+                mNOT_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 14 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:99: LESS_EQUAL
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:90: GREATER
                 {
-                mLESS_EQUAL(); if (failed) return ;
+                mGREATER(); if (failed) return ;
 
                 }
                 break;
             case 15 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:110: ARROW
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:98: GREATER_EQUAL
                 {
-                mARROW(); if (failed) return ;
+                mGREATER_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 16 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:116: ID
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:112: LESS
                 {
-                mID(); if (failed) return ;
+                mLESS(); if (failed) return ;
 
                 }
                 break;
             case 17 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:119: LEFT_PAREN
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:117: LESS_EQUAL
                 {
-                mLEFT_PAREN(); if (failed) return ;
+                mLESS_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 18 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:130: RIGHT_PAREN
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:128: ARROW
                 {
-                mRIGHT_PAREN(); if (failed) return ;
+                mARROW(); if (failed) return ;
 
                 }
                 break;
             case 19 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:142: LEFT_SQUARE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:134: ID
                 {
-                mLEFT_SQUARE(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 20 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:154: RIGHT_SQUARE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:137: LEFT_PAREN
                 {
-                mRIGHT_SQUARE(); if (failed) return ;
+                mLEFT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 21 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:167: LEFT_CURLY
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:148: RIGHT_PAREN
                 {
-                mLEFT_CURLY(); if (failed) return ;
+                mRIGHT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 22 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:178: RIGHT_CURLY
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:160: LEFT_SQUARE
                 {
-                mRIGHT_CURLY(); if (failed) return ;
+                mLEFT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 23 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:190: COMMA
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:172: RIGHT_SQUARE
                 {
-                mCOMMA(); if (failed) return ;
+                mRIGHT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 24 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:196: DOT
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:185: LEFT_CURLY
                 {
-                mDOT(); if (failed) return ;
+                mLEFT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 25 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:200: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:196: RIGHT_CURLY
                 {
-                mDOUBLE_AMPER(); if (failed) return ;
+                mRIGHT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 26 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:213: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:208: COMMA
                 {
-                mDOUBLE_PIPE(); if (failed) return ;
+                mCOMMA(); if (failed) return ;
 
                 }
                 break;
             case 27 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:225: TILDE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:214: DOT
                 {
-                mTILDE(); if (failed) return ;
+                mDOT(); if (failed) return ;
 
                 }
                 break;
             case 28 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:231: SH_STYLE_SINGLE_LINE_COMMENT
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:218: DOUBLE_AMPER
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mDOUBLE_AMPER(); if (failed) return ;
 
                 }
                 break;
             case 29 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:260: C_STYLE_SINGLE_LINE_COMMENT
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:231: DOUBLE_PIPE
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mDOUBLE_PIPE(); if (failed) return ;
 
                 }
                 break;
             case 30 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:288: MULTI_LINE_COMMENT
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:243: SH_STYLE_SINGLE_LINE_COMMENT
                 {
-                mMULTI_LINE_COMMENT(); if (failed) return ;
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 31 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:1:307: MISC
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:272: C_STYLE_SINGLE_LINE_COMMENT
                 {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 32 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:300: MULTI_LINE_COMMENT
+                {
+                mMULTI_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 33 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:1:319: MISC
+                {
                 mMISC(); if (failed) return ;
 
                 }
@@ -1790,8 +1881,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:468:14: ( '\\r\\n' )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:468:16: '\\r\\n'
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:829:14: ( '\\r\\n' )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:829:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 
@@ -1818,45 +1909,49 @@
 
     protected DFA18 dfa18 = new DFA18(this);
     static final String DFA18_eotS =
-        "\2\uffff\1\36\1\40\1\uffff\1\36\3\35\2\uffff\2\36\1\50\1\52\11\uffff"+
-        "\2\36\2\uffff\1\36\5\uffff\3\35\12\uffff\3\35\1\65\1\35\1\67\1\uffff"+
-        "\1\65\1\uffff";
+        "\2\uffff\1\36\1\41\1\uffff\1\36\4\35\1\uffff\1\50\1\uffff\2\36\1"+
+        "\54\1\56\10\uffff\2\36\1\uffff\1\36\5\uffff\5\35\14\uffff\4\35\1"+
+        "\74\1\75\1\76\1\35\1\100\3\uffff\1\76\1\uffff";
     static final String DFA18_eofS =
-        "\70\uffff";
+        "\101\uffff";
     static final String DFA18_minS =
-        "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\162\1\141\1\165\2\uffff\4"+
-        "\75\11\uffff\1\46\1\174\2\uffff\1\52\5\uffff\1\165\2\154\12\uffff"+
-        "\1\145\1\163\1\154\1\60\1\145\1\60\1\uffff\1\60\1\uffff";
+        "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\150\1\141\1\165\1\156\1\uffff"+
+        "\1\52\1\uffff\4\75\10\uffff\1\46\1\174\1\uffff\1\52\5\uffff\1\145"+
+        "\1\165\2\154\1\144\14\uffff\1\156\1\145\1\163\1\154\3\60\1\145\1"+
+        "\60\3\uffff\1\60\1\uffff";
     static final String DFA18_maxS =
-        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\1\162\1\141\1\165\2\uffff"+
-        "\4\75\11\uffff\1\46\1\174\2\uffff\1\57\5\uffff\1\165\2\154\12\uffff"+
-        "\1\145\1\163\1\154\1\u00ff\1\145\1\u00ff\1\uffff\1\u00ff\1\uffff";
+        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\1\162\1\141\1\165\1\156"+
+        "\1\uffff\1\52\1\uffff\4\75\10\uffff\1\46\1\174\1\uffff\1\57\5\uffff"+
+        "\1\145\1\165\2\154\1\144\14\uffff\1\156\1\145\1\163\1\154\3\u00ff"+
+        "\1\145\1\u00ff\3\uffff\1\u00ff\1\uffff";
     static final String DFA18_acceptS =
-        "\1\uffff\1\1\2\uffff\1\4\4\uffff\1\7\1\10\4\uffff\1\20\1\21\1\22"+
-        "\1\23\1\24\1\25\1\26\1\27\1\30\2\uffff\1\33\1\34\1\uffff\1\20\1"+
-        "\37\1\17\1\2\1\3\3\uffff\1\11\1\12\1\14\1\13\1\16\1\15\1\31\1\32"+
-        "\1\36\1\35\6\uffff\1\5\1\uffff\1\6";
+        "\1\uffff\1\1\2\uffff\1\4\5\uffff\1\11\1\uffff\1\13\4\uffff\1\23"+
+        "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\2\uffff\1\36\1\uffff\1\23\1"+
+        "\41\1\22\1\3\1\2\5\uffff\1\12\1\33\1\14\1\15\1\17\1\16\1\21\1\20"+
+        "\1\34\1\35\1\37\1\40\11\uffff\1\10\1\7\1\5\1\uffff\1\6";
     static final String DFA18_specialS =
-        "\70\uffff}>";
+        "\101\uffff}>";
     static final String[] DFA18_transitionS = {
-            "\2\1\1\uffff\2\1\22\uffff\1\1\1\14\1\4\1\33\1\17\1\36\1\30\1"+
-            "\5\1\20\1\21\2\36\1\26\1\2\1\27\1\34\12\3\1\12\1\11\1\16\1\13"+
-            "\1\15\2\36\32\35\1\22\1\36\1\23\1\36\1\17\1\uffff\5\35\1\7\7"+
-            "\35\1\10\5\35\1\6\6\35\1\24\1\31\1\25\1\32\101\uffff\100\35",
+            "\2\1\1\uffff\2\1\22\uffff\1\1\1\16\1\4\1\33\1\21\1\36\1\31\1"+
+            "\5\1\22\1\23\2\36\1\30\1\2\1\13\1\34\12\3\1\14\1\12\1\20\1\15"+
+            "\1\17\2\36\32\35\1\24\1\36\1\25\1\36\1\21\1\uffff\4\35\1\11"+
+            "\1\7\7\35\1\10\5\35\1\6\6\35\1\26\1\32\1\27\102\uffff\100\35",
             "",
             "\12\3\4\uffff\1\37",
-            "\1\41\1\uffff\12\3",
+            "\1\40\1\uffff\12\3",
             "",
             "\uffff\4",
-            "\1\42",
-            "\1\43",
+            "\1\42\11\uffff\1\43",
             "\1\44",
-            "",
-            "",
             "\1\45",
             "\1\46",
+            "",
             "\1\47",
+            "",
             "\1\51",
+            "\1\52",
+            "\1\53",
+            "\1\55",
             "",
             "",
             "",
@@ -1865,20 +1960,22 @@
             "",
             "",
             "",
+            "\1\57",
+            "\1\60",
             "",
-            "\1\53",
-            "\1\54",
+            "\1\62\4\uffff\1\61",
             "",
             "",
-            "\1\55\4\uffff\1\56",
             "",
             "",
             "",
+            "\1\63",
+            "\1\64",
+            "\1\65",
+            "\1\66",
+            "\1\67",
             "",
             "",
-            "\1\57",
-            "\1\60",
-            "\1\61",
             "",
             "",
             "",
@@ -1889,15 +1986,22 @@
             "",
             "",
             "",
-            "\1\62",
-            "\1\63",
-            "\1\64",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\73",
             "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
             "\35",
-            "\1\66",
             "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
             "\35",
+            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
+            "\35",
+            "\1\77",
+            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
+            "\35",
             "",
+            "",
+            "",
             "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
             "\35",
             ""
@@ -1933,7 +2037,7 @@
             this.transition = DFA18_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( WS | INT | FLOAT | STRING | BOOL | NULL | SEMICOLON | 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 | TILDE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC );";
+            return "1:1: Tokens : ( WS | INT | FLOAT | STRING | BOOL | NULL | THEN | END | SEMICOLON | DOT_STAR | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC );";
         }
     }
  

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java	2008-05-08 18:46:10 UTC (rev 19913)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java	2008-05-08 21:16:04 UTC (rev 19914)
@@ -1,6 +1,6 @@
 package org.drools.lang;
 
-// $ANTLR 3.0.1 /Users/porcelli/Desktop/testes/NewDRL.g 2008-04-28 10:54:02
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g 2008-05-08 18:07:21
 
 import org.antlr.runtime.*;
 import java.util.Stack;
@@ -13,93 +13,131 @@
 
 public class NewDRLParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_FACT", "VT_CONSTRAINTS", "VT_QUALIFIED_ID", "VT_LABEL", "VT_NAME", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "LEFT_PAREN", "RIGHT_PAREN", "DOUBLE_PIPE", "DOUBLE_AMPER", "SEMICOLON", "COMMA", "ID", "DOT", "ARROW", "COLON", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "STRING", "INT", "FLOAT", "BOOL", "NULL", "LEFT_SQUARE", "RIGHT_SQUA!
 RE", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "TILDE", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE", "VK_IMPORT", "VK_P!
 ACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int COMMA=53;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=18;
-    public static final int VT_FACT_OR=23;
-    public static final int VK_NOT=35;
-    public static final int HexDigit=77;
-    public static final int ARROW=56;
-    public static final int VT_EXPRESSION_CHAIN=20;
-    public static final int VK_ACCUMULATE=42;
-    public static final int MISC=73;
-    public static final int VT_AND_PREFIX=13;
-    public static final int FLOAT=66;
-    public static final int VT_CURLY_CHUNK=9;
-    public static final int TILDE=80;
-    public static final int DOT=55;
-    public static final int VT_OR_PREFIX=14;
-    public static final int DOUBLE_PIPE=50;
-    public static final int LESS=61;
-    public static final int VT_PATTERN=21;
-    public static final int EscapeSequence=76;
-    public static final int VK_EXISTS=39;
-    public static final int INT=65;
-    public static final int VT_BIND_FIELD=24;
-    public static final int VK_COLLECT=47;
-    public static final int VK_EVAL=28;
-    public static final int LEFT_SQUARE=69;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=81;
-    public static final int GREATER=59;
-    public static final int VT_FACT=4;
-    public static final int VK_MATCHES=30;
-    public static final int LEFT_CURLY=71;
-    public static final int VT_FACT_BINDING=22;
-    public static final int ID=54;
-    public static final int NOT_EQUAL=63;
-    public static final int DOUBLE_AMPER=51;
-    public static final int LEFT_PAREN=48;
-    public static final int RIGHT_CURLY=72;
-    public static final int BOOL=67;
-    public static final int VT_AND_INFIX=15;
-    public static final int VK_ENTRY_POINT=34;
-    public static final int VT_FROM_SOURCE=19;
-    public static final int VT_ACCESSOR_PATH=26;
-    public static final int VT_LABEL=7;
-    public static final int VK_CONTAINS=29;
-    public static final int WS=75;
-    public static final int VT_FIELD=25;
-    public static final int VK_SOUNDSLIKE=32;
-    public static final int VT_QUALIFIED_ID=6;
-    public static final int STRING=64;
-    public static final int VK_AND=38;
-    public static final int VT_ACCESSOR_ELEMENT=27;
-    public static final int VK_IN=36;
-    public static final int VK_REVERSE=45;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=17;
-    public static final int GREATER_EQUAL=60;
-    public static final int VK_MEMBEROF=33;
-    public static final int VT_OR_INFIX=16;
-    public static final int VT_SQUARE_CHUNK=10;
-    public static final int VK_FORALL=40;
-    public static final int VT_PAREN_CHUNK=11;
-    public static final int VK_OR=37;
-    public static final int VT_NAME=8;
-    public static final int LESS_EQUAL=62;
-    public static final int VK_RESULT=46;
-    public static final int UnicodeEscape=78;
-    public static final int EQUAL=58;
-    public static final int SEMICOLON=52;
-    public static final int VT_AND_IMPLICIT=12;
+    public static final int COMMA=91;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
+    public static final int VK_DIALECT=51;
+    public static final int VK_FUNCTION=62;
+    public static final int END=88;
+    public static final int HexDigit=116;
+    public static final int VK_ATTRIBUTES=54;
+    public static final int VT_EXPRESSION_CHAIN=28;
+    public static final int VK_ACCUMULATE=78;
+    public static final int MISC=112;
+    public static final int VT_AND_PREFIX=21;
+    public static final int VK_QUERY=60;
+    public static final int THEN=109;
+    public static final int VK_AUTO_FOCUS=46;
+    public static final int DOT=86;
+    public static final int VK_IMPORT=57;
+    public static final int VT_SLOT=14;
+    public static final int VT_PACKAGE_ID=37;
+    public static final int LEFT_SQUARE=107;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_DATA_TYPE=36;
+    public static final int VT_FACT=6;
+    public static final int VK_MATCHES=66;
+    public static final int LEFT_CURLY=110;
+    public static final int DOUBLE_AMPER=97;
+    public static final int LEFT_PAREN=90;
+    public static final int VT_QUERY_ID=9;
+    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_LABEL=8;
+    public static final int VT_ENTRYPOINT_ID=12;
+    public static final int WS=114;
+    public static final int VT_FIELD=33;
+    public static final int VK_SALIENCE=52;
+    public static final int VK_SOUNDSLIKE=68;
+    public static final int VK_AND=74;
+    public static final int STRING=89;
+    public static final int VT_ACCESSOR_ELEMENT=35;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
+    public static final int VK_GLOBAL=63;
+    public static final int VK_REVERSE=81;
+    public static final int VK_DURATION=50;
+    public static final int VT_SQUARE_CHUNK=18;
+    public static final int VK_FORALL=76;
+    public static final int VT_COMPILATION_UNIT=4;
+    public static final int VT_PAREN_CHUNK=19;
+    public static final int VK_ENABLED=53;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=117;
+    public static final int VK_PACKAGE=58;
+    public static final int VT_RULE_ID=11;
+    public static final int EQUAL=99;
+    public static final int VK_NO_LOOP=45;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=59;
+    public static final int VT_AND_IMPLICIT=20;
+    public static final int NULL=106;
+    public static final int COLON=93;
+    public static final int MULTI_LINE_COMMENT=121;
+    public static final int VT_RULE_ATTRIBUTES=15;
+    public static final int RIGHT_SQUARE=108;
+    public static final int VK_AGENDA_GROUP=48;
+    public static final int VT_FACT_OR=31;
+    public static final int VK_NOT=71;
+    public static final int VK_DATE_EXPIRES=43;
+    public static final int ARROW=98;
+    public static final int FLOAT=105;
+    public static final int VT_SLOT_ID=13;
+    public static final int VT_CURLY_CHUNK=17;
+    public static final int VT_OR_PREFIX=22;
+    public static final int DOUBLE_PIPE=96;
+    public static final int LESS=102;
+    public static final int VT_PATTERN=29;
+    public static final int VK_DATE_EFFECTIVE=42;
+    public static final int EscapeSequence=115;
+    public static final int VK_EXISTS=75;
+    public static final int INT=95;
+    public static final int VT_BIND_FIELD=32;
+    public static final int VK_RULE=56;
+    public static final int VK_EVAL=64;
+    public static final int VK_COLLECT=83;
+    public static final int GREATER=100;
+    public static final int VT_FACT_BINDING=30;
+    public static final int ID=85;
+    public static final int NOT_EQUAL=104;
+    public static final int RIGHT_CURLY=111;
+    public static final int BOOL=94;
+    public static final int VT_PARAM_LIST=41;
+    public static final int VT_AND_INFIX=23;
+    public static final int VK_ENTRY_POINT=70;
+    public static final int VT_FROM_SOURCE=27;
+    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VK_CONTAINS=65;
+    public static final int VT_FUNCTION_IMPORT=5;
+    public static final int VK_IN=72;
+    public static final int VT_RHS_CHUNK=16;
+    public static final int GREATER_EQUAL=101;
+    public static final int VK_MEMBEROF=69;
+    public static final int VT_OR_INFIX=24;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=73;
+    public static final int VT_GLOBAL_ID=39;
+    public static final int LESS_EQUAL=103;
+    public static final int VK_WHEN=55;
+    public static final int VK_RULEFLOW_GROUP=49;
+    public static final int VT_FUNCTION_ID=40;
     public static final int EOF=-1;
-    public static final int VT_CONSTRAINTS=5;
-    public static final int EOL=74;
-    public static final int NULL=68;
-    public static final int VK_INIT=43;
-    public static final int COLON=57;
-    public static final int OctalEscape=79;
-    public static final int MULTI_LINE_COMMENT=83;
-    public static final int VK_ACTION=44;
-    public static final int VK_EXCLUDES=31;
-    public static final int VK_FROM=41;
-    public static final int RIGHT_PAREN=49;
-    public static final int RIGHT_SQUARE=70;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=82;
+    public static final int VT_CONSTRAINTS=7;
+    public static final int EOL=113;
+    public static final int VT_IMPORT_ID=38;
+    public static final int VK_ACTIVATION_GROUP=47;
+    public static final int VK_INIT=79;
+    public static final int OctalEscape=118;
+    public static final int VK_ACTION=80;
+    public static final int VK_EXCLUDES=67;
+    public static final int VK_FROM=77;
+    public static final int RIGHT_PAREN=92;
+    public static final int VT_TEMPLATE_ID=10;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
+    public static final int VK_DECLARE=61;
 
         public NewDRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[77+1];
+            ruleMemo = new HashMap[139+1];
          }
         
     protected TreeAdaptor adaptor = new CommonTreeAdaptor();
@@ -112,7 +150,7 @@
     }
 
     public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "/Users/porcelli/Desktop/testes/NewDRL.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g"; }
 
 
     	private boolean validateLT(int LTNumber, String text){
@@ -129,53 +167,3964 @@
     	}
 
 
+    public static class compilation_unit_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start compilation_unit
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:115:1: compilation_unit : ( package_statement )? ( statement )* -> ^( 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);
+
+        Object root_0 = null;
+
+        package_statement_return package_statement1 = null;
+
+        statement_return statement2 = null;
+
+
+        RewriteRuleSubtreeStream stream_package_statement=new RewriteRuleSubtreeStream(adaptor,"rule package_statement");
+        RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:116:2: ( ( package_statement )? ( statement )* -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:116:4: ( package_statement )? ( statement )*
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:116:4: ( package_statement )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||(validateIdentifierKey("global"))||(validateIdentifierKey("package"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("import"))||(validateIdenti!
 fierKey("function"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
+                int LA1_1 = input.LA(2);
+
+                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("package"))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {
+                    int LA1_4 = input.LA(3);
+
+                    if ( ((validateIdentifierKey("package"))) ) {
+                        alt1=1;
+                    }
+                }
+            }
+            switch (alt1) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:116:4: package_statement
+                    {
+                    pushFollow(FOLLOW_package_statement_in_compilation_unit368);
+                    package_statement1=package_statement();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_package_statement.add(package_statement1.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:117:3: ( statement )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( (LA2_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("import"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("global"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(!
 validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:117:3: statement
+            	    {
+            	    pushFollow(FOLLOW_statement_in_compilation_unit373);
+            	    statement2=statement();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_statement.add(statement2.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: statement, package_statement
+            // 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();
+            // 118:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:118:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_COMPILATION_UNIT, "VT_COMPILATION_UNIT"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:118:28: ( package_statement )?
+                if ( stream_package_statement.hasNext() ) {
+                    adaptor.addChild(root_1, stream_package_statement.next());
+
+                }
+                stream_package_statement.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:118:47: ( statement )*
+                while ( stream_statement.hasNext() ) {
+                    adaptor.addChild(root_1, stream_statement.next());
+
+                }
+                stream_statement.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end compilation_unit
+
+    public static class package_statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start package_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:121: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);
+
+        Object root_0 = null;
+
+        Token SEMICOLON5=null;
+        package_key_return package_key3 = null;
+
+        package_id_return package_id4 = null;
+
+
+        Object SEMICOLON5_tree=null;
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_package_key=new RewriteRuleSubtreeStream(adaptor,"rule package_key");
+        RewriteRuleSubtreeStream stream_package_id=new RewriteRuleSubtreeStream(adaptor,"rule package_id");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:122:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:122:4: package_key package_id ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_package_key_in_package_statement400);
+            package_key3=package_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_package_key.add(package_key3.getTree());
+            pushFollow(FOLLOW_package_id_in_package_statement402);
+            package_id4=package_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_package_id.add(package_id4.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:122:27: ( SEMICOLON )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==SEMICOLON) ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:122:27: SEMICOLON
+                    {
+                    SEMICOLON5=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement404); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON5);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: package_id, package_key
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 123:3: -> ^( package_key package_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:123:6: ^( package_key package_id )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_package_id.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end package_statement
+
+    public static class package_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start package_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:126:1: package_id : ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
+    public final package_id_return package_id() throws RecognitionException {
+        package_id_return retval = new package_id_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID6=null;
+        Token DOT7=null;
+        Token ID8=null;
+
+        Object ID6_tree=null;
+        Object DOT7_tree=null;
+        Object ID8_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:127:2: ( ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:127:4: ID ( DOT ID )*
+            {
+            ID6=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_package_id426); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID6);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:127:7: ( DOT ID )*
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( (LA4_0==DOT) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:127:9: DOT ID
+            	    {
+            	    DOT7=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_package_id430); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT7);
+
+            	    ID8=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_package_id432); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID8);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop4;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: ID
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 128:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:128: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);
+
+                if ( !(stream_ID.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_ID.hasNext() ) {
+                    adaptor.addChild(root_1, stream_ID.next());
+
+                }
+                stream_ID.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end package_id
+
+    public static class statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:131:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );
+    public final statement_return statement() throws RecognitionException {
+        statement_return retval = new statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        rule_attribute_return rule_attribute9 = null;
+
+        function_import_statement_return function_import_statement10 = null;
+
+        import_statement_return import_statement11 = null;
+
+        global_return global12 = null;
+
+        function_return function13 = null;
+
+        template_return template14 = null;
+
+        rule_return rule15 = null;
+
+        query_return query16 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:132:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
+            int alt5=8;
+            alt5 = dfa5.predict(input);
+            switch (alt5) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:132:4: rule_attribute
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_rule_attribute_in_statement457);
+                    rule_attribute9=rule_attribute();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule_attribute9.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:133:3: {...}? => function_import_statement
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    if ( !((validateLT(1, "import") && validateLT(2, "function") )) ) {
+                        if (backtracking>0) {failed=true; return retval;}
+                        throw new FailedPredicateException(input, "statement", "(validateLT(1, \"import\") && validateLT(2, \"function\") )");
+                    }
+                    pushFollow(FOLLOW_function_import_statement_in_statement464);
+                    function_import_statement10=function_import_statement();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, function_import_statement10.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:134:4: import_statement
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_import_statement_in_statement470);
+                    import_statement11=import_statement();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, import_statement11.getTree());
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:135:4: global
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_global_in_statement476);
+                    global12=global();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, global12.getTree());
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:136:4: function
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_function_in_statement482);
+                    function13=function();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, function13.getTree());
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:137:4: template
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_template_in_statement487);
+                    template14=template();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, template14.getTree());
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:138:4: rule
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_rule_in_statement492);
+                    rule15=rule();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule15.getTree());
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:139:4: query
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_query_in_statement497);
+                    query16=query();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, query16.getTree());
+
+                    }
+                    break;
+
+            }
+            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 statement
+
+    public static class import_statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start import_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:142:1: import_statement : import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) ;
+    public final import_statement_return import_statement() throws RecognitionException {
+        import_statement_return retval = new import_statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token SEMICOLON19=null;
+        import_key_return import_key17 = null;
+
+        import_name_return import_name18 = null;
+
+
+        Object SEMICOLON19_tree=null;
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
+        RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:143:2: ( import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:143:4: import_key import_name ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_import_key_in_import_statement508);
+            import_key17=import_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_key.add(import_key17.getTree());
+            pushFollow(FOLLOW_import_name_in_import_statement510);
+            import_name18=import_name();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_name.add(import_name18.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:143:27: ( SEMICOLON )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==SEMICOLON) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:143:27: SEMICOLON
+                    {
+                    SEMICOLON19=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement512); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON19);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: import_key, import_name
+            // 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();
+            // 144:3: -> ^( import_key import_name )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:144:6: ^( import_key import_name )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_import_name.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end import_statement
+
+    public static class function_import_statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start function_import_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:147:1: function_import_statement : import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT function_key import_name ) ;
+    public final function_import_statement_return function_import_statement() throws RecognitionException {
+        function_import_statement_return retval = new function_import_statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token SEMICOLON23=null;
+        import_key_return import_key20 = null;
+
+        function_key_return function_key21 = null;
+
+        import_name_return import_name22 = null;
+
+
+        Object SEMICOLON23_tree=null;
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
+        RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
+        RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:148:2: ( import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT function_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:148:4: import_key function_key import_name ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_import_key_in_function_import_statement534);
+            import_key20=import_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_key.add(import_key20.getTree());
+            pushFollow(FOLLOW_function_key_in_function_import_statement536);
+            function_key21=function_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_function_key.add(function_key21.getTree());
+            pushFollow(FOLLOW_import_name_in_function_import_statement538);
+            import_name22=import_name();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_name.add(import_name22.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:148:40: ( SEMICOLON )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==SEMICOLON) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:148:40: SEMICOLON
+                    {
+                    SEMICOLON23=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement540); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON23);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: import_name, function_key
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 149:3: -> ^( VT_FUNCTION_IMPORT function_key import_name )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:149:6: ^( VT_FUNCTION_IMPORT function_key import_name )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FUNCTION_IMPORT, "VT_FUNCTION_IMPORT"), root_1);
+
+                adaptor.addChild(root_1, stream_function_key.next());
+                adaptor.addChild(root_1, stream_import_name.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end function_import_statement
+
+    public static class import_name_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start import_name
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:152:1: import_name : ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    public final import_name_return import_name() throws RecognitionException {
+        import_name_return retval = new import_name_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID24=null;
+        Token DOT25=null;
+        Token ID26=null;
+        Token DOT_STAR27=null;
+
+        Object ID24_tree=null;
+        Object DOT25_tree=null;
+        Object ID26_tree=null;
+        Object DOT_STAR27_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");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:153:2: ( ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:153:4: ID ( DOT ID )* ( DOT_STAR )?
+            {
+            ID24=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_import_name564); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID24);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:153:7: ( DOT ID )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( (LA8_0==DOT) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:153:9: DOT ID
+            	    {
+            	    DOT25=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_import_name568); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT25);
+
+            	    ID26=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_import_name570); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID26);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:153:19: ( DOT_STAR )?
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==DOT_STAR) ) {
+                alt9=1;
+            }
+            switch (alt9) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:153:19: DOT_STAR
+                    {
+                    DOT_STAR27=(Token)input.LT(1);
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name575); if (failed) return retval;
+                    if ( backtracking==0 ) stream_DOT_STAR.add(DOT_STAR27);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: ID, DOT_STAR
+            // 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();
+            // 154:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:154: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);
+
+                if ( !(stream_ID.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_ID.hasNext() ) {
+                    adaptor.addChild(root_1, stream_ID.next());
+
+                }
+                stream_ID.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:154:25: ( DOT_STAR )?
+                if ( stream_DOT_STAR.hasNext() ) {
+                    adaptor.addChild(root_1, stream_DOT_STAR.next());
+
+                }
+                stream_DOT_STAR.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end import_name
+
+    public static class global_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start global
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:157:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
+    public final global_return global() throws RecognitionException {
+        global_return retval = new global_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token SEMICOLON31=null;
+        global_key_return global_key28 = null;
+
+        data_type_return data_type29 = null;
+
+        global_id_return global_id30 = null;
+
+
+        Object SEMICOLON31_tree=null;
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
+        RewriteRuleSubtreeStream stream_global_id=new RewriteRuleSubtreeStream(adaptor,"rule global_id");
+        RewriteRuleSubtreeStream stream_global_key=new RewriteRuleSubtreeStream(adaptor,"rule global_key");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:158:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:158:4: global_key data_type global_id ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_global_key_in_global601);
+            global_key28=global_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_global_key.add(global_key28.getTree());
+            pushFollow(FOLLOW_data_type_in_global603);
+            data_type29=data_type();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_data_type.add(data_type29.getTree());
+            pushFollow(FOLLOW_global_id_in_global605);
+            global_id30=global_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_global_id.add(global_id30.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:158:35: ( SEMICOLON )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==SEMICOLON) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:158:35: SEMICOLON
+                    {
+                    SEMICOLON31=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global607); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON31);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: global_id, data_type, global_key
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 159:3: -> ^( global_key data_type global_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:159:6: ^( global_key data_type global_id )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_data_type.next());
+                adaptor.addChild(root_1, stream_global_id.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end global
+
+    public static class global_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start global_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:162: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:163:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:163:4: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_global_id633); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 164:3: -> VT_GLOBAL_ID[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end global_id
+
+    public static class function_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start function
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:167:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
+    public final function_return function() throws RecognitionException {
+        function_return retval = new function_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        function_key_return function_key32 = null;
+
+        data_type_return data_type33 = null;
+
+        function_id_return function_id34 = null;
+
+        parameters_return parameters35 = null;
+
+        curly_chunk_return curly_chunk36 = null;
+
+
+        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");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:168:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:168:4: function_key ( data_type )? function_id parameters curly_chunk
+            {
+            pushFollow(FOLLOW_function_key_in_function651);
+            function_key32=function_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_function_key.add(function_key32.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:168:17: ( data_type )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==ID) ) {
+                int LA11_1 = input.LA(2);
+
+                if ( ((LA11_1>=ID && LA11_1<=DOT)||LA11_1==LEFT_SQUARE) ) {
+                    alt11=1;
+                }
+            }
+            switch (alt11) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:168:17: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_function653);
+                    data_type33=data_type();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_data_type.add(data_type33.getTree());
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_function_id_in_function656);
+            function_id34=function_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_function_id.add(function_id34.getTree());
+            pushFollow(FOLLOW_parameters_in_function658);
+            parameters35=parameters();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_parameters.add(parameters35.getTree());
+            pushFollow(FOLLOW_curly_chunk_in_function660);
+            curly_chunk36=curly_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk36.getTree());
+
+            // AST REWRITE
+            // elements: curly_chunk, function_id, function_key, parameters, data_type
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 169:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:169:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_function_key.nextNode(), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:169:21: ( data_type )?
+                if ( stream_data_type.hasNext() ) {
+                    adaptor.addChild(root_1, stream_data_type.next());
+
+                }
+                stream_data_type.reset();
+                adaptor.addChild(root_1, stream_function_id.next());
+                adaptor.addChild(root_1, stream_parameters.next());
+                adaptor.addChild(root_1, stream_curly_chunk.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end function
+
+    public static class function_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start function_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:172: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:173:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:173:4: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_function_id690); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 174:3: -> VT_FUNCTION_ID[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end function_id
+
+    public static class query_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start query
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block ) ;
+    public final query_return query() throws RecognitionException {
+        query_return retval = new query_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token END41=null;
+        Token SEMICOLON42=null;
+        query_key_return query_key37 = null;
+
+        query_id_return query_id38 = null;
+
+        parameters_return parameters39 = null;
+
+        normal_lhs_block_return normal_lhs_block40 = null;
+
+
+        Object END41_tree=null;
+        Object SEMICOLON42_tree=null;
+        RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
+        RewriteRuleSubtreeStream stream_query_key=new RewriteRuleSubtreeStream(adaptor,"rule query_key");
+        RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
+        RewriteRuleSubtreeStream stream_query_id=new RewriteRuleSubtreeStream(adaptor,"rule query_id");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:7: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:9: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_query_key_in_query707);
+            query_key37=query_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_query_key.add(query_key37.getTree());
+            pushFollow(FOLLOW_query_id_in_query709);
+            query_id38=query_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_query_id.add(query_id38.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:28: ( parameters )?
+            int alt12=2;
+            alt12 = dfa12.predict(input);
+            switch (alt12) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:28: parameters
+                    {
+                    pushFollow(FOLLOW_parameters_in_query711);
+                    parameters39=parameters();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_parameters.add(parameters39.getTree());
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_normal_lhs_block_in_query714);
+            normal_lhs_block40=normal_lhs_block();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block40.getTree());
+            END41=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_query716); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END41);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:61: ( SEMICOLON )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==SEMICOLON) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:177:61: SEMICOLON
+                    {
+                    SEMICOLON42=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query718); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON42);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: normal_lhs_block, query_key, query_id, parameters
+            // 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();
+            // 178:3: -> ^( query_key query_id ( parameters )? normal_lhs_block )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:178:6: ^( query_key query_id ( parameters )? normal_lhs_block )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_query_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_query_id.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:178:27: ( parameters )?
+                if ( stream_parameters.hasNext() ) {
+                    adaptor.addChild(root_1, stream_parameters.next());
+
+                }
+                stream_parameters.reset();
+                adaptor.addChild(root_1, stream_normal_lhs_block.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end query
+
+    public static class query_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start query_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:181:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );
+    public final query_id_return query_id() throws RecognitionException {
+        query_id_return retval = new query_id_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token value=null;
+
+        Object value_tree=null;
+        RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:182:2: (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] )
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==ID) ) {
+                alt14=1;
+            }
+            else if ( (LA14_0==STRING) ) {
+                alt14=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("181:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );", 14, 0, input);
+
+                throw nvae;
+            }
+            switch (alt14) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:182:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_query_id748); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(value);
+
+
+                    // 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();
+                    // 182:14: -> VT_QUERY_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:183:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_query_id761); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(value);
+
+
+                    // 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();
+                    // 183:18: -> VT_QUERY_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+
+            }
+            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 query_id
+
+    public static class parameters_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start parameters
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:186:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* ) ;
+    public final parameters_return parameters() throws RecognitionException {
+        parameters_return retval = new parameters_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN43=null;
+        Token COMMA45=null;
+        Token RIGHT_PAREN47=null;
+        param_definition_return param_definition44 = null;
+
+        param_definition_return param_definition46 = null;
+
+
+        Object LEFT_PAREN43_tree=null;
+        Object COMMA45_tree=null;
+        Object RIGHT_PAREN47_tree=null;
+        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_param_definition=new RewriteRuleSubtreeStream(adaptor,"rule param_definition");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:187:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:187:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            {
+            LEFT_PAREN43=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters777); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN43);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:188:4: ( param_definition ( COMMA param_definition )* )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==ID) ) {
+                alt16=1;
+            }
+            switch (alt16) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:188:6: param_definition ( COMMA param_definition )*
+                    {
+                    pushFollow(FOLLOW_param_definition_in_parameters784);
+                    param_definition44=param_definition();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_param_definition.add(param_definition44.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:188:23: ( COMMA param_definition )*
+                    loop15:
+                    do {
+                        int alt15=2;
+                        int LA15_0 = input.LA(1);
+
+                        if ( (LA15_0==COMMA) ) {
+                            alt15=1;
+                        }
+
+
+                        switch (alt15) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:188:24: COMMA param_definition
+                    	    {
+                    	    COMMA45=(Token)input.LT(1);
+                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters787); if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_COMMA.add(COMMA45);
+
+                    	    pushFollow(FOLLOW_param_definition_in_parameters789);
+                    	    param_definition46=param_definition();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_param_definition.add(param_definition46.getTree());
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop15;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            RIGHT_PAREN47=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters798); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN47);
+
+
+            // AST REWRITE
+            // elements: param_definition
+            // 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();
+            // 190:3: -> ^( VT_PARAM_LIST ( param_definition )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:190:6: ^( VT_PARAM_LIST ( param_definition )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PARAM_LIST, "VT_PARAM_LIST"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:190:22: ( param_definition )*
+                while ( stream_param_definition.hasNext() ) {
+                    adaptor.addChild(root_1, stream_param_definition.next());
+
+                }
+                stream_param_definition.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end parameters
+
+    public static class param_definition_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start param_definition
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:193:1: param_definition : ( data_type )? argument ;
+    public final param_definition_return param_definition() throws RecognitionException {
+        param_definition_return retval = new param_definition_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        data_type_return data_type48 = null;
+
+        argument_return argument49 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:194:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:194:4: ( data_type )? argument
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:194:4: ( data_type )?
+            int alt17=2;
+            alt17 = dfa17.predict(input);
+            switch (alt17) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:194:4: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_param_definition820);
+                    data_type48=data_type();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, data_type48.getTree());
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_argument_in_param_definition823);
+            argument49=argument();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, argument49.getTree());
+
+            }
+
+            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 param_definition
+
+    public static class argument_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start argument
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:197:1: argument : ID ( dimension_definition )* ;
+    public final argument_return argument() throws RecognitionException {
+        argument_return retval = new argument_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID50=null;
+        dimension_definition_return dimension_definition51 = null;
+
+
+        Object ID50_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:198:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:198:4: ID ( dimension_definition )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            ID50=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_argument834); if (failed) return retval;
+            if ( backtracking==0 ) {
+            ID50_tree = (Object)adaptor.create(ID50);
+            adaptor.addChild(root_0, ID50_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:198:7: ( dimension_definition )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0==LEFT_SQUARE) ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:198:7: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_argument836);
+            	    dimension_definition51=dimension_definition();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, dimension_definition51.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end argument
+
+    public static class template_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start template
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:202:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ ) ;
+    public final template_return template() throws RecognitionException {
+        template_return retval = new template_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token SEMICOLON54=null;
+        Token END56=null;
+        Token SEMICOLON57=null;
+        template_key_return template_key52 = null;
+
+        template_id_return template_id53 = null;
+
+        template_slot_return template_slot55 = null;
+
+
+        Object SEMICOLON54_tree=null;
+        Object END56_tree=null;
+        Object SEMICOLON57_tree=null;
+        RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_template_id=new RewriteRuleSubtreeStream(adaptor,"rule template_id");
+        RewriteRuleSubtreeStream stream_template_slot=new RewriteRuleSubtreeStream(adaptor,"rule template_slot");
+        RewriteRuleSubtreeStream stream_template_key=new RewriteRuleSubtreeStream(adaptor,"rule template_key");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:203:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:203:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_template_key_in_template849);
+            template_key52=template_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_template_key.add(template_key52.getTree());
+            pushFollow(FOLLOW_template_id_in_template851);
+            template_id53=template_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_template_id.add(template_id53.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:203:29: ( SEMICOLON )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==SEMICOLON) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:203:29: SEMICOLON
+                    {
+                    SEMICOLON54=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template853); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON54);
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:204:3: ( template_slot )+
+            int cnt20=0;
+            loop20:
+            do {
+                int alt20=2;
+                int LA20_0 = input.LA(1);
+
+                if ( (LA20_0==ID) ) {
+                    alt20=1;
+                }
+
+
+                switch (alt20) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:204:3: template_slot
+            	    {
+            	    pushFollow(FOLLOW_template_slot_in_template858);
+            	    template_slot55=template_slot();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_template_slot.add(template_slot55.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt20 >= 1 ) break loop20;
+            	    if (backtracking>0) {failed=true; return retval;}
+                        EarlyExitException eee =
+                            new EarlyExitException(20, input);
+                        throw eee;
+                }
+                cnt20++;
+            } while (true);
+
+            END56=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_template863); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END56);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:205:7: ( SEMICOLON )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==SEMICOLON) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:205:7: SEMICOLON
+                    {
+                    SEMICOLON57=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template865); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON57);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: template_slot, template_id, template_key
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 206:3: -> ^( template_key template_id ( template_slot )+ )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:206:6: ^( template_key template_id ( template_slot )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_template_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_template_id.next());
+                if ( !(stream_template_slot.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_template_slot.hasNext() ) {
+                    adaptor.addChild(root_1, stream_template_slot.next());
+
+                }
+                stream_template_slot.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end template
+
+    public static class template_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start template_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:209:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );
+    public final template_id_return template_id() throws RecognitionException {
+        template_id_return retval = new template_id_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token value=null;
+
+        Object value_tree=null;
+        RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:210:2: (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] )
+            int alt22=2;
+            int LA22_0 = input.LA(1);
+
+            if ( (LA22_0==ID) ) {
+                alt22=1;
+            }
+            else if ( (LA22_0==STRING) ) {
+                alt22=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("209:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );", 22, 0, input);
+
+                throw nvae;
+            }
+            switch (alt22) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:210:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_template_id893); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(value);
+
+
+                    // 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();
+                    // 210:14: -> VT_TEMPLATE_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:211:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_template_id906); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(value);
+
+
+                    // 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();
+                    // 211:18: -> VT_TEMPLATE_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+
+            }
+            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 template_id
+
+    public static class template_slot_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start template_slot
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:214:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
+    public final template_slot_return template_slot() throws RecognitionException {
+        template_slot_return retval = new template_slot_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token SEMICOLON60=null;
+        data_type_return data_type58 = null;
+
+        slot_id_return slot_id59 = null;
+
+
+        Object SEMICOLON60_tree=null;
+        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
+        RewriteRuleSubtreeStream stream_slot_id=new RewriteRuleSubtreeStream(adaptor,"rule slot_id");
+        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:215:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:215:5: data_type slot_id ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_data_type_in_template_slot923);
+            data_type58=data_type();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_data_type.add(data_type58.getTree());
+            pushFollow(FOLLOW_slot_id_in_template_slot925);
+            slot_id59=slot_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_slot_id.add(slot_id59.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:215:23: ( SEMICOLON )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
+
+            if ( (LA23_0==SEMICOLON) ) {
+                alt23=1;
+            }
+            switch (alt23) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:215:23: SEMICOLON
+                    {
+                    SEMICOLON60=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot927); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON60);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: slot_id, data_type
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 216:3: -> ^( VT_SLOT data_type slot_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:216: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);
+
+                adaptor.addChild(root_1, stream_data_type.next());
+                adaptor.addChild(root_1, stream_slot_id.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end template_slot
+
+    public static class slot_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start slot_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:219: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:219:9: (id= ID -> VT_SLOT_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:219:11: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_slot_id952); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 220:3: -> VT_SLOT_ID[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end slot_id
+
+    public static class rule_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start rule
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:223:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
+    public final rule_return rule() throws RecognitionException {
+        rule_return retval = new rule_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        rule_key_return rule_key61 = null;
+
+        rule_id_return rule_id62 = null;
+
+        rule_attributes_return rule_attributes63 = null;
+
+        when_part_return when_part64 = null;
+
+        rhs_chunk_return rhs_chunk65 = null;
+
+
+        RewriteRuleSubtreeStream stream_rule_key=new RewriteRuleSubtreeStream(adaptor,"rule rule_key");
+        RewriteRuleSubtreeStream stream_rule_id=new RewriteRuleSubtreeStream(adaptor,"rule rule_id");
+        RewriteRuleSubtreeStream stream_when_part=new RewriteRuleSubtreeStream(adaptor,"rule when_part");
+        RewriteRuleSubtreeStream stream_rule_attributes=new RewriteRuleSubtreeStream(adaptor,"rule rule_attributes");
+        RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:224:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:224:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
+            {
+            pushFollow(FOLLOW_rule_key_in_rule970);
+            rule_key61=rule_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rule_key.add(rule_key61.getTree());
+            pushFollow(FOLLOW_rule_id_in_rule972);
+            rule_id62=rule_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rule_id.add(rule_id62.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:224:21: ( rule_attributes )?
+            int alt24=2;
+            alt24 = dfa24.predict(input);
+            switch (alt24) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:224:21: rule_attributes
+                    {
+                    pushFollow(FOLLOW_rule_attributes_in_rule974);
+                    rule_attributes63=rule_attributes();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_rule_attributes.add(rule_attributes63.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:224:38: ( when_part )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0==ID) && ((validateIdentifierKey("when")))) {
+                alt25=1;
+            }
+            switch (alt25) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:224:38: when_part
+                    {
+                    pushFollow(FOLLOW_when_part_in_rule977);
+                    when_part64=when_part();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_when_part.add(when_part64.getTree());
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_rhs_chunk_in_rule980);
+            rhs_chunk65=rhs_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk65.getTree());
+
+            // AST REWRITE
+            // elements: rhs_chunk, rule_id, rule_attributes, when_part, rule_key
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 225:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:225:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_rule_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_rule_id.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:225:25: ( rule_attributes )?
+                if ( stream_rule_attributes.hasNext() ) {
+                    adaptor.addChild(root_1, stream_rule_attributes.next());
+
+                }
+                stream_rule_attributes.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:225:42: ( when_part )?
+                if ( stream_when_part.hasNext() ) {
+                    adaptor.addChild(root_1, stream_when_part.next());
+
+                }
+                stream_when_part.reset();
+                adaptor.addChild(root_1, stream_rhs_chunk.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end rule
+
+    public static class when_part_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start when_part
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:228:1: when_part : when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block ;
+    public final when_part_return when_part() throws RecognitionException {
+        when_part_return retval = new when_part_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token COLON67=null;
+        when_key_return when_key66 = null;
+
+        normal_lhs_block_return normal_lhs_block68 = null;
+
+
+        Object COLON67_tree=null;
+        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
+        RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
+        RewriteRuleSubtreeStream stream_when_key=new RewriteRuleSubtreeStream(adaptor,"rule when_key");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:229:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:229:4: when_key ( COLON )? normal_lhs_block
+            {
+            pushFollow(FOLLOW_when_key_in_when_part1009);
+            when_key66=when_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_when_key.add(when_key66.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:229:13: ( COLON )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+
+            if ( (LA26_0==COLON) ) {
+                alt26=1;
+            }
+            switch (alt26) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:229:13: COLON
+                    {
+                    COLON67=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_when_part1011); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON67);
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_normal_lhs_block_in_when_part1014);
+            normal_lhs_block68=normal_lhs_block();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block68.getTree());
+
+            // AST REWRITE
+            // elements: normal_lhs_block, when_key
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 230:2: -> when_key normal_lhs_block
+            {
+                adaptor.addChild(root_0, stream_when_key.next());
+                adaptor.addChild(root_0, stream_normal_lhs_block.next());
+
+            }
+
+            }
+
+            }
+
+            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 when_part
+
+    public static class rule_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start rule_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:233:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );
+    public final rule_id_return rule_id() throws RecognitionException {
+        rule_id_return retval = new rule_id_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token value=null;
+
+        Object value_tree=null;
+        RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:234:2: (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] )
+            int alt27=2;
+            int LA27_0 = input.LA(1);
+
+            if ( (LA27_0==ID) ) {
+                alt27=1;
+            }
+            else if ( (LA27_0==STRING) ) {
+                alt27=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("233:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );", 27, 0, input);
+
+                throw nvae;
+            }
+            switch (alt27) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:234:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_rule_id1035); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(value);
+
+
+                    // 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();
+                    // 234:14: -> VT_RULE_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:235:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1048); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(value);
+
+
+                    // 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();
+                    // 235:18: -> VT_RULE_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+
+            }
+            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 rule_id
+
+    public static class rule_attributes_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start rule_attributes
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:238:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
+    public final rule_attributes_return rule_attributes() throws RecognitionException {
+        rule_attributes_return retval = new rule_attributes_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token COLON70=null;
+        Token COMMA72=null;
+        rule_attribute_return attr = null;
+
+        attributes_key_return attributes_key69 = null;
+
+        rule_attribute_return rule_attribute71 = null;
+
+
+        Object COLON70_tree=null;
+        Object COMMA72_tree=null;
+        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
+        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
+        RewriteRuleSubtreeStream stream_attributes_key=new RewriteRuleSubtreeStream(adaptor,"rule attributes_key");
+        RewriteRuleSubtreeStream stream_rule_attribute=new RewriteRuleSubtreeStream(adaptor,"rule rule_attribute");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:4: ( attributes_key COLON )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
+                int LA28_1 = input.LA(2);
+
+                if ( (LA28_1==COLON) && ((validateIdentifierKey("attributes")))) {
+                    alt28=1;
+                }
+            }
+            switch (alt28) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:6: attributes_key COLON
+                    {
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1066);
+                    attributes_key69=attributes_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key69.getTree());
+                    COLON70=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1068); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON70);
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1073);
+            rule_attribute71=rule_attribute();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute71.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:45: ( ( COMMA )? attr= rule_attribute )*
+            loop30:
+            do {
+                int alt30=2;
+                alt30 = dfa30.predict(input);
+                switch (alt30) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:47: ( COMMA )? attr= rule_attribute
+            	    {
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:47: ( COMMA )?
+            	    int alt29=2;
+            	    int LA29_0 = input.LA(1);
+
+            	    if ( (LA29_0==COMMA) ) {
+            	        alt29=1;
+            	    }
+            	    switch (alt29) {
+            	        case 1 :
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:239:47: COMMA
+            	            {
+            	            COMMA72=(Token)input.LT(1);
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1077); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_COMMA.add(COMMA72);
+
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1082);
+            	    attr=rule_attribute();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_rule_attribute.add(attr.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop30;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: attributes_key, rule_attribute
+            // 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();
+            // 240:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:240:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_RULE_ATTRIBUTES, "VT_RULE_ATTRIBUTES"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:240:27: ( attributes_key )?
+                if ( stream_attributes_key.hasNext() ) {
+                    adaptor.addChild(root_1, stream_attributes_key.next());
+
+                }
+                stream_attributes_key.reset();
+                if ( !(stream_rule_attribute.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_rule_attribute.hasNext() ) {
+                    adaptor.addChild(root_1, stream_rule_attribute.next());
+
+                }
+                stream_rule_attribute.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end rule_attributes
+
+    public static class rule_attribute_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start rule_attribute
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
+    public final rule_attribute_return rule_attribute() throws RecognitionException {
+        rule_attribute_return retval = new rule_attribute_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        salience_return salience73 = null;
+
+        no_loop_return no_loop74 = null;
+
+        agenda_group_return agenda_group75 = null;
+
+        duration_return duration76 = null;
+
+        activation_group_return activation_group77 = null;
+
+        auto_focus_return auto_focus78 = null;
+
+        date_effective_return date_effective79 = null;
+
+        date_expires_return date_expires80 = null;
+
+        enabled_return enabled81 = null;
+
+        ruleflow_group_return ruleflow_group82 = null;
+
+        lock_on_active_return lock_on_active83 = null;
+
+        dialect_return dialect84 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:244:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
+            int alt31=12;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==ID) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
+                int LA31_1 = input.LA(2);
+
+                if ( (LA31_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {
+                    int LA31_2 = input.LA(3);
+
+                    if ( (LA31_2==ID) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {
+                        int LA31_7 = input.LA(4);
+
+                        if ( (LA31_7==MISC) && ((validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active")))) {
+                            alt31=11;
+                        }
+                        else if ( (LA31_7==STRING) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {
+                            int LA31_10 = input.LA(5);
+
+                            if ( ((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                                alt31=3;
+                            }
+                            else if ( ((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                                alt31=5;
+                            }
+                            else if ( ((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))) ) {
+                                alt31=7;
+                            }
+                            else if ( ((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))) ) {
+                                alt31=8;
+                            }
+                            else if ( ((validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                                alt31=10;
+                            }
+                            else {
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 10, input);
+
+                                throw nvae;
+                            }
+                        }
+                        else if ( ((validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))) ) {
+                            alt31=2;
+                        }
+                        else if ( ((validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))) ) {
+                            alt31=6;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 7, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 2, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA31_1==BOOL) && ((validateIdentifierKey("enabled")))) {
+                    alt31=9;
+                }
+                else if ( (LA31_1==STRING) && ((validateIdentifierKey("dialect")))) {
+                    alt31=12;
+                }
+                else if ( (LA31_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {
+                    int LA31_5 = input.LA(3);
+
+                    if ( ((validateIdentifierKey("salience"))) ) {
+                        alt31=1;
+                    }
+                    else if ( ((validateIdentifierKey("duration"))) ) {
+                        alt31=4;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 5, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA31_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {
+                    alt31=1;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("243:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 0, input);
+
+                throw nvae;
+            }
+            switch (alt31) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:244:4: salience
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_salience_in_rule_attribute1110);
+                    salience73=salience();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, salience73.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:245:4: no_loop
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1116);
+                    no_loop74=no_loop();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop74.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:246:4: agenda_group
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1123);
+                    agenda_group75=agenda_group();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group75.getTree());
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:247:4: duration
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_duration_in_rule_attribute1130);
+                    duration76=duration();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, duration76.getTree());
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:248:4: activation_group
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1137);
+                    activation_group77=activation_group();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group77.getTree());
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:249:4: auto_focus
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1143);
+                    auto_focus78=auto_focus();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus78.getTree());
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:250:4: date_effective
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1149);
+                    date_effective79=date_effective();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective79.getTree());
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:251:4: date_expires
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1155);
+                    date_expires80=date_expires();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires80.getTree());
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:252:4: enabled
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1161);
+                    enabled81=enabled();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled81.getTree());
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:253:4: ruleflow_group
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1167);
+                    ruleflow_group82=ruleflow_group();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group82.getTree());
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:254:4: lock_on_active
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1173);
+                    lock_on_active83=lock_on_active();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active83.getTree());
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:255:4: dialect
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1178);
+                    dialect84=dialect();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect84.getTree());
+
+                    }
+                    break;
+
+            }
+            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 rule_attribute
+
+    public static class date_effective_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start date_effective
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:258:1: date_effective : date_effective_key STRING ;
+    public final date_effective_return date_effective() throws RecognitionException {
+        date_effective_return retval = new date_effective_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token STRING86=null;
+        date_effective_key_return date_effective_key85 = null;
+
+
+        Object STRING86_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:259:2: ( date_effective_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:259:4: date_effective_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1190);
+            date_effective_key85=date_effective_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key85.getTree(), root_0);
+            STRING86=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_effective1193); if (failed) return retval;
+            if ( backtracking==0 ) {
+            STRING86_tree = (Object)adaptor.create(STRING86);
+            adaptor.addChild(root_0, STRING86_tree);
+            }
+
+            }
+
+            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 date_effective
+
+    public static class date_expires_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start date_expires
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:262:1: date_expires : date_expires_key STRING ;
+    public final date_expires_return date_expires() throws RecognitionException {
+        date_expires_return retval = new date_expires_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token STRING88=null;
+        date_expires_key_return date_expires_key87 = null;
+
+
+        Object STRING88_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:263:2: ( date_expires_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:263:4: date_expires_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1204);
+            date_expires_key87=date_expires_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key87.getTree(), root_0);
+            STRING88=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_expires1207); if (failed) return retval;
+            if ( backtracking==0 ) {
+            STRING88_tree = (Object)adaptor.create(STRING88);
+            adaptor.addChild(root_0, STRING88_tree);
+            }
+
+            }
+
+            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 date_expires
+
+    public static class enabled_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start enabled
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:266:1: enabled : enabled_key BOOL ;
+    public final enabled_return enabled() throws RecognitionException {
+        enabled_return retval = new enabled_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token BOOL90=null;
+        enabled_key_return enabled_key89 = null;
+
+
+        Object BOOL90_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:267:2: ( enabled_key BOOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:267:4: enabled_key BOOL
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_enabled_key_in_enabled1221);
+            enabled_key89=enabled_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key89.getTree(), root_0);
+            BOOL90=(Token)input.LT(1);
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1224); if (failed) return retval;
+            if ( backtracking==0 ) {
+            BOOL90_tree = (Object)adaptor.create(BOOL90);
+            adaptor.addChild(root_0, BOOL90_tree);
+            }
+
+            }
+
+            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 enabled
+
+    public static class salience_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start salience
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:270:1: salience : salience_key ( INT | paren_chunk ) ;
+    public final salience_return salience() throws RecognitionException {
+        salience_return retval = new salience_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token INT92=null;
+        salience_key_return salience_key91 = null;
+
+        paren_chunk_return paren_chunk93 = null;
+
+
+        Object INT92_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:271:2: ( salience_key ( INT | paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:271:4: salience_key ( INT | paren_chunk )
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_salience_key_in_salience1236);
+            salience_key91=salience_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key91.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:272:3: ( INT | paren_chunk )
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==INT) ) {
+                alt32=1;
+            }
+            else if ( (LA32_0==LEFT_PAREN) ) {
+                alt32=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("272:3: ( INT | paren_chunk )", 32, 0, input);
+
+                throw nvae;
+            }
+            switch (alt32) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:272:5: INT
+                    {
+                    INT92=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_salience1243); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    INT92_tree = (Object)adaptor.create(INT92);
+                    adaptor.addChild(root_0, INT92_tree);
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:273:5: paren_chunk
+                    {
+                    pushFollow(FOLLOW_paren_chunk_in_salience1252);
+                    paren_chunk93=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk93.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            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 salience
+
+    public static class no_loop_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start no_loop
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:277:1: no_loop : no_loop_key ( BOOL )? ;
+    public final no_loop_return no_loop() throws RecognitionException {
+        no_loop_return retval = new no_loop_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token BOOL95=null;
+        no_loop_key_return no_loop_key94 = null;
+
+
+        Object BOOL95_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:278:2: ( no_loop_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:278:4: no_loop_key ( BOOL )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1268);
+            no_loop_key94=no_loop_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key94.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:278:17: ( BOOL )?
+            int alt33=2;
+            int LA33_0 = input.LA(1);
+
+            if ( (LA33_0==BOOL) ) {
+                alt33=1;
+            }
+            switch (alt33) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:278:17: BOOL
+                    {
+                    BOOL95=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1271); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    BOOL95_tree = (Object)adaptor.create(BOOL95);
+                    adaptor.addChild(root_0, BOOL95_tree);
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            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 no_loop
+
+    public static class auto_focus_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start auto_focus
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:281:1: auto_focus : auto_focus_key ( BOOL )? ;
+    public final auto_focus_return auto_focus() throws RecognitionException {
+        auto_focus_return retval = new auto_focus_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token BOOL97=null;
+        auto_focus_key_return auto_focus_key96 = null;
+
+
+        Object BOOL97_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:282:2: ( auto_focus_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:282:4: auto_focus_key ( BOOL )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1283);
+            auto_focus_key96=auto_focus_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key96.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:282:20: ( BOOL )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
+
+            if ( (LA34_0==BOOL) ) {
+                alt34=1;
+            }
+            switch (alt34) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:282:20: BOOL
+                    {
+                    BOOL97=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1286); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    BOOL97_tree = (Object)adaptor.create(BOOL97);
+                    adaptor.addChild(root_0, BOOL97_tree);
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            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 auto_focus
+
+    public static class activation_group_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start activation_group
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:285:1: activation_group : activation_group_key STRING ;
+    public final activation_group_return activation_group() throws RecognitionException {
+        activation_group_return retval = new activation_group_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token STRING99=null;
+        activation_group_key_return activation_group_key98 = null;
+
+
+        Object STRING99_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:286:2: ( activation_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:286:4: activation_group_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1300);
+            activation_group_key98=activation_group_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key98.getTree(), root_0);
+            STRING99=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_activation_group1303); if (failed) return retval;
+            if ( backtracking==0 ) {
+            STRING99_tree = (Object)adaptor.create(STRING99);
+            adaptor.addChild(root_0, STRING99_tree);
+            }
+
+            }
+
+            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 activation_group
+
+    public static class ruleflow_group_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start ruleflow_group
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:289:1: ruleflow_group : ruleflow_group_key STRING ;
+    public final ruleflow_group_return ruleflow_group() throws RecognitionException {
+        ruleflow_group_return retval = new ruleflow_group_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token STRING101=null;
+        ruleflow_group_key_return ruleflow_group_key100 = null;
+
+
+        Object STRING101_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:290:2: ( ruleflow_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:290:4: ruleflow_group_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1314);
+            ruleflow_group_key100=ruleflow_group_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key100.getTree(), root_0);
+            STRING101=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1317); if (failed) return retval;
+            if ( backtracking==0 ) {
+            STRING101_tree = (Object)adaptor.create(STRING101);
+            adaptor.addChild(root_0, STRING101_tree);
+            }
+
+            }
+
+            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 ruleflow_group
+
+    public static class agenda_group_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start agenda_group
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:293:1: agenda_group : agenda_group_key STRING ;
+    public final agenda_group_return agenda_group() throws RecognitionException {
+        agenda_group_return retval = new agenda_group_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token STRING103=null;
+        agenda_group_key_return agenda_group_key102 = null;
+
+
+        Object STRING103_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:294:2: ( agenda_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:294:4: agenda_group_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1328);
+            agenda_group_key102=agenda_group_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key102.getTree(), root_0);
+            STRING103=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1331); if (failed) return retval;
+            if ( backtracking==0 ) {
+            STRING103_tree = (Object)adaptor.create(STRING103);
+            adaptor.addChild(root_0, STRING103_tree);
+            }
+
+            }
+
+            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 agenda_group
+
+    public static class duration_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start duration
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:297:1: duration : duration_key INT ;
+    public final duration_return duration() throws RecognitionException {
+        duration_return retval = new duration_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token INT105=null;
+        duration_key_return duration_key104 = null;
+
+
+        Object INT105_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:298:2: ( duration_key INT )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:298:4: duration_key INT
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_duration_key_in_duration1342);
+            duration_key104=duration_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key104.getTree(), root_0);
+            INT105=(Token)input.LT(1);
+            match(input,INT,FOLLOW_INT_in_duration1345); if (failed) return retval;
+            if ( backtracking==0 ) {
+            INT105_tree = (Object)adaptor.create(INT105);
+            adaptor.addChild(root_0, INT105_tree);
+            }
+
+            }
+
+            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 duration
+
+    public static class dialect_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start dialect
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:301:1: dialect : dialect_key STRING ;
+    public final dialect_return dialect() throws RecognitionException {
+        dialect_return retval = new dialect_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token STRING107=null;
+        dialect_key_return dialect_key106 = null;
+
+
+        Object STRING107_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:302:2: ( dialect_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:302:4: dialect_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_dialect_key_in_dialect1359);
+            dialect_key106=dialect_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key106.getTree(), root_0);
+            STRING107=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_dialect1362); if (failed) return retval;
+            if ( backtracking==0 ) {
+            STRING107_tree = (Object)adaptor.create(STRING107);
+            adaptor.addChild(root_0, STRING107_tree);
+            }
+
+            }
+
+            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 dialect
+
+    public static class lock_on_active_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lock_on_active
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:305:1: lock_on_active : lock_on_active_key ( BOOL )? ;
+    public final lock_on_active_return lock_on_active() throws RecognitionException {
+        lock_on_active_return retval = new lock_on_active_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token BOOL109=null;
+        lock_on_active_key_return lock_on_active_key108 = null;
+
+
+        Object BOOL109_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:306:2: ( lock_on_active_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:306:4: lock_on_active_key ( BOOL )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1380);
+            lock_on_active_key108=lock_on_active_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key108.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:306:24: ( BOOL )?
+            int alt35=2;
+            int LA35_0 = input.LA(1);
+
+            if ( (LA35_0==BOOL) ) {
+                alt35=1;
+            }
+            switch (alt35) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:306:24: BOOL
+                    {
+                    BOOL109=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1383); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    BOOL109_tree = (Object)adaptor.create(BOOL109);
+                    adaptor.addChild(root_0, BOOL109_tree);
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            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 lock_on_active
+
     public static class normal_lhs_block_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start normal_lhs_block
-    // /Users/porcelli/Desktop/testes/NewDRL.g:75:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:309:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
     public final normal_lhs_block_return normal_lhs_block() throws RecognitionException {
         normal_lhs_block_return retval = new normal_lhs_block_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_return lhs1 = null;
+        lhs_return lhs110 = null;
 
 
         RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:76:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:76:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:310:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:310:4: ( lhs )*
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:76:4: ( lhs )*
-            loop1:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:310:4: ( lhs )*
+            loop36:
             do {
-                int alt1=2;
-                int LA1_0 = input.LA(1);
+                int alt36=2;
+                int LA36_0 = input.LA(1);
 
-                if ( (LA1_0==LEFT_PAREN||LA1_0==ID) ) {
-                    alt1=1;
+                if ( (LA36_0==ID||LA36_0==LEFT_PAREN) ) {
+                    alt36=1;
                 }
 
 
-                switch (alt1) {
+                switch (alt36) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:76:4: lhs
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:310:4: lhs
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block220);
-            	    lhs1=lhs();
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1395);
+            	    lhs110=lhs();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs.add(lhs1.getTree());
+            	    if ( backtracking==0 ) stream_lhs.add(lhs110.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop1;
+            	    break loop36;
                 }
             } while (true);
 
@@ -191,14 +4140,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 77:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            // 311:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:77:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:311:5: ^( VT_AND_IMPLICIT ( lhs )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_IMPLICIT, "VT_AND_IMPLICIT"), root_1);
 
-                // /Users/porcelli/Desktop/testes/NewDRL.g:77:23: ( lhs )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:311:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -237,28 +4186,28 @@
     };
 
     // $ANTLR start lhs
-    // /Users/porcelli/Desktop/testes/NewDRL.g:80:1: lhs : lhs_or ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:314:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_or_return lhs_or2 = null;
+        lhs_or_return lhs_or111 = null;
 
 
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:80:5: ( lhs_or )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:80:7: lhs_or
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:314:5: ( lhs_or )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:314:7: lhs_or
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_or_in_lhs241);
-            lhs_or2=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_lhs1416);
+            lhs_or111=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or2.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or111.getTree());
 
             }
 
@@ -285,7 +4234,7 @@
     };
 
     // $ANTLR start lhs_or
-    // /Users/porcelli/Desktop/testes/NewDRL.g:83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:317:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( 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);
@@ -293,22 +4242,22 @@
         Object root_0 = null;
 
         Token pipe=null;
-        Token LEFT_PAREN3=null;
-        Token RIGHT_PAREN5=null;
+        Token LEFT_PAREN112=null;
+        Token RIGHT_PAREN114=null;
         or_key_return or = null;
 
         or_key_return value = null;
 
-        lhs_and_return lhs_and4 = null;
+        lhs_and_return lhs_and113 = null;
 
-        lhs_and_return lhs_and6 = null;
+        lhs_and_return lhs_and115 = null;
 
-        lhs_and_return lhs_and7 = null;
+        lhs_and_return lhs_and116 = null;
 
 
         Object pipe_tree=null;
-        Object LEFT_PAREN3_tree=null;
-        Object RIGHT_PAREN5_tree=null;
+        Object LEFT_PAREN112_tree=null;
+        Object RIGHT_PAREN114_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_PIPE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_PIPE");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -318,36 +4267,36 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:86:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( 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 alt5=2;
-            int LA5_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:320:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
+            int alt40=2;
+            int LA40_0 = input.LA(1);
 
-            if ( (LA5_0==LEFT_PAREN) ) {
-                int LA5_1 = input.LA(2);
+            if ( (LA40_0==LEFT_PAREN) ) {
+                int LA40_1 = input.LA(2);
 
-                if ( (LA5_1==ID) ) {
+                if ( (LA40_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
                     case LEFT_SQUARE:
                         {
-                        alt5=2;
+                        alt40=2;
                         }
                         break;
                     case LEFT_PAREN:
                         {
-                        int LA5_4 = input.LA(4);
+                        int LA40_4 = input.LA(4);
 
                         if ( (synpred1()) ) {
-                            alt5=1;
+                            alt40=1;
                         }
                         else if ( (true) ) {
-                            alt5=2;
+                            alt40=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 4, input);
+                                new NoViableAltException("317:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 4, input);
 
                             throw nvae;
                         }
@@ -355,18 +4304,18 @@
                         break;
                     case ID:
                         {
-                        int LA5_5 = input.LA(4);
+                        int LA40_5 = input.LA(4);
 
                         if ( (synpred1()) ) {
-                            alt5=1;
+                            alt40=1;
                         }
                         else if ( (true) ) {
-                            alt5=2;
+                            alt40=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 5, input);
+                                new NoViableAltException("317:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 5, input);
 
                             throw nvae;
                         }
@@ -375,84 +4324,84 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 3, input);
+                            new NoViableAltException("317:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 3, input);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA5_1==LEFT_PAREN) ) {
-                    alt5=2;
+                else if ( (LA40_1==LEFT_PAREN) ) {
+                    alt40=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 1, input);
+                        new NoViableAltException("317:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA5_0==ID) ) {
-                alt5=2;
+            else if ( (LA40_0==ID) ) {
+                alt40=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 0, input);
+                    new NoViableAltException("317:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 0, input);
 
                 throw nvae;
             }
-            switch (alt5) {
+            switch (alt40) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:86:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:320:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN3=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or262); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN3);
+                    LEFT_PAREN112=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1437); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN112);
 
-                    pushFollow(FOLLOW_or_key_in_lhs_or266);
+                    pushFollow(FOLLOW_or_key_in_lhs_or1441);
                     or=or_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_or_key.add(or.getTree());
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:86:48: ( lhs_and )+
-                    int cnt2=0;
-                    loop2:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:320:48: ( lhs_and )+
+                    int cnt37=0;
+                    loop37:
                     do {
-                        int alt2=2;
-                        int LA2_0 = input.LA(1);
+                        int alt37=2;
+                        int LA37_0 = input.LA(1);
 
-                        if ( (LA2_0==LEFT_PAREN||LA2_0==ID) ) {
-                            alt2=1;
+                        if ( (LA37_0==ID||LA37_0==LEFT_PAREN) ) {
+                            alt37=1;
                         }
 
 
-                        switch (alt2) {
+                        switch (alt37) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:86:48: lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:320:48: lhs_and
                     	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or268);
-                    	    lhs_and4=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1443);
+                    	    lhs_and113=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and4.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and113.getTree());
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt2 >= 1 ) break loop2;
+                    	    if ( cnt37 >= 1 ) break loop37;
                     	    if (backtracking>0) {failed=true; return retval;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(2, input);
+                                    new EarlyExitException(37, input);
                                 throw eee;
                         }
-                        cnt2++;
+                        cnt37++;
                     } while (true);
 
-                    RIGHT_PAREN5=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or271); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN5);
+                    RIGHT_PAREN114=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1446); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN114);
 
 
                     // AST REWRITE
@@ -466,9 +4415,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 87:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ )
+                    // 321:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:87:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:321:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_PREFIX, ((Token)or.start)), root_1);
@@ -492,16 +4441,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:88:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:322:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     {
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:88:4: ( lhs_and -> lhs_and )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:88:5: lhs_and
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:322:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:322:5: lhs_and
                     {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or290);
-                    lhs_and6=lhs_and();
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or1465);
+                    lhs_and115=lhs_and();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and6.getTree());
+                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and115.getTree());
 
                     // AST REWRITE
                     // elements: lhs_and
@@ -514,7 +4463,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 88:13: -> lhs_and
+                    // 322:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -524,58 +4473,58 @@
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:89:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
-                    loop4:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    loop39:
                     do {
-                        int alt4=2;
-                        int LA4_0 = input.LA(1);
+                        int alt39=2;
+                        int LA39_0 = input.LA(1);
 
-                        if ( (LA4_0==ID) ) {
-                            int LA4_2 = input.LA(2);
+                        if ( (LA39_0==ID) ) {
+                            int LA39_2 = input.LA(2);
 
                             if ( ((synpred2()&&(validateIdentifierKey("or")))) ) {
-                                alt4=1;
+                                alt39=1;
                             }
 
 
                         }
-                        else if ( (LA4_0==DOUBLE_PIPE) ) {
-                            int LA4_3 = input.LA(2);
+                        else if ( (LA39_0==DOUBLE_PIPE) ) {
+                            int LA39_3 = input.LA(2);
 
                             if ( (synpred2()) ) {
-                                alt4=1;
+                                alt39=1;
                             }
 
 
                         }
 
 
-                        switch (alt4) {
+                        switch (alt39) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:89:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
                     	    {
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:89:28: (value= or_key | pipe= DOUBLE_PIPE )
-                    	    int alt3=2;
-                    	    int LA3_0 = input.LA(1);
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    int alt38=2;
+                    	    int LA38_0 = input.LA(1);
 
-                    	    if ( (LA3_0==ID) && ((validateIdentifierKey("or")))) {
-                    	        alt3=1;
+                    	    if ( (LA38_0==ID) && ((validateIdentifierKey("or")))) {
+                    	        alt38=1;
                     	    }
-                    	    else if ( (LA3_0==DOUBLE_PIPE) ) {
-                    	        alt3=2;
+                    	    else if ( (LA38_0==DOUBLE_PIPE) ) {
+                    	        alt38=2;
                     	    }
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("89:28: (value= or_key | pipe= DOUBLE_PIPE )", 3, 0, input);
+                    	            new NoViableAltException("323:28: (value= or_key | pipe= DOUBLE_PIPE )", 38, 0, input);
 
                     	        throw nvae;
                     	    }
-                    	    switch (alt3) {
+                    	    switch (alt38) {
                     	        case 1 :
-                    	            // /Users/porcelli/Desktop/testes/NewDRL.g:89:29: value= or_key
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:29: value= or_key
                     	            {
-                    	            pushFollow(FOLLOW_or_key_in_lhs_or312);
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or1487);
                     	            value=or_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -587,10 +4536,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Desktop/testes/NewDRL.g:89:69: pipe= DOUBLE_PIPE
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
-                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or319); if (failed) return retval;
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1494); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
                     	            if ( backtracking==0 ) {
@@ -602,14 +4551,14 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or324);
-                    	    lhs_and7=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1499);
+                    	    lhs_and116=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and7.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and116.getTree());
 
                     	    // AST REWRITE
-                    	    // elements: lhs_and, lhs_or
+                    	    // elements: lhs_or, lhs_and
                     	    // token labels: 
                     	    // rule labels: retval
                     	    // token list labels: 
@@ -619,9 +4568,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 90:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    // 324:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	    {
-                    	        // /Users/porcelli/Desktop/testes/NewDRL.g:90:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:324: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);
@@ -640,7 +4589,7 @@
                     	    break;
 
                     	default :
-                    	    break loop4;
+                    	    break loop39;
                         }
                     } while (true);
 
@@ -672,7 +4621,7 @@
     };
 
     // $ANTLR start lhs_and
-    // /Users/porcelli/Desktop/testes/NewDRL.g:93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( 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);
@@ -680,22 +4629,22 @@
         Object root_0 = null;
 
         Token amper=null;
-        Token LEFT_PAREN8=null;
-        Token RIGHT_PAREN10=null;
+        Token LEFT_PAREN117=null;
+        Token RIGHT_PAREN119=null;
         and_key_return and = null;
 
         and_key_return value = null;
 
-        lhs_unary_return lhs_unary9 = null;
+        lhs_unary_return lhs_unary118 = null;
 
-        lhs_unary_return lhs_unary11 = null;
+        lhs_unary_return lhs_unary120 = null;
 
-        lhs_unary_return lhs_unary12 = null;
+        lhs_unary_return lhs_unary121 = null;
 
 
         Object amper_tree=null;
-        Object LEFT_PAREN8_tree=null;
-        Object RIGHT_PAREN10_tree=null;
+        Object LEFT_PAREN117_tree=null;
+        Object RIGHT_PAREN119_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");
@@ -705,68 +4654,79 @@
         	Token andToken = null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:96:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( 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 alt9=2;
-            int LA9_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:330:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
+            int alt44=2;
+            int LA44_0 = input.LA(1);
 
-            if ( (LA9_0==LEFT_PAREN) ) {
-                int LA9_1 = input.LA(2);
+            if ( (LA44_0==LEFT_PAREN) ) {
+                int LA44_1 = input.LA(2);
 
-                if ( (LA9_1==ID) ) {
+                if ( (LA44_1==LEFT_PAREN) ) {
+                    alt44=2;
+                }
+                else if ( (LA44_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
                     case LEFT_SQUARE:
                         {
-                        alt9=2;
+                        alt44=2;
                         }
                         break;
                     case LEFT_PAREN:
                         {
                         switch ( input.LA(4) ) {
-                        case LEFT_PAREN:
+                        case ID:
                             {
-                            int LA9_6 = input.LA(5);
+                            int LA44_6 = input.LA(5);
 
                             if ( (synpred3()) ) {
-                                alt9=1;
+                                alt44=1;
                             }
                             else if ( (true) ) {
-                                alt9=2;
+                                alt44=2;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 6, input);
+                                    new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 6, input);
 
                                 throw nvae;
                             }
                             }
                             break;
-                        case ID:
+                        case LEFT_PAREN:
                             {
-                            int LA9_7 = input.LA(5);
+                            int LA44_7 = input.LA(5);
 
                             if ( (synpred3()) ) {
-                                alt9=1;
+                                alt44=1;
                             }
                             else if ( (true) ) {
-                                alt9=2;
+                                alt44=2;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 7, input);
+                                    new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 7, input);
 
                                 throw nvae;
                             }
                             }
                             break;
+                        case VT_COMPILATION_UNIT:
+                        case VT_FUNCTION_IMPORT:
                         case VT_FACT:
                         case VT_CONSTRAINTS:
-                        case VT_QUALIFIED_ID:
                         case VT_LABEL:
-                        case VT_NAME:
+                        case VT_QUERY_ID:
+                        case VT_TEMPLATE_ID:
+                        case VT_RULE_ID:
+                        case VT_ENTRYPOINT_ID:
+                        case VT_SLOT_ID:
+                        case VT_SLOT:
+                        case VT_RULE_ATTRIBUTES:
+                        case VT_RHS_CHUNK:
                         case VT_CURLY_CHUNK:
                         case VT_SQUARE_CHUNK:
                         case VT_PAREN_CHUNK:
@@ -786,6 +4746,34 @@
                         case VT_FIELD:
                         case VT_ACCESSOR_PATH:
                         case VT_ACCESSOR_ELEMENT:
+                        case VT_DATA_TYPE:
+                        case VT_PACKAGE_ID:
+                        case VT_IMPORT_ID:
+                        case VT_GLOBAL_ID:
+                        case VT_FUNCTION_ID:
+                        case VT_PARAM_LIST:
+                        case VK_DATE_EFFECTIVE:
+                        case VK_DATE_EXPIRES:
+                        case VK_LOCK_ON_ACTIVE:
+                        case VK_NO_LOOP:
+                        case VK_AUTO_FOCUS:
+                        case VK_ACTIVATION_GROUP:
+                        case VK_AGENDA_GROUP:
+                        case VK_RULEFLOW_GROUP:
+                        case VK_DURATION:
+                        case VK_DIALECT:
+                        case VK_SALIENCE:
+                        case VK_ENABLED:
+                        case VK_ATTRIBUTES:
+                        case VK_WHEN:
+                        case VK_RULE:
+                        case VK_IMPORT:
+                        case VK_PACKAGE:
+                        case VK_TEMPLATE:
+                        case VK_QUERY:
+                        case VK_DECLARE:
+                        case VK_FUNCTION:
+                        case VK_GLOBAL:
                         case VK_EVAL:
                         case VK_CONTAINS:
                         case VK_MATCHES:
@@ -806,27 +4794,30 @@
                         case VK_REVERSE:
                         case VK_RESULT:
                         case VK_COLLECT:
+                        case SEMICOLON:
+                        case DOT:
+                        case DOT_STAR:
+                        case END:
+                        case STRING:
+                        case COMMA:
                         case RIGHT_PAREN:
+                        case COLON:
+                        case BOOL:
+                        case INT:
                         case DOUBLE_PIPE:
                         case DOUBLE_AMPER:
-                        case SEMICOLON:
-                        case COMMA:
-                        case DOT:
                         case ARROW:
-                        case COLON:
                         case EQUAL:
                         case GREATER:
                         case GREATER_EQUAL:
                         case LESS:
                         case LESS_EQUAL:
                         case NOT_EQUAL:
-                        case STRING:
-                        case INT:
                         case FLOAT:
-                        case BOOL:
                         case NULL:
                         case LEFT_SQUARE:
                         case RIGHT_SQUARE:
+                        case THEN:
                         case LEFT_CURLY:
                         case RIGHT_CURLY:
                         case MISC:
@@ -836,18 +4827,17 @@
                         case HexDigit:
                         case UnicodeEscape:
                         case OctalEscape:
-                        case TILDE:
                         case SH_STYLE_SINGLE_LINE_COMMENT:
                         case C_STYLE_SINGLE_LINE_COMMENT:
                         case MULTI_LINE_COMMENT:
                             {
-                            alt9=2;
+                            alt44=2;
                             }
                             break;
                         default:
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 4, input);
+                                new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 4, input);
 
                             throw nvae;
                         }
@@ -856,18 +4846,18 @@
                         break;
                     case ID:
                         {
-                        int LA9_5 = input.LA(4);
+                        int LA44_5 = input.LA(4);
 
                         if ( (synpred3()) ) {
-                            alt9=1;
+                            alt44=1;
                         }
                         else if ( (true) ) {
-                            alt9=2;
+                            alt44=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 5, input);
+                                new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 5, input);
 
                             throw nvae;
                         }
@@ -876,84 +4866,81 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 3, input);
+                            new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 3, input);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA9_1==LEFT_PAREN) ) {
-                    alt9=2;
-                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 1, input);
+                        new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA9_0==ID) ) {
-                alt9=2;
+            else if ( (LA44_0==ID) ) {
+                alt44=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 0, input);
+                    new NoViableAltException("327:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 0, input);
 
                 throw nvae;
             }
-            switch (alt9) {
+            switch (alt44) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:96:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:330:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN8=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and362); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN8);
+                    LEFT_PAREN117=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1537); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN117);
 
-                    pushFollow(FOLLOW_and_key_in_lhs_and366);
+                    pushFollow(FOLLOW_and_key_in_lhs_and1541);
                     and=and_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_and_key.add(and.getTree());
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:96:51: ( lhs_unary )+
-                    int cnt6=0;
-                    loop6:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:330:51: ( lhs_unary )+
+                    int cnt41=0;
+                    loop41:
                     do {
-                        int alt6=2;
-                        int LA6_0 = input.LA(1);
+                        int alt41=2;
+                        int LA41_0 = input.LA(1);
 
-                        if ( (LA6_0==LEFT_PAREN||LA6_0==ID) ) {
-                            alt6=1;
+                        if ( (LA41_0==ID||LA41_0==LEFT_PAREN) ) {
+                            alt41=1;
                         }
 
 
-                        switch (alt6) {
+                        switch (alt41) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:96:51: lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:330:51: lhs_unary
                     	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and368);
-                    	    lhs_unary9=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1543);
+                    	    lhs_unary118=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary9.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary118.getTree());
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt6 >= 1 ) break loop6;
+                    	    if ( cnt41 >= 1 ) break loop41;
                     	    if (backtracking>0) {failed=true; return retval;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(6, input);
+                                    new EarlyExitException(41, input);
                                 throw eee;
                         }
-                        cnt6++;
+                        cnt41++;
                     } while (true);
 
-                    RIGHT_PAREN10=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and371); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN10);
+                    RIGHT_PAREN119=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1546); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN119);
 
 
                     // AST REWRITE
@@ -967,9 +4954,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 97:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ )
+                    // 331:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:97:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:331:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_PREFIX, ((Token)and.start)), root_1);
@@ -993,16 +4980,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:98:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:332:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     {
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:98:4: ( lhs_unary -> lhs_unary )
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:98:5: lhs_unary
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:332:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:332:5: lhs_unary
                     {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and390);
-                    lhs_unary11=lhs_unary();
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1565);
+                    lhs_unary120=lhs_unary();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary11.getTree());
+                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary120.getTree());
 
                     // AST REWRITE
                     // elements: lhs_unary
@@ -1015,7 +5002,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 98:15: -> lhs_unary
+                    // 332:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -1025,58 +5012,58 @@
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:99:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
-                    loop8:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    loop43:
                     do {
-                        int alt8=2;
-                        int LA8_0 = input.LA(1);
+                        int alt43=2;
+                        int LA43_0 = input.LA(1);
 
-                        if ( (LA8_0==ID) ) {
-                            int LA8_2 = input.LA(2);
+                        if ( (LA43_0==ID) ) {
+                            int LA43_2 = input.LA(2);
 
                             if ( ((synpred4()&&(validateIdentifierKey("and")))) ) {
-                                alt8=1;
+                                alt43=1;
                             }
 
 
                         }
-                        else if ( (LA8_0==DOUBLE_AMPER) ) {
-                            int LA8_3 = input.LA(2);
+                        else if ( (LA43_0==DOUBLE_AMPER) ) {
+                            int LA43_3 = input.LA(2);
 
                             if ( (synpred4()) ) {
-                                alt8=1;
+                                alt43=1;
                             }
 
 
                         }
 
 
-                        switch (alt8) {
+                        switch (alt43) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:99:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
                     	    {
-                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:99:30: (value= and_key | amper= DOUBLE_AMPER )
-                    	    int alt7=2;
-                    	    int LA7_0 = input.LA(1);
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    int alt42=2;
+                    	    int LA42_0 = input.LA(1);
 
-                    	    if ( (LA7_0==ID) && ((validateIdentifierKey("and")))) {
-                    	        alt7=1;
+                    	    if ( (LA42_0==ID) && ((validateIdentifierKey("and")))) {
+                    	        alt42=1;
                     	    }
-                    	    else if ( (LA7_0==DOUBLE_AMPER) ) {
-                    	        alt7=2;
+                    	    else if ( (LA42_0==DOUBLE_AMPER) ) {
+                    	        alt42=2;
                     	    }
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("99:30: (value= and_key | amper= DOUBLE_AMPER )", 7, 0, input);
+                    	            new NoViableAltException("333:30: (value= and_key | amper= DOUBLE_AMPER )", 42, 0, input);
 
                     	        throw nvae;
                     	    }
-                    	    switch (alt7) {
+                    	    switch (alt42) {
                     	        case 1 :
-                    	            // /Users/porcelli/Desktop/testes/NewDRL.g:99:31: value= and_key
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:31: value= and_key
                     	            {
-                    	            pushFollow(FOLLOW_and_key_in_lhs_and412);
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and1587);
                     	            value=and_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -1088,10 +5075,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Desktop/testes/NewDRL.g:99:73: amper= DOUBLE_AMPER
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
-                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and419); if (failed) return retval;
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1594); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
 
                     	            if ( backtracking==0 ) {
@@ -1103,14 +5090,14 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and424);
-                    	    lhs_unary12=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1599);
+                    	    lhs_unary121=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary12.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary121.getTree());
 
                     	    // AST REWRITE
-                    	    // elements: lhs_and, lhs_unary
+                    	    // elements: lhs_unary, lhs_and
                     	    // token labels: 
                     	    // rule labels: retval
                     	    // token list labels: 
@@ -1120,9 +5107,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 100:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    // 334:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	    {
-                    	        // /Users/porcelli/Desktop/testes/NewDRL.g:100:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:334: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);
@@ -1141,7 +5128,7 @@
                     	    break;
 
                     	default :
-                    	    break loop8;
+                    	    break loop43;
                         }
                     } while (true);
 
@@ -1173,170 +5160,170 @@
     };
 
     // $ANTLR start lhs_unary
-    // /Users/porcelli/Desktop/testes/NewDRL.g:103:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:337:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
     public final lhs_unary_return lhs_unary() throws RecognitionException {
         lhs_unary_return retval = new lhs_unary_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN17=null;
-        Token RIGHT_PAREN19=null;
-        Token SEMICOLON21=null;
-        lhs_exist_return lhs_exist13 = null;
+        Token LEFT_PAREN126=null;
+        Token RIGHT_PAREN128=null;
+        Token SEMICOLON130=null;
+        lhs_exist_return lhs_exist122 = null;
 
-        lhs_not_return lhs_not14 = null;
+        lhs_not_return lhs_not123 = null;
 
-        lhs_eval_return lhs_eval15 = null;
+        lhs_eval_return lhs_eval124 = null;
 
-        lhs_forall_return lhs_forall16 = null;
+        lhs_forall_return lhs_forall125 = null;
 
-        lhs_or_return lhs_or18 = null;
+        lhs_or_return lhs_or127 = null;
 
-        pattern_source_return pattern_source20 = null;
+        pattern_source_return pattern_source129 = null;
 
 
-        Object LEFT_PAREN17_tree=null;
-        Object RIGHT_PAREN19_tree=null;
-        Object SEMICOLON21_tree=null;
+        Object LEFT_PAREN126_tree=null;
+        Object RIGHT_PAREN128_tree=null;
+        Object SEMICOLON130_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:105:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:339:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:339:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
-            int alt10=6;
-            int LA10_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:339:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            int alt45=6;
+            int LA45_0 = input.LA(1);
 
-            if ( (LA10_0==ID) ) {
-                int LA10_1 = input.LA(2);
+            if ( (LA45_0==ID) ) {
+                int LA45_1 = input.LA(2);
 
                 if ( ((validateIdentifierKey("exists"))) ) {
-                    alt10=1;
+                    alt45=1;
                 }
                 else if ( ((validateIdentifierKey("not"))) ) {
-                    alt10=2;
+                    alt45=2;
                 }
                 else if ( ((validateIdentifierKey("eval"))) ) {
-                    alt10=3;
+                    alt45=3;
                 }
                 else if ( ((validateIdentifierKey("forall"))) ) {
-                    alt10=4;
+                    alt45=4;
                 }
                 else if ( (true) ) {
-                    alt10=6;
+                    alt45=6;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 10, 1, input);
+                        new NoViableAltException("339:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA10_0==LEFT_PAREN) ) {
-                alt10=5;
+            else if ( (LA45_0==LEFT_PAREN) ) {
+                alt45=5;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 10, 0, input);
+                    new NoViableAltException("339:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 0, input);
 
                 throw nvae;
             }
-            switch (alt10) {
+            switch (alt45) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:105:6: lhs_exist
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:339:6: lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary462);
-                    lhs_exist13=lhs_exist();
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1637);
+                    lhs_exist122=lhs_exist();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist13.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist122.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:106:5: lhs_not
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:340:5: lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary468);
-                    lhs_not14=lhs_not();
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1643);
+                    lhs_not123=lhs_not();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not14.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not123.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:107:5: lhs_eval
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:341:5: lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary474);
-                    lhs_eval15=lhs_eval();
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1649);
+                    lhs_eval124=lhs_eval();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval15.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval124.getTree());
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:108:5: lhs_forall
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:342:5: lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary480);
-                    lhs_forall16=lhs_forall();
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1655);
+                    lhs_forall125=lhs_forall();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall16.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall125.getTree());
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:109:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:343:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN17=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary486); if (failed) return retval;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary489);
-                    lhs_or18=lhs_or();
+                    LEFT_PAREN126=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1661); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1664);
+                    lhs_or127=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or18.getTree());
-                    RIGHT_PAREN19=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary491); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or127.getTree());
+                    RIGHT_PAREN128=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1666); if (failed) return retval;
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:110:5: pattern_source
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:344:5: pattern_source
                     {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary498);
-                    pattern_source20=pattern_source();
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1673);
+                    pattern_source129=pattern_source();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source20.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source129.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:112:3: ( ( SEMICOLON )=> SEMICOLON )?
-            int alt11=2;
-            int LA11_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:346:3: ( ( SEMICOLON )=> SEMICOLON )?
+            int alt46=2;
+            int LA46_0 = input.LA(1);
 
-            if ( (LA11_0==SEMICOLON) ) {
-                int LA11_1 = input.LA(2);
+            if ( (LA46_0==SEMICOLON) ) {
+                int LA46_1 = input.LA(2);
 
                 if ( (synpred5()) ) {
-                    alt11=1;
+                    alt46=1;
                 }
             }
-            switch (alt11) {
+            switch (alt46) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:112:4: ( SEMICOLON )=> SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:346:4: ( SEMICOLON )=> SEMICOLON
                     {
-                    SEMICOLON21=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary512); if (failed) return retval;
+                    SEMICOLON130=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1687); if (failed) return retval;
 
                     }
                     break;
@@ -1369,82 +5356,82 @@
     };
 
     // $ANTLR start lhs_exist
-    // /Users/porcelli/Desktop/testes/NewDRL.g:115: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 )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:349: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 )? ) ;
     public final lhs_exist_return lhs_exist() throws RecognitionException {
         lhs_exist_return retval = new lhs_exist_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN24=null;
-        Token RIGHT_PAREN26=null;
-        exists_key_return exists_key22 = null;
+        Token LEFT_PAREN133=null;
+        Token RIGHT_PAREN135=null;
+        exists_key_return exists_key131 = null;
 
-        lhs_or_return lhs_or23 = null;
+        lhs_or_return lhs_or132 = null;
 
-        lhs_or_return lhs_or25 = null;
+        lhs_or_return lhs_or134 = null;
 
-        lhs_pattern_return lhs_pattern27 = null;
+        lhs_pattern_return lhs_pattern136 = null;
 
 
-        Object LEFT_PAREN24_tree=null;
-        Object RIGHT_PAREN26_tree=null;
+        Object LEFT_PAREN133_tree=null;
+        Object RIGHT_PAREN135_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_exists_key=new RewriteRuleSubtreeStream(adaptor,"rule exists_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:116: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 )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:116:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:350: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 )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:350: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_exist526);
-            exists_key22=exists_key();
+            pushFollow(FOLLOW_exists_key_in_lhs_exist1701);
+            exists_key131=exists_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_exists_key.add(exists_key22.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:117:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
-            int alt12=3;
-            alt12 = dfa12.predict(input);
-            switch (alt12) {
+            if ( backtracking==0 ) stream_exists_key.add(exists_key131.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt47=3;
+            alt47 = dfa47.predict(input);
+            switch (alt47) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:117:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist550);
-                    lhs_or23=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1725);
+                    lhs_or132=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or23.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or132.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:118:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:352:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN24=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist557); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN24);
+                    LEFT_PAREN133=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1732); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN133);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist559);
-                    lhs_or25=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1734);
+                    lhs_or134=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or25.getTree());
-                    RIGHT_PAREN26=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist561); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN26);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or134.getTree());
+                    RIGHT_PAREN135=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1736); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN135);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:119:12: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:353:12: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist574);
-                    lhs_pattern27=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1749);
+                    lhs_pattern136=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern27.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern136.getTree());
 
                     }
                     break;
@@ -1453,7 +5440,7 @@
 
 
             // AST REWRITE
-            // elements: exists_key, lhs_or, lhs_pattern
+            // elements: exists_key, lhs_pattern, lhs_or
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1463,20 +5450,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 121:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? )
+            // 355:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:121:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:355:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_exists_key.nextNode(), root_1);
 
-                // /Users/porcelli/Desktop/testes/NewDRL.g:121:26: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:355:26: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:121:34: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:355:34: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
@@ -1515,82 +5502,82 @@
     };
 
     // $ANTLR start lhs_not
-    // /Users/porcelli/Desktop/testes/NewDRL.g:124: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 )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:358: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 )? ) ;
     public final lhs_not_return lhs_not() throws RecognitionException {
         lhs_not_return retval = new lhs_not_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN30=null;
-        Token RIGHT_PAREN32=null;
-        not_key_return not_key28 = null;
+        Token LEFT_PAREN139=null;
+        Token RIGHT_PAREN141=null;
+        not_key_return not_key137 = null;
 
-        lhs_or_return lhs_or29 = null;
+        lhs_or_return lhs_or138 = null;
 
-        lhs_or_return lhs_or31 = null;
+        lhs_or_return lhs_or140 = null;
 
-        lhs_pattern_return lhs_pattern33 = null;
+        lhs_pattern_return lhs_pattern142 = null;
 
 
-        Object LEFT_PAREN30_tree=null;
-        Object RIGHT_PAREN32_tree=null;
+        Object LEFT_PAREN139_tree=null;
+        Object RIGHT_PAREN141_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:124: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 )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:124:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:358: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 )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:358: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_not619);
-            not_key28=not_key();
+            pushFollow(FOLLOW_not_key_in_lhs_not1794);
+            not_key137=not_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_not_key.add(not_key28.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:125:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
-            int alt13=3;
-            alt13 = dfa13.predict(input);
-            switch (alt13) {
+            if ( backtracking==0 ) stream_not_key.add(not_key137.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt48=3;
+            alt48 = dfa48.predict(input);
+            switch (alt48) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:125:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not636);
-                    lhs_or29=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not1811);
+                    lhs_or138=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or29.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or138.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:126:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:360:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN30=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not643); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN30);
+                    LEFT_PAREN139=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not1818); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN139);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not645);
-                    lhs_or31=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not1820);
+                    lhs_or140=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or31.getTree());
-                    RIGHT_PAREN32=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not647); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN32);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or140.getTree());
+                    RIGHT_PAREN141=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not1822); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN141);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:127:6: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:361:6: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not655);
-                    lhs_pattern33=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not1830);
+                    lhs_pattern142=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern33.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern142.getTree());
 
                     }
                     break;
@@ -1599,7 +5586,7 @@
 
 
             // AST REWRITE
-            // elements: lhs_or, lhs_pattern, not_key
+            // elements: lhs_or, not_key, lhs_pattern
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1609,20 +5596,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 128:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? )
+            // 362:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:128:13: ^( not_key ( lhs_or )? ( lhs_pattern )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:362:13: ^( not_key ( lhs_or )? ( lhs_pattern )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
 
-                // /Users/porcelli/Desktop/testes/NewDRL.g:128:23: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:362:23: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:128:31: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:362:31: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
@@ -1661,37 +5648,37 @@
     };
 
     // $ANTLR start lhs_eval
-    // /Users/porcelli/Desktop/testes/NewDRL.g:131:1: lhs_eval : eval_key paren_chunk -> ^( eval_key paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:365:1: lhs_eval : eval_key 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);
 
         Object root_0 = null;
 
-        eval_key_return eval_key34 = null;
+        eval_key_return eval_key143 = null;
 
-        paren_chunk_return paren_chunk35 = null;
+        paren_chunk_return paren_chunk144 = null;
 
 
         RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:132:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:132:4: eval_key paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:366:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:366:4: eval_key paren_chunk
             {
-            pushFollow(FOLLOW_eval_key_in_lhs_eval689);
-            eval_key34=eval_key();
+            pushFollow(FOLLOW_eval_key_in_lhs_eval1864);
+            eval_key143=eval_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_eval_key.add(eval_key34.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval691);
-            paren_chunk35=paren_chunk();
+            if ( backtracking==0 ) stream_eval_key.add(eval_key143.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval1866);
+            paren_chunk144=paren_chunk();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk35.getTree());
+            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk144.getTree());
 
             // AST REWRITE
-            // elements: paren_chunk, eval_key
+            // elements: eval_key, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1701,9 +5688,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 133:3: -> ^( eval_key paren_chunk )
+            // 367:3: -> ^( eval_key paren_chunk )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:133:6: ^( eval_key paren_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:367:6: ^( eval_key paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -1742,77 +5729,77 @@
     };
 
     // $ANTLR start lhs_forall
-    // /Users/porcelli/Desktop/testes/NewDRL.g:136:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:370:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ ) ;
     public final lhs_forall_return lhs_forall() throws RecognitionException {
         lhs_forall_return retval = new lhs_forall_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN37=null;
-        Token RIGHT_PAREN39=null;
-        forall_key_return forall_key36 = null;
+        Token LEFT_PAREN146=null;
+        Token RIGHT_PAREN148=null;
+        forall_key_return forall_key145 = null;
 
-        lhs_pattern_return lhs_pattern38 = null;
+        lhs_pattern_return lhs_pattern147 = null;
 
 
-        Object LEFT_PAREN37_tree=null;
-        Object RIGHT_PAREN39_tree=null;
+        Object LEFT_PAREN146_tree=null;
+        Object RIGHT_PAREN148_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:137:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:137:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:371:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:371:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
             {
-            pushFollow(FOLLOW_forall_key_in_lhs_forall712);
-            forall_key36=forall_key();
+            pushFollow(FOLLOW_forall_key_in_lhs_forall1887);
+            forall_key145=forall_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_forall_key.add(forall_key36.getTree());
-            LEFT_PAREN37=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall714); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN37);
+            if ( backtracking==0 ) stream_forall_key.add(forall_key145.getTree());
+            LEFT_PAREN146=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall1889); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN146);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:137:26: ( lhs_pattern )+
-            int cnt14=0;
-            loop14:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:371:26: ( lhs_pattern )+
+            int cnt49=0;
+            loop49:
             do {
-                int alt14=2;
-                int LA14_0 = input.LA(1);
+                int alt49=2;
+                int LA49_0 = input.LA(1);
 
-                if ( (LA14_0==ID) ) {
-                    alt14=1;
+                if ( (LA49_0==ID) ) {
+                    alt49=1;
                 }
 
 
-                switch (alt14) {
+                switch (alt49) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:137:26: lhs_pattern
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:371:26: lhs_pattern
             	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall716);
-            	    lhs_pattern38=lhs_pattern();
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall1891);
+            	    lhs_pattern147=lhs_pattern();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern38.getTree());
+            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern147.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    if ( cnt14 >= 1 ) break loop14;
+            	    if ( cnt49 >= 1 ) break loop49;
             	    if (backtracking>0) {failed=true; return retval;}
                         EarlyExitException eee =
-                            new EarlyExitException(14, input);
+                            new EarlyExitException(49, input);
                         throw eee;
                 }
-                cnt14++;
+                cnt49++;
             } while (true);
 
-            RIGHT_PAREN39=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall719); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN39);
+            RIGHT_PAREN148=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall1894); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN148);
 
 
             // AST REWRITE
@@ -1826,9 +5813,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 138:3: -> ^( forall_key ( lhs_pattern )+ )
+            // 372:3: -> ^( forall_key ( lhs_pattern )+ )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:138:6: ^( forall_key ( lhs_pattern )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:372:6: ^( forall_key ( lhs_pattern )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -1874,165 +5861,192 @@
     };
 
     // $ANTLR start pattern_source
-    // /Users/porcelli/Desktop/testes/NewDRL.g:141:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:375:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
     public final pattern_source_return pattern_source() throws RecognitionException {
         pattern_source_return retval = new pattern_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_pattern_return lhs_pattern40 = null;
+        lhs_pattern_return lhs_pattern149 = null;
 
-        from_key_return from_key41 = null;
+        from_key_return from_key150 = null;
 
-        accumulate_statement_return accumulate_statement42 = null;
+        accumulate_statement_return accumulate_statement151 = null;
 
-        collect_statement_return collect_statement43 = null;
+        collect_statement_return collect_statement152 = null;
 
-        entrypoint_statement_return entrypoint_statement44 = null;
+        entrypoint_statement_return entrypoint_statement153 = null;
 
-        from_source_return from_source45 = null;
+        from_source_return from_source154 = null;
 
 
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:143:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:143:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:377:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:377:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source749);
-            lhs_pattern40=lhs_pattern();
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source1924);
+            lhs_pattern149=lhs_pattern();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern40.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:144:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
-            int alt16=2;
-            int LA16_0 = input.LA(1);
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern149.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:378:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            int alt51=2;
+            int LA51_0 = input.LA(1);
 
-            if ( (LA16_0==ID) ) {
-                int LA16_1 = input.LA(2);
+            if ( (LA51_0==ID) ) {
+                int LA51_1 = input.LA(2);
 
-                if ( (LA16_1==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                    int LA16_3 = input.LA(3);
+                if ( (LA51_1==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                    int LA51_3 = input.LA(3);
 
-                    if ( (LA16_3==EOF||(LA16_3>=RIGHT_PAREN && LA16_3<=COMMA)||LA16_3==MISC) && ((validateIdentifierKey("from")))) {
-                        alt16=1;
+                    if ( (LA51_3==SEMICOLON||LA51_3==END||(LA51_3>=COMMA && LA51_3<=RIGHT_PAREN)||(LA51_3>=DOUBLE_PIPE && LA51_3<=DOUBLE_AMPER)||LA51_3==THEN||LA51_3==MISC) && ((validateIdentifierKey("from")))) {
+                        alt51=1;
                     }
-                    else if ( (LA16_3==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                        int LA16_6 = input.LA(4);
+                    else if ( (LA51_3==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_6 = input.LA(4);
 
                         if ( ((validateIdentifierKey("from"))) ) {
-                            alt16=1;
+                            alt51=1;
                         }
                     }
-                    else if ( (LA16_3==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                        int LA16_7 = input.LA(4);
+                    else if ( (LA51_3==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_7 = input.LA(4);
 
                         if ( ((validateIdentifierKey("from"))) ) {
-                            alt16=1;
+                            alt51=1;
                         }
                     }
-                    else if ( (LA16_3==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                        int LA16_8 = input.LA(4);
+                    else if ( (LA51_3==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_8 = input.LA(4);
 
-                        if ( (LA16_8==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                            int LA16_10 = input.LA(5);
+                        if ( (LA51_8==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                            int LA51_10 = input.LA(5);
 
-                            if ( (LA16_10==LEFT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                                int LA16_11 = input.LA(6);
+                            if ( (LA51_10==LEFT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA51_11 = input.LA(6);
 
-                                if ( (LA16_11==RIGHT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                                    int LA16_14 = input.LA(7);
+                                if ( (LA51_11==RIGHT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                    int LA51_14 = input.LA(7);
 
-                                    if ( (LA16_14==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                                        int LA16_16 = input.LA(8);
+                                    if ( (LA51_14==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                        int LA51_16 = input.LA(8);
 
                                         if ( ((validateIdentifierKey("from"))) ) {
-                                            alt16=1;
+                                            alt51=1;
                                         }
                                     }
-                                    else if ( (LA16_14==EOF||(LA16_14>=RIGHT_PAREN && LA16_14<=DOT)) && ((validateIdentifierKey("from")))) {
-                                        alt16=1;
+                                    else if ( ((LA51_14>=SEMICOLON && LA51_14<=DOT)||LA51_14==END||(LA51_14>=COMMA && LA51_14<=RIGHT_PAREN)||(LA51_14>=DOUBLE_PIPE && LA51_14<=DOUBLE_AMPER)||LA51_14==THEN) && ((validateIdentifierKey("from")))) {
+                                        alt51=1;
                                     }
                                 }
-                                else if ( ((LA16_11>=VT_FACT && LA16_11<=LEFT_SQUARE)||(LA16_11>=LEFT_CURLY && LA16_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("from")))) {
-                                    alt16=1;
+                                else if ( ((LA51_11>=VT_COMPILATION_UNIT && LA51_11<=LEFT_SQUARE)||(LA51_11>=THEN && LA51_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("from")))) {
+                                    alt51=1;
                                 }
                             }
-                            else if ( (LA16_10==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                                int LA16_12 = input.LA(6);
+                            else if ( (LA51_10==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA51_12 = input.LA(6);
 
                                 if ( ((validateIdentifierKey("from"))) ) {
-                                    alt16=1;
+                                    alt51=1;
                                 }
                             }
-                            else if ( (LA16_10==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                                int LA16_13 = input.LA(6);
+                            else if ( (LA51_10==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA51_13 = input.LA(6);
 
-                                if ( (LA16_13==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                                    int LA16_15 = input.LA(7);
+                                if ( (LA51_13==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                    int LA51_15 = input.LA(7);
 
                                     if ( ((validateIdentifierKey("from"))) ) {
-                                        alt16=1;
+                                        alt51=1;
                                     }
                                 }
                             }
-                            else if ( (LA16_10==EOF||(LA16_10>=RIGHT_PAREN && LA16_10<=ID)) && ((validateIdentifierKey("from")))) {
-                                alt16=1;
+                            else if ( ((LA51_10>=SEMICOLON && LA51_10<=ID)||LA51_10==END||(LA51_10>=COMMA && LA51_10<=RIGHT_PAREN)||(LA51_10>=DOUBLE_PIPE && LA51_10<=DOUBLE_AMPER)||LA51_10==THEN) && ((validateIdentifierKey("from")))) {
+                                alt51=1;
                             }
                         }
                     }
                 }
             }
-            switch (alt16) {
+            switch (alt51) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:145:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:379:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
-                    pushFollow(FOLLOW_from_key_in_pattern_source758);
-                    from_key41=from_key();
+                    pushFollow(FOLLOW_from_key_in_pattern_source1933);
+                    from_key150=from_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key41.getTree(), root_0);
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
-                    int alt15=4;
-                    int LA15_0 = input.LA(1);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key150.getTree(), root_0);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:380:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    int alt50=4;
+                    int LA50_0 = input.LA(1);
 
-                    if ( (LA15_0==ID) ) {
-                        int LA15_1 = input.LA(2);
+                    if ( (LA50_0==ID) ) {
+                        int LA50_1 = input.LA(2);
 
-                        if ( (LA15_1==MISC) && ((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point")))) {
-                            alt15=3;
+                        if ( (LA50_1==MISC) && ((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point")))) {
+                            alt50=3;
                         }
-                        else if ( (LA15_1==LEFT_PAREN) ) {
+                        else if ( (LA50_1==LEFT_PAREN) ) {
                             switch ( input.LA(3) ) {
+                            case LEFT_PAREN:
+                                {
+                                int LA50_5 = input.LA(4);
+
+                                if ( ((validateIdentifierKey("accumulate"))) ) {
+                                    alt50=1;
+                                }
+                                else if ( (true) ) {
+                                    alt50=4;
+                                }
+                                else {
+                                    if (backtracking>0) {failed=true; return retval;}
+                                    NoViableAltException nvae =
+                                        new NoViableAltException("380:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 5, input);
+
+                                    throw nvae;
+                                }
+                                }
+                                break;
                             case ID:
                                 {
-                                int LA15_5 = input.LA(4);
+                                int LA50_6 = input.LA(4);
 
                                 if ( ((validateIdentifierKey("accumulate"))) ) {
-                                    alt15=1;
+                                    alt50=1;
                                 }
                                 else if ( ((validateIdentifierKey("collect"))) ) {
-                                    alt15=2;
+                                    alt50=2;
                                 }
                                 else if ( (true) ) {
-                                    alt15=4;
+                                    alt50=4;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 5, input);
+                                        new NoViableAltException("380:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 6, input);
 
                                     throw nvae;
                                 }
                                 }
                                 break;
+                            case VT_COMPILATION_UNIT:
+                            case VT_FUNCTION_IMPORT:
                             case VT_FACT:
                             case VT_CONSTRAINTS:
-                            case VT_QUALIFIED_ID:
                             case VT_LABEL:
-                            case VT_NAME:
+                            case VT_QUERY_ID:
+                            case VT_TEMPLATE_ID:
+                            case VT_RULE_ID:
+                            case VT_ENTRYPOINT_ID:
+                            case VT_SLOT_ID:
+                            case VT_SLOT:
+                            case VT_RULE_ATTRIBUTES:
+                            case VT_RHS_CHUNK:
                             case VT_CURLY_CHUNK:
                             case VT_SQUARE_CHUNK:
                             case VT_PAREN_CHUNK:
@@ -2052,6 +6066,34 @@
                             case VT_FIELD:
                             case VT_ACCESSOR_PATH:
                             case VT_ACCESSOR_ELEMENT:
+                            case VT_DATA_TYPE:
+                            case VT_PACKAGE_ID:
+                            case VT_IMPORT_ID:
+                            case VT_GLOBAL_ID:
+                            case VT_FUNCTION_ID:
+                            case VT_PARAM_LIST:
+                            case VK_DATE_EFFECTIVE:
+                            case VK_DATE_EXPIRES:
+                            case VK_LOCK_ON_ACTIVE:
+                            case VK_NO_LOOP:
+                            case VK_AUTO_FOCUS:
+                            case VK_ACTIVATION_GROUP:
+                            case VK_AGENDA_GROUP:
+                            case VK_RULEFLOW_GROUP:
+                            case VK_DURATION:
+                            case VK_DIALECT:
+                            case VK_SALIENCE:
+                            case VK_ENABLED:
+                            case VK_ATTRIBUTES:
+                            case VK_WHEN:
+                            case VK_RULE:
+                            case VK_IMPORT:
+                            case VK_PACKAGE:
+                            case VK_TEMPLATE:
+                            case VK_QUERY:
+                            case VK_DECLARE:
+                            case VK_FUNCTION:
+                            case VK_GLOBAL:
                             case VK_EVAL:
                             case VK_CONTAINS:
                             case VK_MATCHES:
@@ -2072,27 +6114,30 @@
                             case VK_REVERSE:
                             case VK_RESULT:
                             case VK_COLLECT:
+                            case SEMICOLON:
+                            case DOT:
+                            case DOT_STAR:
+                            case END:
+                            case STRING:
+                            case COMMA:
                             case RIGHT_PAREN:
+                            case COLON:
+                            case BOOL:
+                            case INT:
                             case DOUBLE_PIPE:
                             case DOUBLE_AMPER:
-                            case SEMICOLON:
-                            case COMMA:
-                            case DOT:
                             case ARROW:
-                            case COLON:
                             case EQUAL:
                             case GREATER:
                             case GREATER_EQUAL:
                             case LESS:
                             case LESS_EQUAL:
                             case NOT_EQUAL:
-                            case STRING:
-                            case INT:
                             case FLOAT:
-                            case BOOL:
                             case NULL:
                             case LEFT_SQUARE:
                             case RIGHT_SQUARE:
+                            case THEN:
                             case LEFT_CURLY:
                             case RIGHT_CURLY:
                             case MISC:
@@ -2102,49 +6147,29 @@
                             case HexDigit:
                             case UnicodeEscape:
                             case OctalEscape:
-                            case TILDE:
                             case SH_STYLE_SINGLE_LINE_COMMENT:
                             case C_STYLE_SINGLE_LINE_COMMENT:
                             case MULTI_LINE_COMMENT:
                                 {
-                                alt15=4;
+                                alt50=4;
                                 }
                                 break;
-                            case LEFT_PAREN:
-                                {
-                                int LA15_6 = input.LA(4);
-
-                                if ( ((validateIdentifierKey("accumulate"))) ) {
-                                    alt15=1;
-                                }
-                                else if ( (true) ) {
-                                    alt15=4;
-                                }
-                                else {
-                                    if (backtracking>0) {failed=true; return retval;}
-                                    NoViableAltException nvae =
-                                        new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 6, input);
-
-                                    throw nvae;
-                                }
-                                }
-                                break;
                             default:
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 3, input);
+                                    new NoViableAltException("380:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 3, input);
 
                                 throw nvae;
                             }
 
                         }
-                        else if ( (LA15_1==EOF||(LA15_1>=RIGHT_PAREN && LA15_1<=DOT)) ) {
-                            alt15=4;
+                        else if ( ((LA50_1>=SEMICOLON && LA50_1<=DOT)||LA50_1==END||(LA50_1>=COMMA && LA50_1<=RIGHT_PAREN)||(LA50_1>=DOUBLE_PIPE && LA50_1<=DOUBLE_AMPER)||LA50_1==THEN) ) {
+                            alt50=4;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 1, input);
+                                new NoViableAltException("380:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 1, input);
 
                             throw nvae;
                         }
@@ -2152,52 +6177,52 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 0, input);
+                            new NoViableAltException("380:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt15) {
+                    switch (alt50) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:146:14: accumulate_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:380:14: accumulate_statement
                             {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source774);
-                            accumulate_statement42=accumulate_statement();
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source1949);
+                            accumulate_statement151=accumulate_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement42.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement151.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:147:15: collect_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:381:15: collect_statement
                             {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source790);
-                            collect_statement43=collect_statement();
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source1965);
+                            collect_statement152=collect_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement43.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement152.getTree());
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:148:15: entrypoint_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:382:15: entrypoint_statement
                             {
-                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source807);
-                            entrypoint_statement44=entrypoint_statement();
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source1982);
+                            entrypoint_statement153=entrypoint_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement44.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement153.getTree());
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:149:15: from_source
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:383:15: from_source
                             {
-                            pushFollow(FOLLOW_from_source_in_pattern_source823);
-                            from_source45=from_source();
+                            pushFollow(FOLLOW_from_source_in_pattern_source1998);
+                            from_source154=from_source();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source45.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source154.getTree());
 
                             }
                             break;
@@ -2236,28 +6261,28 @@
     };
 
     // $ANTLR start accumulate_statement
-    // /Users/porcelli/Desktop/testes/NewDRL.g:154:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:388:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? ) ;
     public final accumulate_statement_return accumulate_statement() throws RecognitionException {
         accumulate_statement_return retval = new accumulate_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN47=null;
-        Token COMMA49=null;
-        Token RIGHT_PAREN52=null;
-        accumulate_key_return accumulate_key46 = null;
+        Token LEFT_PAREN156=null;
+        Token COMMA158=null;
+        Token RIGHT_PAREN161=null;
+        accumulate_key_return accumulate_key155 = null;
 
-        lhs_or_return lhs_or48 = null;
+        lhs_or_return lhs_or157 = null;
 
-        accumulate_init_clause_return accumulate_init_clause50 = null;
+        accumulate_init_clause_return accumulate_init_clause159 = null;
 
-        accumulate_id_clause_return accumulate_id_clause51 = null;
+        accumulate_id_clause_return accumulate_id_clause160 = null;
 
 
-        Object LEFT_PAREN47_tree=null;
-        Object COMMA49_tree=null;
-        Object RIGHT_PAREN52_tree=null;
+        Object LEFT_PAREN156_tree=null;
+        Object COMMA158_tree=null;
+        Object RIGHT_PAREN161_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");
@@ -2266,37 +6291,37 @@
         RewriteRuleSubtreeStream stream_accumulate_id_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_id_clause");
         RewriteRuleSubtreeStream stream_accumulate_key=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_key");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:155:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:155:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:389:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:389:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
             {
-            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement851);
-            accumulate_key46=accumulate_key();
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2026);
+            accumulate_key155=accumulate_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key46.getTree());
-            LEFT_PAREN47=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement855); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN47);
+            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key155.getTree());
+            LEFT_PAREN156=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2030); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN156);
 
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement857);
-            lhs_or48=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2032);
+            lhs_or157=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_lhs_or.add(lhs_or48.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:156:21: ( COMMA )?
-            int alt17=2;
-            int LA17_0 = input.LA(1);
+            if ( backtracking==0 ) stream_lhs_or.add(lhs_or157.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:390:21: ( COMMA )?
+            int alt52=2;
+            int LA52_0 = input.LA(1);
 
-            if ( (LA17_0==COMMA) ) {
-                alt17=1;
+            if ( (LA52_0==COMMA) ) {
+                alt52=1;
             }
-            switch (alt17) {
+            switch (alt52) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:156:21: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:390:21: COMMA
                     {
-                    COMMA49=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement859); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA49);
+                    COMMA158=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2034); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA158);
 
 
                     }
@@ -2304,38 +6329,38 @@
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:157:3: ( accumulate_init_clause | accumulate_id_clause )
-            int alt18=2;
-            alt18 = dfa18.predict(input);
-            switch (alt18) {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:391:3: ( accumulate_init_clause | accumulate_id_clause )
+            int alt53=2;
+            alt53 = dfa53.predict(input);
+            switch (alt53) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:157:5: accumulate_init_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:391:5: accumulate_init_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement867);
-                    accumulate_init_clause50=accumulate_init_clause();
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2042);
+                    accumulate_init_clause159=accumulate_init_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause50.getTree());
+                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause159.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:158:5: accumulate_id_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:392:5: accumulate_id_clause
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement873);
-                    accumulate_id_clause51=accumulate_id_clause();
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2048);
+                    accumulate_id_clause160=accumulate_id_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause51.getTree());
+                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause160.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN52=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement881); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN52);
+            RIGHT_PAREN161=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2056); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN161);
 
 
             // AST REWRITE
@@ -2349,21 +6374,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 161:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? )
+            // 395:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:161:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:395:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_accumulate_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_lhs_or.next());
-                // /Users/porcelli/Desktop/testes/NewDRL.g:161:30: ( accumulate_init_clause )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:395:30: ( accumulate_init_clause )?
                 if ( stream_accumulate_init_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_init_clause.next());
 
                 }
                 stream_accumulate_init_clause.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:161:54: ( accumulate_id_clause )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:395:54: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -2402,16 +6427,16 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Desktop/testes/NewDRL.g:164:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:398:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
     public final accumulate_init_clause_return accumulate_init_clause() throws RecognitionException {
         accumulate_init_clause_return retval = new accumulate_init_clause_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA54=null;
-        Token COMMA56=null;
-        Token COMMA58=null;
+        Token COMMA163=null;
+        Token COMMA165=null;
+        Token COMMA167=null;
         paren_chunk_return pc1 = null;
 
         paren_chunk_return pc2 = null;
@@ -2420,18 +6445,18 @@
 
         paren_chunk_return pc4 = null;
 
-        init_key_return init_key53 = null;
+        init_key_return init_key162 = null;
 
-        action_key_return action_key55 = null;
+        action_key_return action_key164 = null;
 
-        reverse_key_return reverse_key57 = null;
+        reverse_key_return reverse_key166 = null;
 
-        result_key_return result_key59 = null;
+        result_key_return result_key168 = null;
 
 
-        Object COMMA54_tree=null;
-        Object COMMA56_tree=null;
-        Object COMMA58_tree=null;
+        Object COMMA163_tree=null;
+        Object COMMA165_tree=null;
+        Object COMMA167_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_reverse_key=new RewriteRuleSubtreeStream(adaptor,"rule reverse_key");
         RewriteRuleSubtreeStream stream_result_key=new RewriteRuleSubtreeStream(adaptor,"rule result_key");
@@ -2439,33 +6464,33 @@
         RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:165:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:165:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:399:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:399:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
             {
-            pushFollow(FOLLOW_init_key_in_accumulate_init_clause908);
-            init_key53=init_key();
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2083);
+            init_key162=init_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_init_key.add(init_key53.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause913);
+            if ( backtracking==0 ) stream_init_key.add(init_key162.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2088);
             pc1=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc1.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:166:18: ( COMMA )?
-            int alt19=2;
-            int LA19_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:400:18: ( COMMA )?
+            int alt54=2;
+            int LA54_0 = input.LA(1);
 
-            if ( (LA19_0==COMMA) ) {
-                alt19=1;
+            if ( (LA54_0==COMMA) ) {
+                alt54=1;
             }
-            switch (alt19) {
+            switch (alt54) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:166:18: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:400:18: COMMA
                     {
-                    COMMA54=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause915); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA54);
+                    COMMA163=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2090); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA163);
 
 
                     }
@@ -2473,30 +6498,30 @@
 
             }
 
-            pushFollow(FOLLOW_action_key_in_accumulate_init_clause919);
-            action_key55=action_key();
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2094);
+            action_key164=action_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_action_key.add(action_key55.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause923);
+            if ( backtracking==0 ) stream_action_key.add(action_key164.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2098);
             pc2=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc2.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:167:29: ( COMMA )?
-            int alt20=2;
-            int LA20_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:401:29: ( COMMA )?
+            int alt55=2;
+            int LA55_0 = input.LA(1);
 
-            if ( (LA20_0==COMMA) ) {
-                alt20=1;
+            if ( (LA55_0==COMMA) ) {
+                alt55=1;
             }
-            switch (alt20) {
+            switch (alt55) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:167:29: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:401:29: COMMA
                     {
-                    COMMA56=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause925); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA56);
+                    COMMA165=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2100); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA165);
 
 
                     }
@@ -2504,37 +6529,37 @@
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:168:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
-            int alt22=2;
-            alt22 = dfa22.predict(input);
-            switch (alt22) {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:402:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            int alt57=2;
+            alt57 = dfa57.predict(input);
+            switch (alt57) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:168:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:402:4: reverse_key pc3= paren_chunk ( COMMA )?
                     {
-                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause931);
-                    reverse_key57=reverse_key();
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2106);
+                    reverse_key166=reverse_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key57.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause935);
+                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key166.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2110);
                     pc3=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_paren_chunk.add(pc3.getTree());
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:168:32: ( COMMA )?
-                    int alt21=2;
-                    int LA21_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:402:32: ( COMMA )?
+                    int alt56=2;
+                    int LA56_0 = input.LA(1);
 
-                    if ( (LA21_0==COMMA) ) {
-                        alt21=1;
+                    if ( (LA56_0==COMMA) ) {
+                        alt56=1;
                     }
-                    switch (alt21) {
+                    switch (alt56) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:168:32: COMMA
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:402:32: COMMA
                             {
-                            COMMA58=(Token)input.LT(1);
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause937); if (failed) return retval;
-                            if ( backtracking==0 ) stream_COMMA.add(COMMA58);
+                            COMMA167=(Token)input.LT(1);
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2112); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COMMA.add(COMMA167);
 
 
                             }
@@ -2548,40 +6573,40 @@
 
             }
 
-            pushFollow(FOLLOW_result_key_in_accumulate_init_clause943);
-            result_key59=result_key();
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2118);
+            result_key168=result_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_result_key.add(result_key59.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause947);
+            if ( backtracking==0 ) stream_result_key.add(result_key168.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2122);
             pc4=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc4.getTree());
 
             // AST REWRITE
-            // elements: reverse_key, pc1, init_key, pc2, pc3, action_key, pc4, result_key
+            // elements: init_key, result_key, reverse_key, pc2, pc4, pc1, pc3, action_key
             // token labels: 
-            // rule labels: pc2, pc4, pc3, pc1, retval
+            // rule labels: pc2, pc3, pc4, pc1, retval
             // token list labels: 
             // rule list labels: 
             if ( backtracking==0 ) {
             retval.tree = root_0;
             RewriteRuleSubtreeStream stream_pc2=new RewriteRuleSubtreeStream(adaptor,"token pc2",pc2!=null?pc2.tree:null);
+            RewriteRuleSubtreeStream stream_pc3=new RewriteRuleSubtreeStream(adaptor,"token pc3",pc3!=null?pc3.tree:null);
             RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
-            RewriteRuleSubtreeStream stream_pc3=new RewriteRuleSubtreeStream(adaptor,"token pc3",pc3!=null?pc3.tree:null);
             RewriteRuleSubtreeStream stream_pc1=new RewriteRuleSubtreeStream(adaptor,"token pc1",pc1!=null?pc1.tree:null);
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 170:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 404:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:170:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:404:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_INIT_CLAUSE, "VT_ACCUMULATE_INIT_CLAUSE"), root_1);
 
-                // /Users/porcelli/Desktop/testes/NewDRL.g:170:33: ^( init_key $pc1)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:404:33: ^( init_key $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
@@ -2590,7 +6615,7 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Desktop/testes/NewDRL.g:170:50: ^( action_key $pc2)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:404:50: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -2599,9 +6624,9 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Desktop/testes/NewDRL.g:170:69: ( ^( reverse_key $pc3) )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:404:69: ( ^( reverse_key $pc3) )?
                 if ( stream_reverse_key.hasNext()||stream_pc3.hasNext() ) {
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:170:69: ^( reverse_key $pc3)
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:404:69: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -2614,7 +6639,7 @@
                 }
                 stream_reverse_key.reset();
                 stream_pc3.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:170:90: ^( result_key $pc4)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:404:90: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -2656,7 +6681,7 @@
     };
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Desktop/testes/NewDRL.g:173:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:407:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
     public final accumulate_id_clause_return accumulate_id_clause() throws RecognitionException {
         accumulate_id_clause_return retval = new accumulate_id_clause_return();
         retval.start = input.LT(1);
@@ -2671,21 +6696,21 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:174:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:174:4: id= ID text= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:408:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:408:4: id= ID text= paren_chunk
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause996); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2171); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause1000);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2175);
             text=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(text.getTree());
 
             // AST REWRITE
-            // elements: paren_chunk, ID
+            // elements: ID, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2695,9 +6720,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 175:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            // 409:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:175:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:409: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);
@@ -2737,51 +6762,51 @@
     };
 
     // $ANTLR start collect_statement
-    // /Users/porcelli/Desktop/testes/NewDRL.g:178:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:412:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source ) ;
     public final collect_statement_return collect_statement() throws RecognitionException {
         collect_statement_return retval = new collect_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN61=null;
-        Token RIGHT_PAREN63=null;
-        collect_key_return collect_key60 = null;
+        Token LEFT_PAREN170=null;
+        Token RIGHT_PAREN172=null;
+        collect_key_return collect_key169 = null;
 
-        pattern_source_return pattern_source62 = null;
+        pattern_source_return pattern_source171 = null;
 
 
-        Object LEFT_PAREN61_tree=null;
-        Object RIGHT_PAREN63_tree=null;
+        Object LEFT_PAREN170_tree=null;
+        Object RIGHT_PAREN172_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_collect_key=new RewriteRuleSubtreeStream(adaptor,"rule collect_key");
         RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:179:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:179:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:413:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:413:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
             {
-            pushFollow(FOLLOW_collect_key_in_collect_statement1022);
-            collect_key60=collect_key();
+            pushFollow(FOLLOW_collect_key_in_collect_statement2197);
+            collect_key169=collect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_collect_key.add(collect_key60.getTree());
-            LEFT_PAREN61=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement1026); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN61);
+            if ( backtracking==0 ) stream_collect_key.add(collect_key169.getTree());
+            LEFT_PAREN170=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2201); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN170);
 
-            pushFollow(FOLLOW_pattern_source_in_collect_statement1028);
-            pattern_source62=pattern_source();
+            pushFollow(FOLLOW_pattern_source_in_collect_statement2203);
+            pattern_source171=pattern_source();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_source.add(pattern_source62.getTree());
-            RIGHT_PAREN63=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement1030); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN63);
+            if ( backtracking==0 ) stream_pattern_source.add(pattern_source171.getTree());
+            RIGHT_PAREN172=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2205); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN172);
 
 
             // AST REWRITE
-            // elements: collect_key, pattern_source
+            // elements: pattern_source, collect_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2791,9 +6816,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 181:2: -> ^( collect_key pattern_source )
+            // 415:2: -> ^( collect_key pattern_source )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:181:5: ^( collect_key pattern_source )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:415:5: ^( collect_key pattern_source )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
@@ -2832,37 +6857,37 @@
     };
 
     // $ANTLR start entrypoint_statement
-    // /Users/porcelli/Desktop/testes/NewDRL.g:184:1: entrypoint_statement : entry_point_key name -> ^( entry_point_key name ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:418:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
     public final entrypoint_statement_return entrypoint_statement() throws RecognitionException {
         entrypoint_statement_return retval = new entrypoint_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        entry_point_key_return entry_point_key64 = null;
+        entry_point_key_return entry_point_key173 = null;
 
-        name_return name65 = null;
+        entrypoint_id_return entrypoint_id174 = null;
 
 
+        RewriteRuleSubtreeStream stream_entrypoint_id=new RewriteRuleSubtreeStream(adaptor,"rule entrypoint_id");
         RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
-        RewriteRuleSubtreeStream stream_name=new RewriteRuleSubtreeStream(adaptor,"rule name");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:185:2: ( entry_point_key name -> ^( entry_point_key name ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:185:4: entry_point_key name
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:419:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:419:4: entry_point_key entrypoint_id
             {
-            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement1050);
-            entry_point_key64=entry_point_key();
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2225);
+            entry_point_key173=entry_point_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key64.getTree());
-            pushFollow(FOLLOW_name_in_entrypoint_statement1052);
-            name65=name();
+            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key173.getTree());
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2227);
+            entrypoint_id174=entrypoint_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_name.add(name65.getTree());
+            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id174.getTree());
 
             // AST REWRITE
-            // elements: name, entry_point_key
+            // elements: entrypoint_id, entry_point_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2872,14 +6897,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 186:2: -> ^( entry_point_key name )
+            // 420:2: -> ^( entry_point_key entrypoint_id )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:186:5: ^( entry_point_key name )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:420:5: ^( entry_point_key entrypoint_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
 
-                adaptor.addChild(root_1, stream_name.next());
+                adaptor.addChild(root_1, stream_entrypoint_id.next());
 
                 adaptor.addChild(root_0, root_1);
                 }
@@ -2907,45 +6932,185 @@
     }
     // $ANTLR end entrypoint_statement
 
+    public static class entrypoint_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start entrypoint_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:423: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);
+
+        Object root_0 = null;
+
+        Token value=null;
+
+        Object value_tree=null;
+        RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:424:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            int alt58=2;
+            int LA58_0 = input.LA(1);
+
+            if ( (LA58_0==ID) ) {
+                alt58=1;
+            }
+            else if ( (LA58_0==STRING) ) {
+                alt58=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("423:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 58, 0, input);
+
+                throw nvae;
+            }
+            switch (alt58) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:424:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id2250); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(value);
+
+
+                    // 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();
+                    // 424:14: -> VT_ENTRYPOINT_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:425:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2263); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(value);
+
+
+                    // 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();
+                    // 425:18: -> VT_ENTRYPOINT_ID[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+
+            }
+            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 entrypoint_id
+
     public static class from_source_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start from_source
-    // /Users/porcelli/Desktop/testes/NewDRL.g:189:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:428:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
     public final from_source_return from_source() throws RecognitionException {
         from_source_return retval = new from_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID66=null;
+        Token ID175=null;
         paren_chunk_return args = null;
 
-        expression_chain_return expression_chain67 = null;
+        expression_chain_return expression_chain176 = null;
 
 
-        Object ID66_tree=null;
+        Object ID175_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:190:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:190:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:429:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:429:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
             {
-            ID66=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source1072); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID66);
+            ID175=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_source2279); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID175);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:191:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
-            int alt23=2;
-            alt23 = dfa23.predict(input);
-            switch (alt23) {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:430:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            int alt59=2;
+            int LA59_0 = input.LA(1);
+
+            if ( (LA59_0==LEFT_PAREN) ) {
+                int LA59_1 = input.LA(2);
+
+                if ( (LA59_1==LEFT_PAREN) ) {
+                    int LA59_3 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt59=1;
+                    }
+                }
+                else if ( (LA59_1==ID) ) {
+                    int LA59_4 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt59=1;
+                    }
+                }
+                else if ( ((LA59_1>=VT_COMPILATION_UNIT && LA59_1<=SEMICOLON)||(LA59_1>=DOT && LA59_1<=STRING)||LA59_1==COMMA||(LA59_1>=COLON && LA59_1<=MULTI_LINE_COMMENT)) && (synpred8())) {
+                    alt59=1;
+                }
+                else if ( (LA59_1==RIGHT_PAREN) && (synpred8())) {
+                    alt59=1;
+                }
+            }
+            switch (alt59) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:191:5: ( LEFT_PAREN )=>args= paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:430:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source1085);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2292);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -2956,22 +7121,22 @@
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:192:3: ( expression_chain )?
-            int alt24=2;
-            int LA24_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:431:3: ( expression_chain )?
+            int alt60=2;
+            int LA60_0 = input.LA(1);
 
-            if ( (LA24_0==DOT) ) {
-                alt24=1;
+            if ( (LA60_0==DOT) ) {
+                alt60=1;
             }
-            switch (alt24) {
+            switch (alt60) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:192:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:431:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source1092);
-                    expression_chain67=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_from_source2299);
+                    expression_chain176=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain67.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain176.getTree());
 
                     }
                     break;
@@ -2990,21 +7155,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 193:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            // 432:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:193:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:432:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FROM_SOURCE, "VT_FROM_SOURCE"), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Desktop/testes/NewDRL.g:193:25: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:432:25: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:193:38: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:432:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -3043,7 +7208,7 @@
     };
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Desktop/testes/NewDRL.g:196:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:435:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
     public final expression_chain_return expression_chain() throws RecognitionException {
         expression_chain_return retval = new expression_chain_return();
         retval.start = input.LT(1);
@@ -3051,106 +7216,78 @@
         Object root_0 = null;
 
         Token startToken=null;
-        Token ID68=null;
-        square_chunk_return square_chunk69 = null;
+        Token ID177=null;
+        square_chunk_return square_chunk178 = null;
 
-        paren_chunk_return paren_chunk70 = null;
+        paren_chunk_return paren_chunk179 = null;
 
-        expression_chain_return expression_chain71 = null;
+        expression_chain_return expression_chain180 = null;
 
 
         Object startToken_tree=null;
-        Object ID68_tree=null;
+        Object ID177_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:197:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:198:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:436:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:437:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
             {
             startToken=(Token)input.LT(1);
-            match(input,DOT,FOLLOW_DOT_in_expression_chain1124); if (failed) return retval;
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2331); if (failed) return retval;
             if ( backtracking==0 ) stream_DOT.add(startToken);
 
-            ID68=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain1126); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID68);
+            ID177=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain2333); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID177);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:199:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
-            int alt25=3;
-            int LA25_0 = input.LA(1);
-
-            if ( (LA25_0==LEFT_SQUARE) && (synpred9())) {
-                alt25=1;
-            }
-            else if ( (LA25_0==LEFT_PAREN) ) {
-                int LA25_2 = input.LA(2);
-
-                if ( (LA25_2==LEFT_PAREN) ) {
-                    int LA25_4 = input.LA(3);
-
-                    if ( (synpred10()) ) {
-                        alt25=2;
-                    }
-                }
-                else if ( (LA25_2==ID) ) {
-                    int LA25_5 = input.LA(3);
-
-                    if ( (synpred10()) ) {
-                        alt25=2;
-                    }
-                }
-                else if ( ((LA25_2>=VT_FACT && LA25_2<=VK_COLLECT)||(LA25_2>=DOUBLE_PIPE && LA25_2<=COMMA)||(LA25_2>=DOT && LA25_2<=MULTI_LINE_COMMENT)) && (synpred10())) {
-                    alt25=2;
-                }
-                else if ( (LA25_2==RIGHT_PAREN) && (synpred10())) {
-                    alt25=2;
-                }
-            }
-            switch (alt25) {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:438:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            int alt61=3;
+            alt61 = dfa61.predict(input);
+            switch (alt61) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:200:6: ( LEFT_SQUARE )=> square_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:439:6: ( LEFT_SQUARE )=> square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain1146);
-                    square_chunk69=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain2353);
+                    square_chunk178=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk69.getTree());
+                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk178.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:202:6: ( LEFT_PAREN )=> paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:441:6: ( LEFT_PAREN )=> paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain1168);
-                    paren_chunk70=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2375);
+                    paren_chunk179=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk70.getTree());
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk179.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:204:4: ( expression_chain )?
-            int alt26=2;
-            int LA26_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:443:4: ( expression_chain )?
+            int alt62=2;
+            int LA62_0 = input.LA(1);
 
-            if ( (LA26_0==DOT) ) {
-                alt26=1;
+            if ( (LA62_0==DOT) ) {
+                alt62=1;
             }
-            switch (alt26) {
+            switch (alt62) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:204:4: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:443:4: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain1179);
-                    expression_chain71=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2386);
+                    expression_chain180=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain71.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain180.getTree());
 
                     }
                     break;
@@ -3159,7 +7296,7 @@
 
 
             // AST REWRITE
-            // elements: square_chunk, ID, expression_chain, paren_chunk
+            // elements: paren_chunk, ID, expression_chain, square_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3169,27 +7306,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 205:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            // 444:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:205:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:444:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_EXPRESSION_CHAIN, startToken), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Desktop/testes/NewDRL.g:205:45: ( square_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:444:45: ( square_chunk )?
                 if ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
                 }
                 stream_square_chunk.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:205:59: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:444:59: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:205:72: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:444:72: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -3228,38 +7365,38 @@
     };
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Desktop/testes/NewDRL.g:208:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:447:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
     public final lhs_pattern_return lhs_pattern() throws RecognitionException {
         lhs_pattern_return retval = new lhs_pattern_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        fact_binding_return fact_binding72 = null;
+        fact_binding_return fact_binding181 = null;
 
-        fact_return fact73 = null;
+        fact_return fact182 = null;
 
 
         RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:209:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
-            int alt27=2;
-            int LA27_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:448:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            int alt63=2;
+            int LA63_0 = input.LA(1);
 
-            if ( (LA27_0==ID) ) {
-                int LA27_1 = input.LA(2);
+            if ( (LA63_0==ID) ) {
+                int LA63_1 = input.LA(2);
 
-                if ( (LA27_1==COLON) ) {
-                    alt27=1;
+                if ( (LA63_1==COLON) ) {
+                    alt63=1;
                 }
-                else if ( (LA27_1==LEFT_PAREN||LA27_1==DOT||LA27_1==LEFT_SQUARE) ) {
-                    alt27=2;
+                else if ( (LA63_1==DOT||LA63_1==LEFT_PAREN||LA63_1==LEFT_SQUARE) ) {
+                    alt63=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("208:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 27, 1, input);
+                        new NoViableAltException("447:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 1, input);
 
                     throw nvae;
                 }
@@ -3267,19 +7404,19 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("208:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 27, 0, input);
+                    new NoViableAltException("447:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 0, input);
 
                 throw nvae;
             }
-            switch (alt27) {
+            switch (alt63) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:209:4: fact_binding
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:448:4: fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern1212);
-                    fact_binding72=fact_binding();
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2419);
+                    fact_binding181=fact_binding();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding72.getTree());
+                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding181.getTree());
 
                     // AST REWRITE
                     // elements: fact_binding
@@ -3292,9 +7429,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 209:17: -> ^( VT_PATTERN fact_binding )
+                    // 448:17: -> ^( VT_PATTERN fact_binding )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:209:20: ^( VT_PATTERN fact_binding )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:448:20: ^( VT_PATTERN fact_binding )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -3311,13 +7448,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:210:4: fact
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:449:4: fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern1225);
-                    fact73=fact();
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2432);
+                    fact182=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact73.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact182.getTree());
 
                     // AST REWRITE
                     // elements: fact
@@ -3330,9 +7467,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 210:9: -> ^( VT_PATTERN fact )
+                    // 449:9: -> ^( VT_PATTERN fact )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:210:12: ^( VT_PATTERN fact )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:449:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -3373,82 +7510,82 @@
     };
 
     // $ANTLR start fact_binding
-    // /Users/porcelli/Desktop/testes/NewDRL.g:213:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:452:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ) ;
     public final fact_binding_return fact_binding() throws RecognitionException {
         fact_binding_return retval = new fact_binding_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN76=null;
-        Token RIGHT_PAREN78=null;
-        label_return label74 = null;
+        Token LEFT_PAREN185=null;
+        Token RIGHT_PAREN187=null;
+        label_return label183 = null;
 
-        fact_return fact75 = null;
+        fact_return fact184 = null;
 
-        fact_binding_expression_return fact_binding_expression77 = null;
+        fact_binding_expression_return fact_binding_expression186 = null;
 
 
-        Object LEFT_PAREN76_tree=null;
-        Object RIGHT_PAREN78_tree=null;
+        Object LEFT_PAREN185_tree=null;
+        Object RIGHT_PAREN187_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
         RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:214:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:214:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:453:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:453:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             {
-            pushFollow(FOLLOW_label_in_fact_binding1245);
-            label74=label();
+            pushFollow(FOLLOW_label_in_fact_binding2452);
+            label183=label();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_label.add(label74.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:215:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
-            int alt28=2;
-            int LA28_0 = input.LA(1);
+            if ( backtracking==0 ) stream_label.add(label183.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:454:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
 
-            if ( (LA28_0==ID) ) {
-                alt28=1;
+            if ( (LA64_0==ID) ) {
+                alt64=1;
             }
-            else if ( (LA28_0==LEFT_PAREN) ) {
-                alt28=2;
+            else if ( (LA64_0==LEFT_PAREN) ) {
+                alt64=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("215:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 28, 0, input);
+                    new NoViableAltException("454:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt28) {
+            switch (alt64) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:215:5: fact
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:454:5: fact
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding1251);
-                    fact75=fact();
+                    pushFollow(FOLLOW_fact_in_fact_binding2458);
+                    fact184=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact75.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact184.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:216:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:455:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
                     {
-                    LEFT_PAREN76=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding1258); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN76);
+                    LEFT_PAREN185=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2465); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN185);
 
-                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding1260);
-                    fact_binding_expression77=fact_binding_expression();
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2467);
+                    fact_binding_expression186=fact_binding_expression();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression77.getTree());
-                    RIGHT_PAREN78=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding1262); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN78);
+                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression186.getTree());
+                    RIGHT_PAREN187=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2469); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN187);
 
 
                     }
@@ -3458,7 +7595,7 @@
 
 
             // AST REWRITE
-            // elements: fact, fact_binding_expression, label
+            // elements: label, fact, fact_binding_expression
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3468,21 +7605,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 218:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? )
+            // 457:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:218:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:457:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_BINDING, "VT_FACT_BINDING"), root_1);
 
                 adaptor.addChild(root_1, stream_label.next());
-                // /Users/porcelli/Desktop/testes/NewDRL.g:218:30: ( fact )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:457:30: ( fact )?
                 if ( stream_fact.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact.next());
 
                 }
                 stream_fact.reset();
-                // /Users/porcelli/Desktop/testes/NewDRL.g:218:36: ( fact_binding_expression )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:457:36: ( fact_binding_expression )?
                 if ( stream_fact_binding_expression.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact_binding_expression.next());
 
@@ -3521,7 +7658,7 @@
     };
 
     // $ANTLR start fact_binding_expression
-    // /Users/porcelli/Desktop/testes/NewDRL.g:221:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:460: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);
@@ -3531,9 +7668,9 @@
         Token pipe=null;
         or_key_return value = null;
 
-        fact_return fact79 = null;
+        fact_return fact188 = null;
 
-        fact_return fact80 = null;
+        fact_return fact189 = null;
 
 
         Object pipe_tree=null;
@@ -3544,17 +7681,17 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:224:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:224:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:224:5: ( fact -> fact )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:224:6: fact
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:5: ( fact -> fact )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:6: fact
             {
-            pushFollow(FOLLOW_fact_in_fact_binding_expression1298);
-            fact79=fact();
+            pushFollow(FOLLOW_fact_in_fact_binding_expression2505);
+            fact188=fact();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_fact.add(fact79.getTree());
+            if ( backtracking==0 ) stream_fact.add(fact188.getTree());
 
             // AST REWRITE
             // elements: fact
@@ -3567,7 +7704,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 224:11: -> fact
+            // 463:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -3577,46 +7714,46 @@
 
             }
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:224:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
-            loop30:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            loop66:
             do {
-                int alt30=2;
-                int LA30_0 = input.LA(1);
+                int alt66=2;
+                int LA66_0 = input.LA(1);
 
-                if ( (LA30_0==ID) && ((validateIdentifierKey("or")))) {
-                    alt30=1;
+                if ( (LA66_0==ID) && ((validateIdentifierKey("or")))) {
+                    alt66=1;
                 }
-                else if ( (LA30_0==DOUBLE_PIPE) ) {
-                    alt30=1;
+                else if ( (LA66_0==DOUBLE_PIPE) ) {
+                    alt66=1;
                 }
 
 
-                switch (alt30) {
+                switch (alt66) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:224:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
             	    {
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:224:22: (value= or_key | pipe= DOUBLE_PIPE )
-            	    int alt29=2;
-            	    int LA29_0 = input.LA(1);
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    int alt65=2;
+            	    int LA65_0 = input.LA(1);
 
-            	    if ( (LA29_0==ID) && ((validateIdentifierKey("or")))) {
-            	        alt29=1;
+            	    if ( (LA65_0==ID) && ((validateIdentifierKey("or")))) {
+            	        alt65=1;
             	    }
-            	    else if ( (LA29_0==DOUBLE_PIPE) ) {
-            	        alt29=2;
+            	    else if ( (LA65_0==DOUBLE_PIPE) ) {
+            	        alt65=2;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("224:22: (value= or_key | pipe= DOUBLE_PIPE )", 29, 0, input);
+            	            new NoViableAltException("463:22: (value= or_key | pipe= DOUBLE_PIPE )", 65, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt29) {
+            	    switch (alt65) {
             	        case 1 :
-            	            // /Users/porcelli/Desktop/testes/NewDRL.g:224:23: value= or_key
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:23: value= or_key
             	            {
-            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression1310);
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2517);
             	            value=or_key();
             	            _fsp--;
             	            if (failed) return retval;
@@ -3628,10 +7765,10 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /Users/porcelli/Desktop/testes/NewDRL.g:224:62: pipe= DOUBLE_PIPE
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:463:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
-            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression1316); if (failed) return retval;
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2523); if (failed) return retval;
             	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
             	            if ( backtracking==0 ) {
@@ -3643,11 +7780,11 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_fact_in_fact_binding_expression1321);
-            	    fact80=fact();
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2528);
+            	    fact189=fact();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_fact.add(fact80.getTree());
+            	    if ( backtracking==0 ) stream_fact.add(fact189.getTree());
 
             	    // AST REWRITE
             	    // elements: fact, fact_binding_expression
@@ -3660,9 +7797,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 225:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    // 464:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	    {
-            	        // /Users/porcelli/Desktop/testes/NewDRL.g:225:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:464: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);
@@ -3681,7 +7818,7 @@
             	    break;
 
             	default :
-            	    break loop30;
+            	    break loop66;
                 }
             } while (true);
 
@@ -3711,68 +7848,68 @@
     };
 
     // $ANTLR start fact
-    // /Users/porcelli/Desktop/testes/NewDRL.g:228:1: fact : qualified_id LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT qualified_id ( constraints )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:467:1: fact : data_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT data_type ( constraints )? ) ;
     public final fact_return fact() throws RecognitionException {
         fact_return retval = new fact_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN82=null;
-        Token RIGHT_PAREN84=null;
-        qualified_id_return qualified_id81 = null;
+        Token LEFT_PAREN191=null;
+        Token RIGHT_PAREN193=null;
+        data_type_return data_type190 = null;
 
-        constraints_return constraints83 = null;
+        constraints_return constraints192 = null;
 
 
-        Object LEFT_PAREN82_tree=null;
-        Object RIGHT_PAREN84_tree=null;
+        Object LEFT_PAREN191_tree=null;
+        Object RIGHT_PAREN193_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_qualified_id=new RewriteRuleSubtreeStream(adaptor,"rule qualified_id");
+        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:229:2: ( qualified_id LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT qualified_id ( constraints )? ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:229:4: qualified_id LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:468:2: ( data_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT data_type ( constraints )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:468:4: data_type LEFT_PAREN ( constraints )? RIGHT_PAREN
             {
-            pushFollow(FOLLOW_qualified_id_in_fact1350);
-            qualified_id81=qualified_id();
+            pushFollow(FOLLOW_data_type_in_fact2557);
+            data_type190=data_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_qualified_id.add(qualified_id81.getTree());
-            LEFT_PAREN82=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact1352); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN82);
+            if ( backtracking==0 ) stream_data_type.add(data_type190.getTree());
+            LEFT_PAREN191=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2559); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN191);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:229:28: ( constraints )?
-            int alt31=2;
-            int LA31_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:468:25: ( constraints )?
+            int alt67=2;
+            int LA67_0 = input.LA(1);
 
-            if ( (LA31_0==LEFT_PAREN||LA31_0==ID) ) {
-                alt31=1;
+            if ( (LA67_0==ID||LA67_0==LEFT_PAREN) ) {
+                alt67=1;
             }
-            switch (alt31) {
+            switch (alt67) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:229:28: constraints
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:468:25: constraints
                     {
-                    pushFollow(FOLLOW_constraints_in_fact1354);
-                    constraints83=constraints();
+                    pushFollow(FOLLOW_constraints_in_fact2561);
+                    constraints192=constraints();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_constraints.add(constraints83.getTree());
+                    if ( backtracking==0 ) stream_constraints.add(constraints192.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN84=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact1357); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN84);
+            RIGHT_PAREN193=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2564); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN193);
 
 
             // AST REWRITE
-            // elements: constraints, qualified_id
+            // elements: constraints, data_type
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3782,15 +7919,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 230:2: -> ^( VT_FACT qualified_id ( constraints )? )
+            // 469:2: -> ^( VT_FACT data_type ( constraints )? )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:230:5: ^( VT_FACT qualified_id ( constraints )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:469:5: ^( VT_FACT data_type ( constraints )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT, "VT_FACT"), root_1);
 
-                adaptor.addChild(root_1, stream_qualified_id.next());
-                // /Users/porcelli/Desktop/testes/NewDRL.g:230:28: ( constraints )?
+                adaptor.addChild(root_1, stream_data_type.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:469:25: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -3829,60 +7966,60 @@
     };
 
     // $ANTLR start constraints
-    // /Users/porcelli/Desktop/testes/NewDRL.g:233:1: constraints : constraint ( COMMA constraint )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:472:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA86=null;
-        constraint_return constraint85 = null;
+        Token COMMA195=null;
+        constraint_return constraint194 = null;
 
-        constraint_return constraint87 = null;
+        constraint_return constraint196 = null;
 
 
-        Object COMMA86_tree=null;
+        Object COMMA195_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:234:2: ( constraint ( COMMA constraint )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:234:4: constraint ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:473:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:473:4: constraint ( COMMA constraint )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_in_constraints1380);
-            constraint85=constraint();
+            pushFollow(FOLLOW_constraint_in_constraints2587);
+            constraint194=constraint();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint85.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:234:15: ( COMMA constraint )*
-            loop32:
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint194.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:473:15: ( COMMA constraint )*
+            loop68:
             do {
-                int alt32=2;
-                int LA32_0 = input.LA(1);
+                int alt68=2;
+                int LA68_0 = input.LA(1);
 
-                if ( (LA32_0==COMMA) ) {
-                    alt32=1;
+                if ( (LA68_0==COMMA) ) {
+                    alt68=1;
                 }
 
 
-                switch (alt32) {
+                switch (alt68) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:234:17: COMMA constraint
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:473:17: COMMA constraint
             	    {
-            	    COMMA86=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints1384); if (failed) return retval;
-            	    pushFollow(FOLLOW_constraint_in_constraints1387);
-            	    constraint87=constraint();
+            	    COMMA195=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2591); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints2594);
+            	    constraint196=constraint();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint87.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint196.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop32;
+            	    break loop68;
                 }
             } while (true);
 
@@ -3912,28 +8049,28 @@
     };
 
     // $ANTLR start constraint
-    // /Users/porcelli/Desktop/testes/NewDRL.g:237:1: constraint : or_constr ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:476:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        or_constr_return or_constr88 = null;
+        or_constr_return or_constr197 = null;
 
 
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:238:2: ( or_constr )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:238:4: or_constr
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:477:2: ( or_constr )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:477:4: or_constr
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_or_constr_in_constraint1401);
-            or_constr88=or_constr();
+            pushFollow(FOLLOW_or_constr_in_constraint2608);
+            or_constr197=or_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr88.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr197.getTree());
 
             }
 
@@ -3960,64 +8097,64 @@
     };
 
     // $ANTLR start or_constr
-    // /Users/porcelli/Desktop/testes/NewDRL.g:241:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:480:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
     public final or_constr_return or_constr() throws RecognitionException {
         or_constr_return retval = new or_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE90=null;
-        and_constr_return and_constr89 = null;
+        Token DOUBLE_PIPE199=null;
+        and_constr_return and_constr198 = null;
 
-        and_constr_return and_constr91 = null;
+        and_constr_return and_constr200 = null;
 
 
-        Object DOUBLE_PIPE90_tree=null;
+        Object DOUBLE_PIPE199_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:242:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:242:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:481:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:481:4: and_constr ( DOUBLE_PIPE and_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_constr_in_or_constr1412);
-            and_constr89=and_constr();
+            pushFollow(FOLLOW_and_constr_in_or_constr2619);
+            and_constr198=and_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr89.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:242:15: ( DOUBLE_PIPE and_constr )*
-            loop33:
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr198.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:481:15: ( DOUBLE_PIPE and_constr )*
+            loop69:
             do {
-                int alt33=2;
-                int LA33_0 = input.LA(1);
+                int alt69=2;
+                int LA69_0 = input.LA(1);
 
-                if ( (LA33_0==DOUBLE_PIPE) ) {
-                    alt33=1;
+                if ( (LA69_0==DOUBLE_PIPE) ) {
+                    alt69=1;
                 }
 
 
-                switch (alt33) {
+                switch (alt69) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:242:17: DOUBLE_PIPE and_constr
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:481:17: DOUBLE_PIPE and_constr
             	    {
-            	    DOUBLE_PIPE90=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr1416); if (failed) return retval;
+            	    DOUBLE_PIPE199=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2623); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE90_tree = (Object)adaptor.create(DOUBLE_PIPE90);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE90_tree, root_0);
+            	    DOUBLE_PIPE199_tree = (Object)adaptor.create(DOUBLE_PIPE199);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE199_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr1419);
-            	    and_constr91=and_constr();
+            	    pushFollow(FOLLOW_and_constr_in_or_constr2626);
+            	    and_constr200=and_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr91.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr200.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop33;
+            	    break loop69;
                 }
             } while (true);
 
@@ -4047,64 +8184,64 @@
     };
 
     // $ANTLR start and_constr
-    // /Users/porcelli/Desktop/testes/NewDRL.g:245:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:484:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
     public final and_constr_return and_constr() throws RecognitionException {
         and_constr_return retval = new and_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER93=null;
-        unary_constr_return unary_constr92 = null;
+        Token DOUBLE_AMPER202=null;
+        unary_constr_return unary_constr201 = null;
 
-        unary_constr_return unary_constr94 = null;
+        unary_constr_return unary_constr203 = null;
 
 
-        Object DOUBLE_AMPER93_tree=null;
+        Object DOUBLE_AMPER202_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:246:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:246:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:485:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:485:4: unary_constr ( DOUBLE_AMPER unary_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unary_constr_in_and_constr1434);
-            unary_constr92=unary_constr();
+            pushFollow(FOLLOW_unary_constr_in_and_constr2641);
+            unary_constr201=unary_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr92.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:246:17: ( DOUBLE_AMPER unary_constr )*
-            loop34:
+            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr201.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:485:17: ( DOUBLE_AMPER unary_constr )*
+            loop70:
             do {
-                int alt34=2;
-                int LA34_0 = input.LA(1);
+                int alt70=2;
+                int LA70_0 = input.LA(1);
 
-                if ( (LA34_0==DOUBLE_AMPER) ) {
-                    alt34=1;
+                if ( (LA70_0==DOUBLE_AMPER) ) {
+                    alt70=1;
                 }
 
 
-                switch (alt34) {
+                switch (alt70) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:246:19: DOUBLE_AMPER unary_constr
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:485:19: DOUBLE_AMPER unary_constr
             	    {
-            	    DOUBLE_AMPER93=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr1438); if (failed) return retval;
+            	    DOUBLE_AMPER202=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2645); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER93_tree = (Object)adaptor.create(DOUBLE_AMPER93);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER93_tree, root_0);
+            	    DOUBLE_AMPER202_tree = (Object)adaptor.create(DOUBLE_AMPER202);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER202_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr1441);
-            	    unary_constr94=unary_constr();
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr2648);
+            	    unary_constr203=unary_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr94.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr203.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop34;
+            	    break loop70;
                 }
             } while (true);
 
@@ -4134,55 +8271,55 @@
     };
 
     // $ANTLR start unary_constr
-    // /Users/porcelli/Desktop/testes/NewDRL.g:249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:488:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );
     public final unary_constr_return unary_constr() throws RecognitionException {
         unary_constr_return retval = new unary_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN98=null;
-        Token RIGHT_PAREN100=null;
-        eval_key_return eval_key95 = null;
+        Token LEFT_PAREN207=null;
+        Token RIGHT_PAREN209=null;
+        eval_key_return eval_key204 = null;
 
-        paren_chunk_return paren_chunk96 = null;
+        paren_chunk_return paren_chunk205 = null;
 
-        field_constraint_return field_constraint97 = null;
+        field_constraint_return field_constraint206 = null;
 
-        or_constr_return or_constr99 = null;
+        or_constr_return or_constr208 = null;
 
 
-        Object LEFT_PAREN98_tree=null;
-        Object RIGHT_PAREN100_tree=null;
+        Object LEFT_PAREN207_tree=null;
+        Object RIGHT_PAREN209_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_or_constr=new RewriteRuleSubtreeStream(adaptor,"rule or_constr");
         RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:251:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr )
-            int alt35=3;
-            int LA35_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:490:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr )
+            int alt71=3;
+            int LA71_0 = input.LA(1);
 
-            if ( (LA35_0==ID) ) {
-                int LA35_1 = input.LA(2);
+            if ( (LA71_0==ID) ) {
+                int LA71_1 = input.LA(2);
 
-                if ( ((LA35_1>=ID && LA35_1<=DOT)||(LA35_1>=COLON && LA35_1<=NOT_EQUAL)||LA35_1==LEFT_SQUARE) ) {
-                    alt35=2;
+                if ( ((LA71_1>=ID && LA71_1<=DOT)||LA71_1==COLON||(LA71_1>=EQUAL && LA71_1<=NOT_EQUAL)||LA71_1==LEFT_SQUARE) ) {
+                    alt71=2;
                 }
-                else if ( (LA35_1==LEFT_PAREN) ) {
-                    int LA35_13 = input.LA(3);
+                else if ( (LA71_1==LEFT_PAREN) ) {
+                    int LA71_13 = input.LA(3);
 
                     if ( ((validateIdentifierKey("eval"))) ) {
-                        alt35=1;
+                        alt71=1;
                     }
                     else if ( (true) ) {
-                        alt35=2;
+                        alt71=2;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 35, 13, input);
+                            new NoViableAltException("488:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 71, 13, input);
 
                         throw nvae;
                     }
@@ -4190,38 +8327,38 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 35, 1, input);
+                        new NoViableAltException("488:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 71, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA35_0==LEFT_PAREN) ) {
-                alt35=3;
+            else if ( (LA71_0==LEFT_PAREN) ) {
+                alt71=3;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 35, 0, input);
+                    new NoViableAltException("488:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 71, 0, input);
 
                 throw nvae;
             }
-            switch (alt35) {
+            switch (alt71) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:251:4: eval_key paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:490:4: eval_key paren_chunk
                     {
-                    pushFollow(FOLLOW_eval_key_in_unary_constr1462);
-                    eval_key95=eval_key();
+                    pushFollow(FOLLOW_eval_key_in_unary_constr2669);
+                    eval_key204=eval_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_eval_key.add(eval_key95.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_unary_constr1464);
-                    paren_chunk96=paren_chunk();
+                    if ( backtracking==0 ) stream_eval_key.add(eval_key204.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2671);
+                    paren_chunk205=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk96.getTree());
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk205.getTree());
 
                     // AST REWRITE
-                    // elements: paren_chunk, eval_key
+                    // elements: eval_key, paren_chunk
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -4231,9 +8368,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 251:25: -> ^( eval_key paren_chunk )
+                    // 490:25: -> ^( eval_key paren_chunk )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:251:28: ^( eval_key paren_chunk )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:490:28: ^( eval_key paren_chunk )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -4250,33 +8387,33 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:252:4: field_constraint
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:491:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr1477);
-                    field_constraint97=field_constraint();
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr2684);
+                    field_constraint206=field_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint97.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint206.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:253:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:492:4: LEFT_PAREN or_constr RIGHT_PAREN
                     {
-                    LEFT_PAREN98=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr1482); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN98);
+                    LEFT_PAREN207=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2689); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN207);
 
-                    pushFollow(FOLLOW_or_constr_in_unary_constr1484);
-                    or_constr99=or_constr();
+                    pushFollow(FOLLOW_or_constr_in_unary_constr2691);
+                    or_constr208=or_constr();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_or_constr.add(or_constr99.getTree());
-                    RIGHT_PAREN100=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr1486); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN100);
+                    if ( backtracking==0 ) stream_or_constr.add(or_constr208.getTree());
+                    RIGHT_PAREN209=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2693); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN209);
 
 
                     // AST REWRITE
@@ -4290,7 +8427,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 253:37: -> or_constr
+                    // 492:37: -> or_constr
                     {
                         adaptor.addChild(root_0, stream_or_constr.next());
 
@@ -4325,7 +8462,7 @@
     };
 
     // $ANTLR start field_constraint
-    // /Users/porcelli/Desktop/testes/NewDRL.g:257:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:495:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
     public final field_constraint_return field_constraint() throws RecognitionException {
         field_constraint_return retval = new field_constraint_return();
         retval.start = input.LT(1);
@@ -4333,17 +8470,17 @@
         Object root_0 = null;
 
         Token arw=null;
-        label_return label101 = null;
+        label_return label210 = null;
 
-        accessor_path_return accessor_path102 = null;
+        accessor_path_return accessor_path211 = null;
 
-        or_restr_connective_return or_restr_connective103 = null;
+        or_restr_connective_return or_restr_connective212 = null;
 
-        paren_chunk_return paren_chunk104 = null;
+        paren_chunk_return paren_chunk213 = null;
 
-        accessor_path_return accessor_path105 = null;
+        accessor_path_return accessor_path214 = null;
 
-        or_restr_connective_return or_restr_connective106 = null;
+        or_restr_connective_return or_restr_connective215 = null;
 
 
         Object arw_tree=null;
@@ -4356,23 +8493,23 @@
         	boolean isArrow = false;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:260: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 alt37=2;
-            int LA37_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:498:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
+            int alt73=2;
+            int LA73_0 = input.LA(1);
 
-            if ( (LA37_0==ID) ) {
-                int LA37_1 = input.LA(2);
+            if ( (LA73_0==ID) ) {
+                int LA73_1 = input.LA(2);
 
-                if ( (LA37_1==COLON) ) {
-                    alt37=1;
+                if ( (LA73_1==COLON) ) {
+                    alt73=1;
                 }
-                else if ( (LA37_1==LEFT_PAREN||(LA37_1>=ID && LA37_1<=DOT)||(LA37_1>=EQUAL && LA37_1<=NOT_EQUAL)||LA37_1==LEFT_SQUARE) ) {
-                    alt37=2;
+                else if ( ((LA73_1>=ID && LA73_1<=DOT)||LA73_1==LEFT_PAREN||(LA73_1>=EQUAL && LA73_1<=NOT_EQUAL)||LA73_1==LEFT_SQUARE) ) {
+                    alt73=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("257: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 ) );", 37, 1, input);
+                        new NoViableAltException("495:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 1, input);
 
                     throw nvae;
                 }
@@ -4380,58 +8517,58 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("257: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 ) );", 37, 0, input);
+                    new NoViableAltException("495:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 0, input);
 
                 throw nvae;
             }
-            switch (alt37) {
+            switch (alt73) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:260:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:498:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
-                    pushFollow(FOLLOW_label_in_field_constraint1505);
-                    label101=label();
+                    pushFollow(FOLLOW_label_in_field_constraint2711);
+                    label210=label();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_label.add(label101.getTree());
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint1507);
-                    accessor_path102=accessor_path();
+                    if ( backtracking==0 ) stream_label.add(label210.getTree());
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2713);
+                    accessor_path211=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path102.getTree());
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:260:25: ( or_restr_connective | arw= ARROW paren_chunk )?
-                    int alt36=3;
-                    int LA36_0 = input.LA(1);
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path211.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:498:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    int alt72=3;
+                    int LA72_0 = input.LA(1);
 
-                    if ( (LA36_0==LEFT_PAREN||LA36_0==ID||(LA36_0>=EQUAL && LA36_0<=NOT_EQUAL)) ) {
-                        alt36=1;
+                    if ( (LA72_0==ID||LA72_0==LEFT_PAREN||(LA72_0>=EQUAL && LA72_0<=NOT_EQUAL)) ) {
+                        alt72=1;
                     }
-                    else if ( (LA36_0==ARROW) ) {
-                        alt36=2;
+                    else if ( (LA72_0==ARROW) ) {
+                        alt72=2;
                     }
-                    switch (alt36) {
+                    switch (alt72) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:260:27: or_restr_connective
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:498:27: or_restr_connective
                             {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint1511);
-                            or_restr_connective103=or_restr_connective();
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2717);
+                            or_restr_connective212=or_restr_connective();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective103.getTree());
+                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective212.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:260:49: arw= ARROW paren_chunk
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:498:49: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
-                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint1517); if (failed) return retval;
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2723); if (failed) return retval;
                             if ( backtracking==0 ) stream_ARROW.add(arw);
 
-                            pushFollow(FOLLOW_paren_chunk_in_field_constraint1519);
-                            paren_chunk104=paren_chunk();
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2725);
+                            paren_chunk213=paren_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk104.getTree());
+                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk213.getTree());
                             if ( backtracking==0 ) {
                               isArrow = true;
                             }
@@ -4443,7 +8580,7 @@
 
 
                     // AST REWRITE
-                    // elements: or_restr_connective, label, paren_chunk, label, accessor_path, accessor_path
+                    // elements: paren_chunk, or_restr_connective, accessor_path, accessor_path, label, label
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -4453,23 +8590,23 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 261:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) )
+                    // 499:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) )
                     if (isArrow) {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:261:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:499:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
 
                         adaptor.addChild(root_1, stream_label.next());
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:261:39: ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:499:39: ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
 
                         adaptor.addChild(root_2, stream_accessor_path.next());
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:261:64: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:499:64: ( ^( VK_EVAL[$arw] paren_chunk ) )?
                         if ( stream_paren_chunk.hasNext() ) {
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:261:64: ^( VK_EVAL[$arw] paren_chunk )
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:499:64: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_3 = (Object)adaptor.nil();
                             root_3 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_3);
@@ -4489,21 +8626,21 @@
                         }
 
                     }
-                    else // 262:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 500:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:262:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:500:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
 
                         adaptor.addChild(root_1, stream_label.next());
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:262:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:500:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
 
                         adaptor.addChild(root_2, stream_accessor_path.next());
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:262:53: ( or_restr_connective )?
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:500:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -4523,18 +8660,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:263:4: accessor_path or_restr_connective
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:501:4: accessor_path or_restr_connective
                     {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint1573);
-                    accessor_path105=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2779);
+                    accessor_path214=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path105.getTree());
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint1575);
-                    or_restr_connective106=or_restr_connective();
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path214.getTree());
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2781);
+                    or_restr_connective215=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective106.getTree());
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective215.getTree());
 
                     // AST REWRITE
                     // elements: accessor_path, or_restr_connective
@@ -4547,9 +8684,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 264:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 502:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // /Users/porcelli/Desktop/testes/NewDRL.g:264:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:502: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);
@@ -4591,7 +8728,7 @@
     };
 
     // $ANTLR start label
-    // /Users/porcelli/Desktop/testes/NewDRL.g:267:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:505: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);
@@ -4599,24 +8736,24 @@
         Object root_0 = null;
 
         Token value=null;
-        Token COLON107=null;
+        Token COLON216=null;
 
         Object value_tree=null;
-        Object COLON107_tree=null;
+        Object COLON216_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:267:7: (value= ID COLON -> VT_LABEL[$value] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:267:9: value= ID COLON
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:505:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:505:9: value= ID COLON
             {
             value=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_label1599); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_label2805); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(value);
 
-            COLON107=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_label1601); if (failed) return retval;
-            if ( backtracking==0 ) stream_COLON.add(COLON107);
+            COLON216=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_label2807); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON216);
 
 
             // AST REWRITE
@@ -4630,7 +8767,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 267:24: -> VT_LABEL[$value]
+            // 505:24: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -4663,58 +8800,58 @@
     };
 
     // $ANTLR start or_restr_connective
-    // /Users/porcelli/Desktop/testes/NewDRL.g:270:1: or_restr_connective : and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:508:1: or_restr_connective : and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* ;
     public final or_restr_connective_return or_restr_connective() throws RecognitionException {
         or_restr_connective_return retval = new or_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE109=null;
-        and_restr_connective_return and_restr_connective108 = null;
+        Token DOUBLE_PIPE218=null;
+        and_restr_connective_return and_restr_connective217 = null;
 
-        and_restr_connective_return and_restr_connective110 = null;
+        and_restr_connective_return and_restr_connective219 = null;
 
 
-        Object DOUBLE_PIPE109_tree=null;
+        Object DOUBLE_PIPE218_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:271:2: ( and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:271:4: and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:509:2: ( and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:509:4: and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective1617);
-            and_restr_connective108=and_restr_connective();
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2823);
+            and_restr_connective217=and_restr_connective();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective108.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:271:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
-            loop38:
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective217.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:509:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            loop74:
             do {
-                int alt38=2;
-                alt38 = dfa38.predict(input);
-                switch (alt38) {
+                int alt74=2;
+                alt74 = dfa74.predict(input);
+                switch (alt74) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:271:53: DOUBLE_PIPE and_restr_connective
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:509:53: DOUBLE_PIPE and_restr_connective
             	    {
-            	    DOUBLE_PIPE109=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective1629); if (failed) return retval;
+            	    DOUBLE_PIPE218=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2835); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE109_tree = (Object)adaptor.create(DOUBLE_PIPE109);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE109_tree, root_0);
+            	    DOUBLE_PIPE218_tree = (Object)adaptor.create(DOUBLE_PIPE218);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE218_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective1632);
-            	    and_restr_connective110=and_restr_connective();
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2838);
+            	    and_restr_connective219=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective110.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective219.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop38;
+            	    break loop74;
                 }
             } while (true);
 
@@ -4744,58 +8881,58 @@
     };
 
     // $ANTLR start and_restr_connective
-    // /Users/porcelli/Desktop/testes/NewDRL.g:274:1: and_restr_connective : constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:512:1: and_restr_connective : constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* ;
     public final and_restr_connective_return and_restr_connective() throws RecognitionException {
         and_restr_connective_return retval = new and_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER112=null;
-        constraint_expression_return constraint_expression111 = null;
+        Token DOUBLE_AMPER221=null;
+        constraint_expression_return constraint_expression220 = null;
 
-        constraint_expression_return constraint_expression113 = null;
+        constraint_expression_return constraint_expression222 = null;
 
 
-        Object DOUBLE_AMPER112_tree=null;
+        Object DOUBLE_AMPER221_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:275:2: ( constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:275:4: constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:513:2: ( constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:513:4: constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective1647);
-            constraint_expression111=constraint_expression();
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2853);
+            constraint_expression220=constraint_expression();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression111.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:275:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
-            loop39:
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression220.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:513:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            loop75:
             do {
-                int alt39=2;
-                alt39 = dfa39.predict(input);
-                switch (alt39) {
+                int alt75=2;
+                alt75 = dfa75.predict(input);
+                switch (alt75) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:275:54: DOUBLE_AMPER constraint_expression
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:513:54: DOUBLE_AMPER constraint_expression
             	    {
-            	    DOUBLE_AMPER112=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective1659); if (failed) return retval;
+            	    DOUBLE_AMPER221=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2865); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER112_tree = (Object)adaptor.create(DOUBLE_AMPER112);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER112_tree, root_0);
+            	    DOUBLE_AMPER221_tree = (Object)adaptor.create(DOUBLE_AMPER221);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER221_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective1662);
-            	    constraint_expression113=constraint_expression();
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2868);
+            	    constraint_expression222=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression113.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression222.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop39;
+            	    break loop75;
                 }
             } while (true);
 
@@ -4825,81 +8962,78 @@
     };
 
     // $ANTLR start constraint_expression
-    // /Users/porcelli/Desktop/testes/NewDRL.g:278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );
     public final constraint_expression_return constraint_expression() throws RecognitionException {
         constraint_expression_return retval = new constraint_expression_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN116=null;
-        Token RIGHT_PAREN118=null;
-        compound_operator_return compound_operator114 = null;
+        Token LEFT_PAREN225=null;
+        Token RIGHT_PAREN227=null;
+        compound_operator_return compound_operator223 = null;
 
-        simple_operator_return simple_operator115 = null;
+        simple_operator_return simple_operator224 = null;
 
-        or_restr_connective_return or_restr_connective117 = null;
+        or_restr_connective_return or_restr_connective226 = null;
 
 
-        Object LEFT_PAREN116_tree=null;
-        Object RIGHT_PAREN118_tree=null;
+        Object LEFT_PAREN225_tree=null;
+        Object RIGHT_PAREN227_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_or_restr_connective=new RewriteRuleSubtreeStream(adaptor,"rule or_restr_connective");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:281:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective )
-            int alt40=3;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:519:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective )
+            int alt76=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
                 switch ( input.LA(2) ) {
                 case ID:
                     {
-                    int LA40_9 = input.LA(3);
+                    int LA76_9 = input.LA(3);
 
-                    if ( (LA40_9==LEFT_SQUARE) ) {
-                        alt40=2;
+                    if ( (LA76_9==ID||LA76_9==STRING||(LA76_9>=BOOL && LA76_9<=INT)||(LA76_9>=FLOAT && LA76_9<=NULL)) && ((validateIdentifierKey("not")))) {
+                        alt76=2;
                     }
-                    else if ( (LA40_9==ID||(LA40_9>=STRING && LA40_9<=NULL)) && ((validateIdentifierKey("not")))) {
-                        alt40=2;
-                    }
-                    else if ( (LA40_9==LEFT_PAREN) && ((validateIdentifierKey("not")))) {
-                        int LA40_16 = input.LA(4);
+                    else if ( (LA76_9==LEFT_PAREN) && ((validateIdentifierKey("not")))) {
+                        int LA76_15 = input.LA(4);
 
                         if ( ((validateIdentifierKey("not"))) ) {
-                            alt40=1;
+                            alt76=1;
                         }
                         else if ( ((validateIdentifierKey("not"))) ) {
-                            alt40=2;
+                            alt76=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 16, input);
+                                new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 15, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (LA40_9==EOF||(LA40_9>=RIGHT_PAREN && LA40_9<=DOUBLE_AMPER)||LA40_9==COMMA||LA40_9==DOT) ) {
-                        alt40=2;
+                    else if ( (LA76_9==EOF||LA76_9==DOT||(LA76_9>=COMMA && LA76_9<=RIGHT_PAREN)||(LA76_9>=DOUBLE_PIPE && LA76_9<=DOUBLE_AMPER)||LA76_9==LEFT_SQUARE) ) {
+                        alt76=2;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 9, input);
+                            new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 9, input);
 
                         throw nvae;
                     }
                     }
                     break;
                 case STRING:
+                case BOOL:
                 case INT:
                 case FLOAT:
-                case BOOL:
                 case NULL:
                 case LEFT_SQUARE:
                     {
-                    alt40=2;
+                    alt76=2;
                     }
                     break;
                 case LEFT_PAREN:
@@ -4907,18 +9041,18 @@
                     switch ( input.LA(3) ) {
                     case ID:
                         {
-                        int LA40_23 = input.LA(4);
+                        int LA76_23 = input.LA(4);
 
                         if ( ((validateIdentifierKey("in"))) ) {
-                            alt40=1;
+                            alt76=1;
                         }
                         else if ( (true) ) {
-                            alt40=2;
+                            alt76=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 23, input);
+                                new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 23, input);
 
                             throw nvae;
                         }
@@ -4926,28 +9060,36 @@
                         break;
                     case LEFT_PAREN:
                         {
-                        int LA40_24 = input.LA(4);
+                        int LA76_24 = input.LA(4);
 
                         if ( ((validateIdentifierKey("in"))) ) {
-                            alt40=1;
+                            alt76=1;
                         }
                         else if ( (true) ) {
-                            alt40=2;
+                            alt76=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 24, input);
+                                new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 24, input);
 
                             throw nvae;
                         }
                         }
                         break;
+                    case VT_COMPILATION_UNIT:
+                    case VT_FUNCTION_IMPORT:
                     case VT_FACT:
                     case VT_CONSTRAINTS:
-                    case VT_QUALIFIED_ID:
                     case VT_LABEL:
-                    case VT_NAME:
+                    case VT_QUERY_ID:
+                    case VT_TEMPLATE_ID:
+                    case VT_RULE_ID:
+                    case VT_ENTRYPOINT_ID:
+                    case VT_SLOT_ID:
+                    case VT_SLOT:
+                    case VT_RULE_ATTRIBUTES:
+                    case VT_RHS_CHUNK:
                     case VT_CURLY_CHUNK:
                     case VT_SQUARE_CHUNK:
                     case VT_PAREN_CHUNK:
@@ -4967,6 +9109,34 @@
                     case VT_FIELD:
                     case VT_ACCESSOR_PATH:
                     case VT_ACCESSOR_ELEMENT:
+                    case VT_DATA_TYPE:
+                    case VT_PACKAGE_ID:
+                    case VT_IMPORT_ID:
+                    case VT_GLOBAL_ID:
+                    case VT_FUNCTION_ID:
+                    case VT_PARAM_LIST:
+                    case VK_DATE_EFFECTIVE:
+                    case VK_DATE_EXPIRES:
+                    case VK_LOCK_ON_ACTIVE:
+                    case VK_NO_LOOP:
+                    case VK_AUTO_FOCUS:
+                    case VK_ACTIVATION_GROUP:
+                    case VK_AGENDA_GROUP:
+                    case VK_RULEFLOW_GROUP:
+                    case VK_DURATION:
+                    case VK_DIALECT:
+                    case VK_SALIENCE:
+                    case VK_ENABLED:
+                    case VK_ATTRIBUTES:
+                    case VK_WHEN:
+                    case VK_RULE:
+                    case VK_IMPORT:
+                    case VK_PACKAGE:
+                    case VK_TEMPLATE:
+                    case VK_QUERY:
+                    case VK_DECLARE:
+                    case VK_FUNCTION:
+                    case VK_GLOBAL:
                     case VK_EVAL:
                     case VK_CONTAINS:
                     case VK_MATCHES:
@@ -4987,14 +9157,16 @@
                     case VK_REVERSE:
                     case VK_RESULT:
                     case VK_COLLECT:
+                    case SEMICOLON:
+                    case DOT:
+                    case DOT_STAR:
+                    case END:
+                    case COMMA:
                     case RIGHT_PAREN:
+                    case COLON:
                     case DOUBLE_PIPE:
                     case DOUBLE_AMPER:
-                    case SEMICOLON:
-                    case COMMA:
-                    case DOT:
                     case ARROW:
-                    case COLON:
                     case EQUAL:
                     case GREATER:
                     case GREATER_EQUAL:
@@ -5003,6 +9175,7 @@
                     case NOT_EQUAL:
                     case LEFT_SQUARE:
                     case RIGHT_SQUARE:
+                    case THEN:
                     case LEFT_CURLY:
                     case RIGHT_CURLY:
                     case MISC:
@@ -5012,32 +9185,31 @@
                     case HexDigit:
                     case UnicodeEscape:
                     case OctalEscape:
-                    case TILDE:
                     case SH_STYLE_SINGLE_LINE_COMMENT:
                     case C_STYLE_SINGLE_LINE_COMMENT:
                     case MULTI_LINE_COMMENT:
                         {
-                        alt40=2;
+                        alt76=2;
                         }
                         break;
                     case STRING:
+                    case BOOL:
                     case INT:
                     case FLOAT:
-                    case BOOL:
                     case NULL:
                         {
-                        int LA40_26 = input.LA(4);
+                        int LA76_26 = input.LA(4);
 
                         if ( ((validateIdentifierKey("in"))) ) {
-                            alt40=1;
+                            alt76=1;
                         }
                         else if ( (true) ) {
-                            alt40=2;
+                            alt76=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 26, input);
+                                new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 26, input);
 
                             throw nvae;
                         }
@@ -5046,7 +9218,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 11, input);
+                            new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 11, input);
 
                         throw nvae;
                     }
@@ -5056,7 +9228,7 @@
                 default:
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 1, input);
+                        new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 1, input);
 
                     throw nvae;
                 }
@@ -5070,64 +9242,64 @@
             case LESS_EQUAL:
             case NOT_EQUAL:
                 {
-                alt40=2;
+                alt76=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt40=3;
+                alt76=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 0, input);
+                    new NoViableAltException("516:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 76, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt40) {
+            switch (alt76) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:281:5: compound_operator
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:519:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression1684);
-                    compound_operator114=compound_operator();
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2890);
+                    compound_operator223=compound_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator114.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator223.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:282:4: simple_operator
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:520:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression1689);
-                    simple_operator115=simple_operator();
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2895);
+                    simple_operator224=simple_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator115.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator224.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:283:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:521:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
                     {
-                    LEFT_PAREN116=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression1694); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN116);
+                    LEFT_PAREN225=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2900); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN225);
 
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression1696);
-                    or_restr_connective117=or_restr_connective();
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2902);
+                    or_restr_connective226=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective117.getTree());
-                    RIGHT_PAREN118=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression1698); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN118);
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective226.getTree());
+                    RIGHT_PAREN227=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2904); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN227);
 
 
                     // AST REWRITE
@@ -5141,7 +9313,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 283:47: -> or_restr_connective
+                    // 521:47: -> or_restr_connective
                     {
                         adaptor.addChild(root_0, stream_or_restr_connective.next());
 
@@ -5176,125 +9348,125 @@
     };
 
     // $ANTLR start simple_operator
-    // /Users/porcelli/Desktop/testes/NewDRL.g:286:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:524:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value ;
     public final simple_operator_return simple_operator() throws RecognitionException {
         simple_operator_return retval = new simple_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token EQUAL119=null;
-        Token GREATER120=null;
-        Token GREATER_EQUAL121=null;
-        Token LESS122=null;
-        Token LESS_EQUAL123=null;
-        Token NOT_EQUAL124=null;
-        Token ID130=null;
-        Token ID137=null;
-        not_key_return not_key125 = null;
+        Token EQUAL228=null;
+        Token GREATER229=null;
+        Token GREATER_EQUAL230=null;
+        Token LESS231=null;
+        Token LESS_EQUAL232=null;
+        Token NOT_EQUAL233=null;
+        Token ID239=null;
+        Token ID246=null;
+        not_key_return not_key234 = null;
 
-        contains_key_return contains_key126 = null;
+        contains_key_return contains_key235 = null;
 
-        soundslike_key_return soundslike_key127 = null;
+        soundslike_key_return soundslike_key236 = null;
 
-        matches_key_return matches_key128 = null;
+        matches_key_return matches_key237 = null;
 
-        memberof_key_return memberof_key129 = null;
+        memberof_key_return memberof_key238 = null;
 
-        square_chunk_return square_chunk131 = null;
+        square_chunk_return square_chunk240 = null;
 
-        contains_key_return contains_key132 = null;
+        contains_key_return contains_key241 = null;
 
-        excludes_key_return excludes_key133 = null;
+        excludes_key_return excludes_key242 = null;
 
-        matches_key_return matches_key134 = null;
+        matches_key_return matches_key243 = null;
 
-        soundslike_key_return soundslike_key135 = null;
+        soundslike_key_return soundslike_key244 = null;
 
-        memberof_key_return memberof_key136 = null;
+        memberof_key_return memberof_key245 = null;
 
-        square_chunk_return square_chunk138 = null;
+        square_chunk_return square_chunk247 = null;
 
-        expression_value_return expression_value139 = null;
+        expression_value_return expression_value248 = null;
 
 
-        Object EQUAL119_tree=null;
-        Object GREATER120_tree=null;
-        Object GREATER_EQUAL121_tree=null;
-        Object LESS122_tree=null;
-        Object LESS_EQUAL123_tree=null;
-        Object NOT_EQUAL124_tree=null;
-        Object ID130_tree=null;
-        Object ID137_tree=null;
+        Object EQUAL228_tree=null;
+        Object GREATER229_tree=null;
+        Object GREATER_EQUAL230_tree=null;
+        Object LESS231_tree=null;
+        Object LESS_EQUAL232_tree=null;
+        Object NOT_EQUAL233_tree=null;
+        Object ID239_tree=null;
+        Object ID246_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:287:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:525:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:525:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )
-            int alt44=13;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:525:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )
+            int alt80=13;
             switch ( input.LA(1) ) {
             case EQUAL:
                 {
-                alt44=1;
+                alt80=1;
                 }
                 break;
             case GREATER:
                 {
-                alt44=2;
+                alt80=2;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt44=3;
+                alt80=3;
                 }
                 break;
             case LESS:
                 {
-                alt44=4;
+                alt80=4;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt44=5;
+                alt80=5;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt44=6;
+                alt80=6;
                 }
                 break;
             case ID:
                 {
-                int LA44_7 = input.LA(2);
+                int LA80_7 = input.LA(2);
 
-                if ( (LA44_7==ID) && ((validateIdentifierKey("not")))) {
-                    alt44=7;
+                if ( (LA80_7==ID) && ((validateIdentifierKey("not")))) {
+                    alt80=7;
                 }
                 else if ( ((validateIdentifierKey("contains"))) ) {
-                    alt44=8;
+                    alt80=8;
                 }
                 else if ( ((validateIdentifierKey("excludes"))) ) {
-                    alt44=9;
+                    alt80=9;
                 }
                 else if ( ((validateIdentifierKey("matches"))) ) {
-                    alt44=10;
+                    alt80=10;
                 }
                 else if ( ((validateIdentifierKey("soundslike"))) ) {
-                    alt44=11;
+                    alt80=11;
                 }
                 else if ( ((validateIdentifierKey("memberof"))) ) {
-                    alt44=12;
+                    alt80=12;
                 }
                 else if ( (true) ) {
-                    alt44=13;
+                    alt80=13;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 44, 7, input);
+                        new NoViableAltException("525:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 7, input);
 
                     throw nvae;
                 }
@@ -5303,118 +9475,118 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 44, 0, input);
+                    new NoViableAltException("525:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt44) {
+            switch (alt80) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:287:5: EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:525:5: EQUAL
                     {
-                    EQUAL119=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator1714); if (failed) return retval;
+                    EQUAL228=(Token)input.LT(1);
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator2920); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    EQUAL119_tree = (Object)adaptor.create(EQUAL119);
-                    root_0 = (Object)adaptor.becomeRoot(EQUAL119_tree, root_0);
+                    EQUAL228_tree = (Object)adaptor.create(EQUAL228);
+                    root_0 = (Object)adaptor.becomeRoot(EQUAL228_tree, root_0);
                     }
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:288:4: GREATER
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:526:4: GREATER
                     {
-                    GREATER120=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator1720); if (failed) return retval;
+                    GREATER229=(Token)input.LT(1);
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator2926); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER120_tree = (Object)adaptor.create(GREATER120);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER120_tree, root_0);
+                    GREATER229_tree = (Object)adaptor.create(GREATER229);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER229_tree, root_0);
                     }
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:289:4: GREATER_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:527:4: GREATER_EQUAL
                     {
-                    GREATER_EQUAL121=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator1726); if (failed) return retval;
+                    GREATER_EQUAL230=(Token)input.LT(1);
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator2932); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER_EQUAL121_tree = (Object)adaptor.create(GREATER_EQUAL121);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL121_tree, root_0);
+                    GREATER_EQUAL230_tree = (Object)adaptor.create(GREATER_EQUAL230);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL230_tree, root_0);
                     }
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:290:4: LESS
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:528:4: LESS
                     {
-                    LESS122=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator1732); if (failed) return retval;
+                    LESS231=(Token)input.LT(1);
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator2938); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS122_tree = (Object)adaptor.create(LESS122);
-                    root_0 = (Object)adaptor.becomeRoot(LESS122_tree, root_0);
+                    LESS231_tree = (Object)adaptor.create(LESS231);
+                    root_0 = (Object)adaptor.becomeRoot(LESS231_tree, root_0);
                     }
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:291:4: LESS_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:529:4: LESS_EQUAL
                     {
-                    LESS_EQUAL123=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator1738); if (failed) return retval;
+                    LESS_EQUAL232=(Token)input.LT(1);
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator2944); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS_EQUAL123_tree = (Object)adaptor.create(LESS_EQUAL123);
-                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL123_tree, root_0);
+                    LESS_EQUAL232_tree = (Object)adaptor.create(LESS_EQUAL232);
+                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL232_tree, root_0);
                     }
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:292:4: NOT_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:530:4: NOT_EQUAL
                     {
-                    NOT_EQUAL124=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator1744); if (failed) return retval;
+                    NOT_EQUAL233=(Token)input.LT(1);
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator2950); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    NOT_EQUAL124_tree = (Object)adaptor.create(NOT_EQUAL124);
-                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL124_tree, root_0);
+                    NOT_EQUAL233_tree = (Object)adaptor.create(NOT_EQUAL233);
+                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL233_tree, root_0);
                     }
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:293:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator1750);
-                    not_key125=not_key();
+                    pushFollow(FOLLOW_not_key_in_simple_operator2956);
+                    not_key234=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key125.getTree());
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:293:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
-                    int alt42=5;
-                    int LA42_0 = input.LA(1);
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key234.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    int alt78=5;
+                    int LA78_0 = input.LA(1);
 
-                    if ( (LA42_0==ID) ) {
-                        int LA42_1 = input.LA(2);
+                    if ( (LA78_0==ID) ) {
+                        int LA78_1 = input.LA(2);
 
                         if ( ((validateIdentifierKey("contains"))) ) {
-                            alt42=1;
+                            alt78=1;
                         }
                         else if ( ((validateIdentifierKey("soundslike"))) ) {
-                            alt42=2;
+                            alt78=2;
                         }
                         else if ( ((validateIdentifierKey("matches"))) ) {
-                            alt42=3;
+                            alt78=3;
                         }
                         else if ( ((validateIdentifierKey("memberof"))) ) {
-                            alt42=4;
+                            alt78=4;
                         }
                         else if ( (true) ) {
-                            alt42=5;
+                            alt78=5;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("293:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 42, 1, input);
+                                new NoViableAltException("531:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 1, input);
 
                             throw nvae;
                         }
@@ -5422,80 +9594,80 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("293:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 42, 0, input);
+                            new NoViableAltException("531:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt42) {
+                    switch (alt78) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:13: contains_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:13: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator1753);
-                            contains_key126=contains_key();
+                            pushFollow(FOLLOW_contains_key_in_simple_operator2959);
+                            contains_key235=contains_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key126.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key235.getTree(), root_0);
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:27: soundslike_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:27: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator1756);
-                            soundslike_key127=soundslike_key();
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator2962);
+                            soundslike_key236=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key127.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key236.getTree(), root_0);
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:43: matches_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:43: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator1759);
-                            matches_key128=matches_key();
+                            pushFollow(FOLLOW_matches_key_in_simple_operator2965);
+                            matches_key237=matches_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key128.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key237.getTree(), root_0);
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:56: memberof_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:56: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator1762);
-                            memberof_key129=memberof_key();
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator2968);
+                            memberof_key238=memberof_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key129.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key238.getTree(), root_0);
 
                             }
                             break;
                         case 5 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:70: ID ( square_chunk )?
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:70: ID ( square_chunk )?
                             {
-                            ID130=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator1765); if (failed) return retval;
+                            ID239=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator2971); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID130_tree = (Object)adaptor.create(ID130);
-                            root_0 = (Object)adaptor.becomeRoot(ID130_tree, root_0);
+                            ID239_tree = (Object)adaptor.create(ID239);
+                            root_0 = (Object)adaptor.becomeRoot(ID239_tree, root_0);
                             }
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:74: ( square_chunk )?
-                            int alt41=2;
-                            int LA41_0 = input.LA(1);
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:74: ( square_chunk )?
+                            int alt77=2;
+                            int LA77_0 = input.LA(1);
 
-                            if ( (LA41_0==LEFT_SQUARE) ) {
-                                alt41=1;
+                            if ( (LA77_0==LEFT_SQUARE) ) {
+                                alt77=1;
                             }
-                            switch (alt41) {
+                            switch (alt77) {
                                 case 1 :
-                                    // /Users/porcelli/Desktop/testes/NewDRL.g:293:74: square_chunk
+                                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:531:74: square_chunk
                                     {
-                                    pushFollow(FOLLOW_square_chunk_in_simple_operator1768);
-                                    square_chunk131=square_chunk();
+                                    pushFollow(FOLLOW_square_chunk_in_simple_operator2974);
+                                    square_chunk240=square_chunk();
                                     _fsp--;
                                     if (failed) return retval;
-                                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk131.getTree());
+                                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk240.getTree());
 
                                     }
                                     break;
@@ -5512,85 +9684,85 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:294:10: contains_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:532:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator1781);
-                    contains_key132=contains_key();
+                    pushFollow(FOLLOW_contains_key_in_simple_operator2981);
+                    contains_key241=contains_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key132.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key241.getTree(), root_0);
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:295:4: excludes_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:533:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator1787);
-                    excludes_key133=excludes_key();
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator2987);
+                    excludes_key242=excludes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key133.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key242.getTree(), root_0);
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:296:4: matches_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:534:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator1793);
-                    matches_key134=matches_key();
+                    pushFollow(FOLLOW_matches_key_in_simple_operator2993);
+                    matches_key243=matches_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key134.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key243.getTree(), root_0);
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:297:4: soundslike_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:535:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator1799);
-                    soundslike_key135=soundslike_key();
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator2999);
+                    soundslike_key244=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key135.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key244.getTree(), root_0);
 
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:298:4: memberof_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:536:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator1805);
-                    memberof_key136=memberof_key();
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3005);
+                    memberof_key245=memberof_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key136.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key245.getTree(), root_0);
 
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:299:4: ID ( square_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:537:4: ID ( square_chunk )?
                     {
-                    ID137=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator1811); if (failed) return retval;
+                    ID246=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3011); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID137_tree = (Object)adaptor.create(ID137);
-                    root_0 = (Object)adaptor.becomeRoot(ID137_tree, root_0);
+                    ID246_tree = (Object)adaptor.create(ID246);
+                    root_0 = (Object)adaptor.becomeRoot(ID246_tree, root_0);
                     }
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:299:8: ( square_chunk )?
-                    int alt43=2;
-                    int LA43_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:537:8: ( square_chunk )?
+                    int alt79=2;
+                    int LA79_0 = input.LA(1);
 
-                    if ( (LA43_0==LEFT_SQUARE) ) {
-                        alt43=1;
+                    if ( (LA79_0==LEFT_SQUARE) ) {
+                        alt79=1;
                     }
-                    switch (alt43) {
+                    switch (alt79) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/NewDRL.g:299:8: square_chunk
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:537:8: square_chunk
                             {
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator1814);
-                            square_chunk138=square_chunk();
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3014);
+                            square_chunk247=square_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk138.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk247.getTree());
 
                             }
                             break;
@@ -5603,11 +9775,11 @@
 
             }
 
-            pushFollow(FOLLOW_expression_value_in_simple_operator1819);
-            expression_value139=expression_value();
+            pushFollow(FOLLOW_expression_value_in_simple_operator3019);
+            expression_value248=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value139.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value248.getTree());
 
             }
 
@@ -5634,54 +9806,54 @@
     };
 
     // $ANTLR start compound_operator
-    // /Users/porcelli/Desktop/testes/NewDRL.g:304:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:542: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_PAREN143=null;
-        Token COMMA145=null;
-        Token RIGHT_PAREN147=null;
-        in_key_return in_key140 = null;
+        Token LEFT_PAREN252=null;
+        Token COMMA254=null;
+        Token RIGHT_PAREN256=null;
+        in_key_return in_key249 = null;
 
-        not_key_return not_key141 = null;
+        not_key_return not_key250 = null;
 
-        in_key_return in_key142 = null;
+        in_key_return in_key251 = null;
 
-        expression_value_return expression_value144 = null;
+        expression_value_return expression_value253 = null;
 
-        expression_value_return expression_value146 = null;
+        expression_value_return expression_value255 = null;
 
 
-        Object LEFT_PAREN143_tree=null;
-        Object COMMA145_tree=null;
-        Object RIGHT_PAREN147_tree=null;
+        Object LEFT_PAREN252_tree=null;
+        Object COMMA254_tree=null;
+        Object RIGHT_PAREN256_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:305:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:305:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:305:4: ( in_key | not_key in_key )
-            int alt45=2;
-            int LA45_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:4: ( in_key | not_key in_key )
+            int alt81=2;
+            int LA81_0 = input.LA(1);
 
-            if ( (LA45_0==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("in"))))) {
-                int LA45_1 = input.LA(2);
+            if ( (LA81_0==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("in"))))) {
+                int LA81_1 = input.LA(2);
 
-                if ( (LA45_1==ID) && ((validateIdentifierKey("not")))) {
-                    alt45=2;
+                if ( (LA81_1==LEFT_PAREN) && ((validateIdentifierKey("in")))) {
+                    alt81=1;
                 }
-                else if ( (LA45_1==LEFT_PAREN) && ((validateIdentifierKey("in")))) {
-                    alt45=1;
+                else if ( (LA81_1==ID) && ((validateIdentifierKey("not")))) {
+                    alt81=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("305:4: ( in_key | not_key in_key )", 45, 1, input);
+                        new NoViableAltException("543:4: ( in_key | not_key in_key )", 81, 1, input);
 
                     throw nvae;
                 }
@@ -5689,81 +9861,81 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("305:4: ( in_key | not_key in_key )", 45, 0, input);
+                    new NoViableAltException("543:4: ( in_key | not_key in_key )", 81, 0, input);
 
                 throw nvae;
             }
-            switch (alt45) {
+            switch (alt81) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:305:6: in_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:6: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator1834);
-                    in_key140=in_key();
+                    pushFollow(FOLLOW_in_key_in_compound_operator3034);
+                    in_key249=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key140.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key249.getTree(), root_0);
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:305:16: not_key in_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:16: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator1839);
-                    not_key141=not_key();
+                    pushFollow(FOLLOW_not_key_in_compound_operator3039);
+                    not_key250=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key141.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator1841);
-                    in_key142=in_key();
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key250.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator3041);
+                    in_key251=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key142.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key251.getTree(), root_0);
 
                     }
                     break;
 
             }
 
-            LEFT_PAREN143=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator1846); if (failed) return retval;
-            pushFollow(FOLLOW_expression_value_in_compound_operator1849);
-            expression_value144=expression_value();
+            LEFT_PAREN252=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3046); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3049);
+            expression_value253=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value144.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:305:63: ( COMMA expression_value )*
-            loop46:
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value253.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:63: ( COMMA expression_value )*
+            loop82:
             do {
-                int alt46=2;
-                int LA46_0 = input.LA(1);
+                int alt82=2;
+                int LA82_0 = input.LA(1);
 
-                if ( (LA46_0==COMMA) ) {
-                    alt46=1;
+                if ( (LA82_0==COMMA) ) {
+                    alt82=1;
                 }
 
 
-                switch (alt46) {
+                switch (alt82) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:305:65: COMMA expression_value
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:543:65: COMMA expression_value
             	    {
-            	    COMMA145=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator1853); if (failed) return retval;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator1856);
-            	    expression_value146=expression_value();
+            	    COMMA254=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3053); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3056);
+            	    expression_value255=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value146.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value255.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop46;
+            	    break loop82;
                 }
             } while (true);
 
-            RIGHT_PAREN147=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator1861); if (failed) return retval;
+            RIGHT_PAREN256=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3061); if (failed) return retval;
 
             }
 
@@ -5790,89 +9962,89 @@
     };
 
     // $ANTLR start expression_value
-    // /Users/porcelli/Desktop/testes/NewDRL.g:308:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:546: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_path148 = null;
+        accessor_path_return accessor_path257 = null;
 
-        literal_constraint_return literal_constraint149 = null;
+        literal_constraint_return literal_constraint258 = null;
 
-        paren_chunk_return paren_chunk150 = null;
+        paren_chunk_return paren_chunk259 = null;
 
 
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:309:2: ( accessor_path | literal_constraint | paren_chunk )
-            int alt47=3;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:547:2: ( accessor_path | literal_constraint | paren_chunk )
+            int alt83=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt47=1;
+                alt83=1;
                 }
                 break;
             case STRING:
+            case BOOL:
             case INT:
             case FLOAT:
-            case BOOL:
             case NULL:
                 {
-                alt47=2;
+                alt83=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt47=3;
+                alt83=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("308:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 47, 0, input);
+                    new NoViableAltException("546:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 83, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt47) {
+            switch (alt83) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:309:4: accessor_path
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:547:4: accessor_path
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_accessor_path_in_expression_value1873);
-                    accessor_path148=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3073);
+                    accessor_path257=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path148.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path257.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:310:4: literal_constraint
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:548:4: literal_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value1878);
-                    literal_constraint149=literal_constraint();
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3078);
+                    literal_constraint258=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint149.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint258.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:311:4: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:549:4: paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value1884);
-                    paren_chunk150=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3084);
+                    paren_chunk259=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk150.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk259.getTree());
 
                     }
                     break;
@@ -5901,27 +10073,27 @@
     };
 
     // $ANTLR start literal_constraint
-    // /Users/porcelli/Desktop/testes/NewDRL.g:314:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:552: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 set151=null;
+        Token set260=null;
 
-        Object set151_tree=null;
+        Object set260_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:315:2: ( STRING | INT | FLOAT | BOOL | NULL )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:553:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:
             {
             root_0 = (Object)adaptor.nil();
 
-            set151=(Token)input.LT(1);
-            if ( (input.LA(1)>=STRING && input.LA(1)<=NULL) ) {
+            set260=(Token)input.LT(1);
+            if ( input.LA(1)==STRING||(input.LA(1)>=BOOL && input.LA(1)<=INT)||(input.LA(1)>=FLOAT && input.LA(1)<=NULL) ) {
                 input.consume();
-                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set151));
+                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set260));
                 errorRecovery=false;failed=false;
             }
             else {
@@ -5951,110 +10123,103 @@
     }
     // $ANTLR end literal_constraint
 
-    public static class qualified_id_return extends ParserRuleReturnScope {
+    public static class data_type_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
-    // $ANTLR start qualified_id
-    // /Users/porcelli/Desktop/testes/NewDRL.g:322:1: qualified_id : ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )* -> ^( VT_QUALIFIED_ID ( ID )+ ) ;
-    public final qualified_id_return qualified_id() throws RecognitionException {
-        qualified_id_return retval = new qualified_id_return();
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:560:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final data_type_return data_type() throws RecognitionException {
+        data_type_return retval = new data_type_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID152=null;
-        Token DOT153=null;
-        Token ID154=null;
-        Token LEFT_SQUARE155=null;
-        Token RIGHT_SQUARE156=null;
+        Token ID261=null;
+        Token DOT262=null;
+        Token ID263=null;
+        dimension_definition_return dimension_definition264 = null;
 
-        Object ID152_tree=null;
-        Object DOT153_tree=null;
-        Object ID154_tree=null;
-        Object LEFT_SQUARE155_tree=null;
-        Object RIGHT_SQUARE156_tree=null;
-        RewriteRuleTokenStream stream_LEFT_SQUARE=new RewriteRuleTokenStream(adaptor,"token LEFT_SQUARE");
-        RewriteRuleTokenStream stream_RIGHT_SQUARE=new RewriteRuleTokenStream(adaptor,"token RIGHT_SQUARE");
+
+        Object ID261_tree=null;
+        Object DOT262_tree=null;
+        Object ID263_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
-
+        RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:323:2: ( ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )* -> ^( VT_QUALIFIED_ID ( ID )+ ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:323:4: ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:561:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:561:4: ID ( DOT ID )* ( dimension_definition )*
             {
-            ID152=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_qualified_id1926); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID152);
+            ID261=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_data_type3126); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID261);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:323:7: ( DOT ID )*
-            loop48:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:561:7: ( DOT ID )*
+            loop84:
             do {
-                int alt48=2;
-                int LA48_0 = input.LA(1);
+                int alt84=2;
+                int LA84_0 = input.LA(1);
 
-                if ( (LA48_0==DOT) ) {
-                    alt48=1;
+                if ( (LA84_0==DOT) ) {
+                    alt84=1;
                 }
 
 
-                switch (alt48) {
+                switch (alt84) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:323:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:561:9: DOT ID
             	    {
-            	    DOT153=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_qualified_id1930); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT153);
+            	    DOT262=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3130); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT262);
 
-            	    ID154=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_qualified_id1932); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID154);
+            	    ID263=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type3132); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID263);
 
 
             	    }
             	    break;
 
             	default :
-            	    break loop48;
+            	    break loop84;
                 }
             } while (true);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:323:19: ( LEFT_SQUARE RIGHT_SQUARE )*
-            loop49:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:561:19: ( dimension_definition )*
+            loop85:
             do {
-                int alt49=2;
-                int LA49_0 = input.LA(1);
+                int alt85=2;
+                int LA85_0 = input.LA(1);
 
-                if ( (LA49_0==LEFT_SQUARE) ) {
-                    alt49=1;
+                if ( (LA85_0==LEFT_SQUARE) ) {
+                    alt85=1;
                 }
 
 
-                switch (alt49) {
+                switch (alt85) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:323:21: LEFT_SQUARE RIGHT_SQUARE
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:561:19: dimension_definition
             	    {
-            	    LEFT_SQUARE155=(Token)input.LT(1);
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_qualified_id1939); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_LEFT_SQUARE.add(LEFT_SQUARE155);
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3137);
+            	    dimension_definition264=dimension_definition();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition264.getTree());
 
-            	    RIGHT_SQUARE156=(Token)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_qualified_id1941); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_RIGHT_SQUARE.add(RIGHT_SQUARE156);
-
-
             	    }
             	    break;
 
             	default :
-            	    break loop49;
+            	    break loop85;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: ID
+            // elements: ID, dimension_definition
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6064,12 +10229,12 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 324:2: -> ^( VT_QUALIFIED_ID ( ID )+ )
+            // 562:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:324:5: ^( VT_QUALIFIED_ID ( ID )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:562:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
-                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_QUALIFIED_ID, "VT_QUALIFIED_ID"), root_1);
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_DATA_TYPE, "VT_DATA_TYPE"), root_1);
 
                 if ( !(stream_ID.hasNext()) ) {
                     throw new RewriteEarlyExitException();
@@ -6079,7 +10244,13 @@
 
                 }
                 stream_ID.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:562:26: ( dimension_definition )*
+                while ( stream_dimension_definition.hasNext() ) {
+                    adaptor.addChild(root_1, stream_dimension_definition.next());
 
+                }
+                stream_dimension_definition.reset();
+
                 adaptor.addChild(root_0, root_1);
                 }
 
@@ -6104,69 +10275,126 @@
         }
         return retval;
     }
-    // $ANTLR end qualified_id
+    // $ANTLR end data_type
 
+    public static class dimension_definition_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start dimension_definition
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:565: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_SQUARE265=null;
+        Token RIGHT_SQUARE266=null;
+
+        Object LEFT_SQUARE265_tree=null;
+        Object RIGHT_SQUARE266_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:566:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:566:4: LEFT_SQUARE RIGHT_SQUARE
+            {
+            root_0 = (Object)adaptor.nil();
+
+            LEFT_SQUARE265=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3164); if (failed) return retval;
+            if ( backtracking==0 ) {
+            LEFT_SQUARE265_tree = (Object)adaptor.create(LEFT_SQUARE265);
+            adaptor.addChild(root_0, LEFT_SQUARE265_tree);
+            }
+            RIGHT_SQUARE266=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3166); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_SQUARE266_tree = (Object)adaptor.create(RIGHT_SQUARE266);
+            adaptor.addChild(root_0, RIGHT_SQUARE266_tree);
+            }
+
+            }
+
+            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 dimension_definition
+
     public static class accessor_path_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start accessor_path
-    // /Users/porcelli/Desktop/testes/NewDRL.g:327:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:569: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 DOT158=null;
-        accessor_element_return accessor_element157 = null;
+        Token DOT268=null;
+        accessor_element_return accessor_element267 = null;
 
-        accessor_element_return accessor_element159 = null;
+        accessor_element_return accessor_element269 = null;
 
 
-        Object DOT158_tree=null;
+        Object DOT268_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_accessor_element=new RewriteRuleSubtreeStream(adaptor,"rule accessor_element");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:328:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:328:4: accessor_element ( DOT accessor_element )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:570:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:570:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path1966);
-            accessor_element157=accessor_element();
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3177);
+            accessor_element267=accessor_element();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accessor_element.add(accessor_element157.getTree());
-            // /Users/porcelli/Desktop/testes/NewDRL.g:328:21: ( DOT accessor_element )*
-            loop50:
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element267.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:570:21: ( DOT accessor_element )*
+            loop86:
             do {
-                int alt50=2;
-                int LA50_0 = input.LA(1);
+                int alt86=2;
+                int LA86_0 = input.LA(1);
 
-                if ( (LA50_0==DOT) ) {
-                    alt50=1;
+                if ( (LA86_0==DOT) ) {
+                    alt86=1;
                 }
 
 
-                switch (alt50) {
+                switch (alt86) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:328:23: DOT accessor_element
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:570:23: DOT accessor_element
             	    {
-            	    DOT158=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path1970); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT158);
+            	    DOT268=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3181); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT268);
 
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path1972);
-            	    accessor_element159=accessor_element();
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3183);
+            	    accessor_element269=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element159.getTree());
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element269.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop50;
+            	    break loop86;
                 }
             } while (true);
 
@@ -6182,9 +10410,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 329:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 571:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:329:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:571: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);
@@ -6230,54 +10458,54 @@
     };
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Desktop/testes/NewDRL.g:332:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:574: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 ID160=null;
-        square_chunk_return square_chunk161 = null;
+        Token ID270=null;
+        square_chunk_return square_chunk271 = null;
 
 
-        Object ID160_tree=null;
+        Object ID270_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:333:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:333:4: ID ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:575:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:575:4: ID ( square_chunk )*
             {
-            ID160=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element1996); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID160);
+            ID270=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element3207); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID270);
 
-            // /Users/porcelli/Desktop/testes/NewDRL.g:333:7: ( square_chunk )*
-            loop51:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:575:7: ( square_chunk )*
+            loop87:
             do {
-                int alt51=2;
-                int LA51_0 = input.LA(1);
+                int alt87=2;
+                int LA87_0 = input.LA(1);
 
-                if ( (LA51_0==LEFT_SQUARE) ) {
-                    alt51=1;
+                if ( (LA87_0==LEFT_SQUARE) ) {
+                    alt87=1;
                 }
 
 
-                switch (alt51) {
+                switch (alt87) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:333:7: square_chunk
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:575:7: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element1998);
-            	    square_chunk161=square_chunk();
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3209);
+            	    square_chunk271=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk161.getTree());
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk271.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop51;
+            	    break loop87;
                 }
             } while (true);
 
@@ -6293,15 +10521,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 334:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 576:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // /Users/porcelli/Desktop/testes/NewDRL.g:334:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:576:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_ELEMENT, "VT_ACCESSOR_ELEMENT"), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Desktop/testes/NewDRL.g:334:30: ( square_chunk )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:576:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -6334,104 +10562,181 @@
     }
     // $ANTLR end accessor_element
 
-    public static class name_return extends ParserRuleReturnScope {
+    public static class rhs_chunk_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
-    // $ANTLR start name
-    // /Users/porcelli/Desktop/testes/NewDRL.g:337:1: name : (value= ID -> VT_NAME[$value] | value= STRING -> VT_NAME[$value] );
-    public final name_return name() throws RecognitionException {
-        name_return retval = new name_return();
+    // $ANTLR start rhs_chunk
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:579: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);
 
         Object root_0 = null;
 
-        Token value=null;
+        rhs_chunk_data_return rc = null;
 
-        Object value_tree=null;
-        RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
-        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
+        RewriteRuleSubtreeStream stream_rhs_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk_data");
+
+        	String text = "";
+
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:338:2: (value= ID -> VT_NAME[$value] | value= STRING -> VT_NAME[$value] )
-            int alt52=2;
-            int LA52_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:582:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:582:5: rc= rhs_chunk_data
+            {
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3238);
+            rc=rhs_chunk_data();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rhs_chunk_data.add(rc.getTree());
+            if ( backtracking==0 ) {
+              text = input.toString(rc.start,rc.stop);
+            }
 
-            if ( (LA52_0==ID) ) {
-                alt52=1;
+            // 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();
+            // 583:2: -> VT_RHS_CHUNK[$rc.start,text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
+
             }
-            else if ( (LA52_0==STRING) ) {
-                alt52=2;
+
             }
-            else {
-                if (backtracking>0) {failed=true; return retval;}
-                NoViableAltException nvae =
-                    new NoViableAltException("337:1: name : (value= ID -> VT_NAME[$value] | value= STRING -> VT_NAME[$value] );", 52, 0, input);
 
-                throw nvae;
             }
-            switch (alt52) {
-                case 1 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:338:5: value= ID
-                    {
-                    value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_name2025); if (failed) return retval;
-                    if ( backtracking==0 ) stream_ID.add(value);
 
+            retval.stop = input.LT(-1);
 
-                    // 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);
+            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 rhs_chunk
 
-                    root_0 = (Object)adaptor.nil();
-                    // 338:14: -> VT_NAME[$value]
-                    {
-                        adaptor.addChild(root_0, adaptor.create(VT_NAME, value));
+    public static class rhs_chunk_data_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
 
-                    }
+    // $ANTLR start rhs_chunk_data
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:586:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    public final rhs_chunk_data_return rhs_chunk_data() throws RecognitionException {
+        rhs_chunk_data_return retval = new rhs_chunk_data_return();
+        retval.start = input.LT(1);
 
-                    }
+        Object root_0 = null;
 
-                    }
-                    break;
-                case 2 :
-                    // /Users/porcelli/Desktop/testes/NewDRL.g:339:5: value= STRING
-                    {
-                    value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_name2038); if (failed) return retval;
-                    if ( backtracking==0 ) stream_STRING.add(value);
+        Token THEN272=null;
+        Token set273=null;
+        Token END274=null;
+        Token SEMICOLON275=null;
 
+        Object THEN272_tree=null;
+        Object set273_tree=null;
+        Object END274_tree=null;
+        Object SEMICOLON275_tree=null;
 
-                    // 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);
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:587:2: ( THEN (~ END )* END ( SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:587:4: THEN (~ END )* END ( SEMICOLON )?
+            {
+            root_0 = (Object)adaptor.nil();
 
-                    root_0 = (Object)adaptor.nil();
-                    // 339:18: -> VT_NAME[$value]
-                    {
-                        adaptor.addChild(root_0, adaptor.create(VT_NAME, value));
+            THEN272=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3257); if (failed) return retval;
+            if ( backtracking==0 ) {
+            THEN272_tree = (Object)adaptor.create(THEN272);
+            adaptor.addChild(root_0, THEN272_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:587:9: (~ END )*
+            loop88:
+            do {
+                int alt88=2;
+                int LA88_0 = input.LA(1);
 
-                    }
+                if ( ((LA88_0>=VT_COMPILATION_UNIT && LA88_0<=DOT_STAR)||(LA88_0>=STRING && LA88_0<=MULTI_LINE_COMMENT)) ) {
+                    alt88=1;
+                }
 
+
+                switch (alt88) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:587:11: ~ END
+            	    {
+            	    set273=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=DOT_STAR)||(input.LA(1)>=STRING && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set273));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3261);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop88;
+                }
+            } while (true);
+
+            END274=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3267); if (failed) return retval;
+            if ( backtracking==0 ) {
+            END274_tree = (Object)adaptor.create(END274);
+            adaptor.addChild(root_0, END274_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:587:23: ( SEMICOLON )?
+            int alt89=2;
+            int LA89_0 = input.LA(1);
+
+            if ( (LA89_0==SEMICOLON) ) {
+                alt89=1;
+            }
+            switch (alt89) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:587:23: SEMICOLON
+                    {
+                    SEMICOLON275=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3269); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    SEMICOLON275_tree = (Object)adaptor.create(SEMICOLON275);
+                    adaptor.addChild(root_0, SEMICOLON275_tree);
                     }
 
                     }
                     break;
 
             }
+
+
+            }
+
             retval.stop = input.LT(-1);
 
             if ( backtracking==0 ) {
@@ -6447,7 +10752,7 @@
         }
         return retval;
     }
-    // $ANTLR end name
+    // $ANTLR end rhs_chunk_data
 
     public static class curly_chunk_return extends ParserRuleReturnScope {
         Object tree;
@@ -6455,7 +10760,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Desktop/testes/NewDRL.g:342:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:590:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
     public final curly_chunk_return curly_chunk() throws RecognitionException {
         curly_chunk_return retval = new curly_chunk_return();
         retval.start = input.LT(1);
@@ -6470,10 +10775,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:345:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:345:5: cc= curly_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:593:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:593:5: cc= curly_chunk_data
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk2059);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3286);
             cc=curly_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -6493,7 +10798,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 346:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 594:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -6526,91 +10831,91 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // /Users/porcelli/Desktop/testes/NewDRL.g:349:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:597:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
     public final curly_chunk_data_return curly_chunk_data() throws RecognitionException {
         curly_chunk_data_return retval = new curly_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_CURLY162=null;
-        Token set163=null;
-        Token RIGHT_CURLY165=null;
-        curly_chunk_data_return curly_chunk_data164 = null;
+        Token LEFT_CURLY276=null;
+        Token set277=null;
+        Token RIGHT_CURLY279=null;
+        curly_chunk_data_return curly_chunk_data278 = null;
 
 
-        Object LEFT_CURLY162_tree=null;
-        Object set163_tree=null;
-        Object RIGHT_CURLY165_tree=null;
+        Object LEFT_CURLY276_tree=null;
+        Object set277_tree=null;
+        Object RIGHT_CURLY279_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:350:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:350:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:598:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:598:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_CURLY162=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data2078); if (failed) return retval;
+            LEFT_CURLY276=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3305); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_CURLY162_tree = (Object)adaptor.create(LEFT_CURLY162);
-            adaptor.addChild(root_0, LEFT_CURLY162_tree);
+            LEFT_CURLY276_tree = (Object)adaptor.create(LEFT_CURLY276);
+            adaptor.addChild(root_0, LEFT_CURLY276_tree);
             }
-            // /Users/porcelli/Desktop/testes/NewDRL.g:350:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
-            loop53:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:598:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            loop90:
             do {
-                int alt53=3;
-                int LA53_0 = input.LA(1);
+                int alt90=3;
+                int LA90_0 = input.LA(1);
 
-                if ( ((LA53_0>=VT_FACT && LA53_0<=RIGHT_SQUARE)||(LA53_0>=MISC && LA53_0<=MULTI_LINE_COMMENT)) ) {
-                    alt53=1;
+                if ( ((LA90_0>=VT_COMPILATION_UNIT && LA90_0<=THEN)||(LA90_0>=MISC && LA90_0<=MULTI_LINE_COMMENT)) ) {
+                    alt90=1;
                 }
-                else if ( (LA53_0==LEFT_CURLY) ) {
-                    alt53=2;
+                else if ( (LA90_0==LEFT_CURLY) ) {
+                    alt90=2;
                 }
 
 
-                switch (alt53) {
+                switch (alt90) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:350:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:598:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    set163=(Token)input.LT(1);
-            	    if ( (input.LA(1)>=VT_FACT && input.LA(1)<=RIGHT_SQUARE)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	    set277=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=THEN)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set163));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set277));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data2081);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3308);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:350:49: curly_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:598:49: curly_chunk_data
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data2095);
-            	    curly_chunk_data164=curly_chunk_data();
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3322);
+            	    curly_chunk_data278=curly_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data164.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data278.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop53;
+            	    break loop90;
                 }
             } while (true);
 
-            RIGHT_CURLY165=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data2100); if (failed) return retval;
+            RIGHT_CURLY279=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3327); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_CURLY165_tree = (Object)adaptor.create(RIGHT_CURLY165);
-            adaptor.addChild(root_0, RIGHT_CURLY165_tree);
+            RIGHT_CURLY279_tree = (Object)adaptor.create(RIGHT_CURLY279);
+            adaptor.addChild(root_0, RIGHT_CURLY279_tree);
             }
 
             }
@@ -6638,7 +10943,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // /Users/porcelli/Desktop/testes/NewDRL.g:353:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:601:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
     public final paren_chunk_return paren_chunk() throws RecognitionException {
         paren_chunk_return retval = new paren_chunk_return();
         retval.start = input.LT(1);
@@ -6653,10 +10958,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:356:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:356:5: pc= paren_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:604:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:604:5: pc= paren_chunk_data
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk2117);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3343);
             pc=paren_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -6676,7 +10981,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 357:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 605:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -6709,91 +11014,91 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // /Users/porcelli/Desktop/testes/NewDRL.g:360:1: paren_chunk_data : value= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:608:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
     public final paren_chunk_data_return paren_chunk_data() throws RecognitionException {
         paren_chunk_data_return retval = new paren_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token value=null;
-        Token set166=null;
-        Token RIGHT_PAREN168=null;
-        paren_chunk_data_return paren_chunk_data167 = null;
+        Token LEFT_PAREN280=null;
+        Token set281=null;
+        Token RIGHT_PAREN283=null;
+        paren_chunk_data_return paren_chunk_data282 = null;
 
 
-        Object value_tree=null;
-        Object set166_tree=null;
-        Object RIGHT_PAREN168_tree=null;
+        Object LEFT_PAREN280_tree=null;
+        Object set281_tree=null;
+        Object RIGHT_PAREN283_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:361:2: (value= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:361:4: value= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:609:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:609:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            value=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data2139); if (failed) return retval;
+            LEFT_PAREN280=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3363); if (failed) return retval;
             if ( backtracking==0 ) {
-            value_tree = (Object)adaptor.create(value);
-            adaptor.addChild(root_0, value_tree);
+            LEFT_PAREN280_tree = (Object)adaptor.create(LEFT_PAREN280);
+            adaptor.addChild(root_0, LEFT_PAREN280_tree);
             }
-            // /Users/porcelli/Desktop/testes/NewDRL.g:361:21: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
-            loop54:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:609:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            loop91:
             do {
-                int alt54=3;
-                int LA54_0 = input.LA(1);
+                int alt91=3;
+                int LA91_0 = input.LA(1);
 
-                if ( ((LA54_0>=VT_FACT && LA54_0<=VK_COLLECT)||(LA54_0>=DOUBLE_PIPE && LA54_0<=MULTI_LINE_COMMENT)) ) {
-                    alt54=1;
+                if ( ((LA91_0>=VT_COMPILATION_UNIT && LA91_0<=STRING)||LA91_0==COMMA||(LA91_0>=COLON && LA91_0<=MULTI_LINE_COMMENT)) ) {
+                    alt91=1;
                 }
-                else if ( (LA54_0==LEFT_PAREN) ) {
-                    alt54=2;
+                else if ( (LA91_0==LEFT_PAREN) ) {
+                    alt91=2;
                 }
 
 
-                switch (alt54) {
+                switch (alt91) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:361:22: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:609:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    set166=(Token)input.LT(1);
-            	    if ( (input.LA(1)>=VT_FACT && input.LA(1)<=VK_COLLECT)||(input.LA(1)>=DOUBLE_PIPE && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	    set281=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=STRING)||input.LA(1)==COMMA||(input.LA(1)>=COLON && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set166));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set281));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data2142);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3366);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:361:55: paren_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:609:49: paren_chunk_data
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data2156);
-            	    paren_chunk_data167=paren_chunk_data();
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3380);
+            	    paren_chunk_data282=paren_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data167.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data282.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop54;
+            	    break loop91;
                 }
             } while (true);
 
-            RIGHT_PAREN168=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data2161); if (failed) return retval;
+            RIGHT_PAREN283=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3385); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN168_tree = (Object)adaptor.create(RIGHT_PAREN168);
-            adaptor.addChild(root_0, RIGHT_PAREN168_tree);
+            RIGHT_PAREN283_tree = (Object)adaptor.create(RIGHT_PAREN283);
+            adaptor.addChild(root_0, RIGHT_PAREN283_tree);
             }
 
             }
@@ -6821,7 +11126,7 @@
     };
 
     // $ANTLR start square_chunk
-    // /Users/porcelli/Desktop/testes/NewDRL.g:364:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:612:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
     public final square_chunk_return square_chunk() throws RecognitionException {
         square_chunk_return retval = new square_chunk_return();
         retval.start = input.LT(1);
@@ -6836,10 +11141,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:367:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:367:5: sc= square_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:615:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:615:5: sc= square_chunk_data
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk2178);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3402);
             sc=square_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -6859,7 +11164,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 368:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 616:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -6892,91 +11197,91 @@
     };
 
     // $ANTLR start square_chunk_data
-    // /Users/porcelli/Desktop/testes/NewDRL.g:371:1: square_chunk_data : value= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:619:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
     public final square_chunk_data_return square_chunk_data() throws RecognitionException {
         square_chunk_data_return retval = new square_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token value=null;
-        Token set169=null;
-        Token RIGHT_SQUARE171=null;
-        square_chunk_data_return square_chunk_data170 = null;
+        Token LEFT_SQUARE284=null;
+        Token set285=null;
+        Token RIGHT_SQUARE287=null;
+        square_chunk_data_return square_chunk_data286 = null;
 
 
-        Object value_tree=null;
-        Object set169_tree=null;
-        Object RIGHT_SQUARE171_tree=null;
+        Object LEFT_SQUARE284_tree=null;
+        Object set285_tree=null;
+        Object RIGHT_SQUARE287_tree=null;
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:372:2: (value= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:372:4: value= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:620:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:620:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            value=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data2199); if (failed) return retval;
+            LEFT_SQUARE284=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3421); if (failed) return retval;
             if ( backtracking==0 ) {
-            value_tree = (Object)adaptor.create(value);
-            adaptor.addChild(root_0, value_tree);
+            LEFT_SQUARE284_tree = (Object)adaptor.create(LEFT_SQUARE284);
+            adaptor.addChild(root_0, LEFT_SQUARE284_tree);
             }
-            // /Users/porcelli/Desktop/testes/NewDRL.g:372:22: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
-            loop55:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:620:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            loop92:
             do {
-                int alt55=3;
-                int LA55_0 = input.LA(1);
+                int alt92=3;
+                int LA92_0 = input.LA(1);
 
-                if ( ((LA55_0>=VT_FACT && LA55_0<=NULL)||(LA55_0>=LEFT_CURLY && LA55_0<=MULTI_LINE_COMMENT)) ) {
-                    alt55=1;
+                if ( ((LA92_0>=VT_COMPILATION_UNIT && LA92_0<=NULL)||(LA92_0>=THEN && LA92_0<=MULTI_LINE_COMMENT)) ) {
+                    alt92=1;
                 }
-                else if ( (LA55_0==LEFT_SQUARE) ) {
-                    alt55=2;
+                else if ( (LA92_0==LEFT_SQUARE) ) {
+                    alt92=2;
                 }
 
 
-                switch (alt55) {
+                switch (alt92) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:372:23: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:620:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    set169=(Token)input.LT(1);
-            	    if ( (input.LA(1)>=VT_FACT && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_CURLY && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	    set285=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set169));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set285));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data2202);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3424);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Desktop/testes/NewDRL.g:372:58: square_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:620:52: square_chunk_data
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data2216);
-            	    square_chunk_data170=square_chunk_data();
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3438);
+            	    square_chunk_data286=square_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data170.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data286.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop55;
+            	    break loop92;
                 }
             } while (true);
 
-            RIGHT_SQUARE171=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data2221); if (failed) return retval;
+            RIGHT_SQUARE287=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3443); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE171_tree = (Object)adaptor.create(RIGHT_SQUARE171);
-            adaptor.addChild(root_0, RIGHT_SQUARE171_tree);
+            RIGHT_SQUARE287_tree = (Object)adaptor.create(RIGHT_SQUARE287);
+            adaptor.addChild(root_0, RIGHT_SQUARE287_tree);
             }
 
             }
@@ -6998,13 +11303,1695 @@
     }
     // $ANTLR end square_chunk_data
 
+    public static class date_effective_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start date_effective_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:624:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    public final date_effective_key_return date_effective_key() throws RecognitionException {
+        date_effective_key_return retval = new date_effective_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID288=null;
+        Token MISC289=null;
+        Token ID290=null;
+
+        Object ID288_tree=null;
+        Object MISC289_tree=null;
+        Object ID290_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:627:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:627:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "date_effective_key", "(validateIdentifierKey(\"date\") && validateLT(2, \"-\") && validateLT(3, \"effective\"))");
+            }
+            ID288=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3462); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID288);
+
+            MISC289=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key3464); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC289);
+
+            ID290=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3466); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID290);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 628:2: -> VK_DATE_EFFECTIVE[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 date_effective_key
+
+    public static class date_expires_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start date_expires_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:631:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
+    public final date_expires_key_return date_expires_key() throws RecognitionException {
+        date_expires_key_return retval = new date_expires_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID291=null;
+        Token MISC292=null;
+        Token ID293=null;
+
+        Object ID291_tree=null;
+        Object MISC292_tree=null;
+        Object ID293_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:634:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:634:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "date_expires_key", "(validateIdentifierKey(\"date\") && validateLT(2, \"-\") && validateLT(3, \"expires\"))");
+            }
+            ID291=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3492); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID291);
+
+            MISC292=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key3494); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC292);
+
+            ID293=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3496); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID293);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 635:2: -> VK_DATE_EXPIRES[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 date_expires_key
+
+    public static class lock_on_active_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lock_on_active_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:638:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    public final lock_on_active_key_return lock_on_active_key() throws RecognitionException {
+        lock_on_active_key_return retval = new lock_on_active_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID294=null;
+        Token MISC295=null;
+        Token ID296=null;
+        Token MISC297=null;
+        Token ID298=null;
+
+        Object ID294_tree=null;
+        Object MISC295_tree=null;
+        Object ID296_tree=null;
+        Object MISC297_tree=null;
+        Object ID298_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:641:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:641:5: {...}? => ID MISC ID MISC ID
+            {
+            if ( !((validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "lock_on_active_key", "(validateIdentifierKey(\"lock\") && validateLT(2, \"-\") && validateLT(3, \"on\") && validateLT(4, \"-\") && validateLT(5, \"active\"))");
+            }
+            ID294=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3522); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID294);
+
+            MISC295=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3524); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC295);
+
+            ID296=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3526); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID296);
+
+            MISC297=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3528); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC297);
+
+            ID298=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3530); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID298);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 642:2: -> VK_LOCK_ON_ACTIVE[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 lock_on_active_key
+
+    public static class no_loop_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start no_loop_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:645:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
+    public final no_loop_key_return no_loop_key() throws RecognitionException {
+        no_loop_key_return retval = new no_loop_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID299=null;
+        Token MISC300=null;
+        Token ID301=null;
+
+        Object ID299_tree=null;
+        Object MISC300_tree=null;
+        Object ID301_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:648:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:648:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "no_loop_key", "(validateIdentifierKey(\"no\") && validateLT(2, \"-\") && validateLT(3, \"loop\"))");
+            }
+            ID299=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3556); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID299);
+
+            MISC300=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key3558); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC300);
+
+            ID301=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3560); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID301);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 649:2: -> VK_NO_LOOP[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 no_loop_key
+
+    public static class auto_focus_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start auto_focus_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:652:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
+    public final auto_focus_key_return auto_focus_key() throws RecognitionException {
+        auto_focus_key_return retval = new auto_focus_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID302=null;
+        Token MISC303=null;
+        Token ID304=null;
+
+        Object ID302_tree=null;
+        Object MISC303_tree=null;
+        Object ID304_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:655:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:655:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "auto_focus_key", "(validateIdentifierKey(\"auto\") && validateLT(2, \"-\") && validateLT(3, \"focus\"))");
+            }
+            ID302=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3586); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID302);
+
+            MISC303=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3588); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC303);
+
+            ID304=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3590); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID304);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 656:2: -> VK_AUTO_FOCUS[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 auto_focus_key
+
+    public static class activation_group_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start activation_group_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:659:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    public final activation_group_key_return activation_group_key() throws RecognitionException {
+        activation_group_key_return retval = new activation_group_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID305=null;
+        Token MISC306=null;
+        Token ID307=null;
+
+        Object ID305_tree=null;
+        Object MISC306_tree=null;
+        Object ID307_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:662:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:662:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "activation_group_key", "(validateIdentifierKey(\"activation\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
+            }
+            ID305=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3616); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID305);
+
+            MISC306=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key3618); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC306);
+
+            ID307=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3620); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID307);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 663:2: -> VK_ACTIVATION_GROUP[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 activation_group_key
+
+    public static class agenda_group_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start agenda_group_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:666:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
+    public final agenda_group_key_return agenda_group_key() throws RecognitionException {
+        agenda_group_key_return retval = new agenda_group_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID308=null;
+        Token MISC309=null;
+        Token ID310=null;
+
+        Object ID308_tree=null;
+        Object MISC309_tree=null;
+        Object ID310_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:669:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:669:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "agenda_group_key", "(validateIdentifierKey(\"agenda\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
+            }
+            ID308=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3646); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID308);
+
+            MISC309=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3648); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC309);
+
+            ID310=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3650); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID310);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 670:2: -> VK_AGENDA_GROUP[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 agenda_group_key
+
+    public static class ruleflow_group_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start ruleflow_group_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:673:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    public final ruleflow_group_key_return ruleflow_group_key() throws RecognitionException {
+        ruleflow_group_key_return retval = new ruleflow_group_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID311=null;
+        Token MISC312=null;
+        Token ID313=null;
+
+        Object ID311_tree=null;
+        Object MISC312_tree=null;
+        Object ID313_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:676:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:676:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "ruleflow_group_key", "(validateIdentifierKey(\"ruleflow\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
+            }
+            ID311=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3676); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID311);
+
+            MISC312=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3678); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC312);
+
+            ID313=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3680); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID313);
+
+            if ( backtracking==0 ) {
+              text = input.toString(retval.start,input.LT(-1));
+            }
+
+            // 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();
+            // 677:2: -> VK_RULEFLOW_GROUP[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
+
+            }
+
+            }
+
+            }
+
+            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 ruleflow_group_key
+
+    public static class duration_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start duration_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:680: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:681:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:681:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("duration"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "duration_key", "(validateIdentifierKey(\"duration\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_duration_key3705); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 681:52: -> VK_DURATION[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_DURATION, 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 duration_key
+
+    public static class package_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start package_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:684: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:685:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:685:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("package"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "package_key", "(validateIdentifierKey(\"package\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_package_key3727); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 685:51: -> VK_PACKAGE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, 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 package_key
+
+    public static class import_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start import_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:688: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:689:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:689:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("import"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "import_key", "(validateIdentifierKey(\"import\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_import_key3749); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 689:50: -> VK_IMPORT[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_IMPORT, 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 import_key
+
+    public static class dialect_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start dialect_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:692: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:693:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:693:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("dialect"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "dialect_key", "(validateIdentifierKey(\"dialect\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_dialect_key3771); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 693:51: -> VK_DIALECT[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_DIALECT, 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 dialect_key
+
+    public static class salience_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start salience_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:696: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:697:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:697:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("salience"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "salience_key", "(validateIdentifierKey(\"salience\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_salience_key3793); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 697:52: -> VK_SALIENCE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, 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 salience_key
+
+    public static class enabled_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start enabled_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:700: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:701:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:701:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("enabled"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "enabled_key", "(validateIdentifierKey(\"enabled\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_enabled_key3815); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 701:51: -> VK_ENABLED[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_ENABLED, 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 enabled_key
+
+    public static class attributes_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start attributes_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:704: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:705:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:705:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("attributes"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "attributes_key", "(validateIdentifierKey(\"attributes\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_attributes_key3837); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 705:54: -> VK_ATTRIBUTES[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, 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 attributes_key
+
+    public static class when_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start when_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:708:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
+    public final when_key_return when_key() throws RecognitionException {
+        when_key_return retval = new when_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:709:2: ({...}? =>id= ID -> VK_WHEN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:709:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("when"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "when_key", "(validateIdentifierKey(\"when\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_when_key3859); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 709:48: -> VK_WHEN[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_WHEN, 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 when_key
+
+    public static class rule_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start rule_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:712: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:713:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:713:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("rule"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "rule_key", "(validateIdentifierKey(\"rule\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_rule_key3881); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 713:48: -> VK_RULE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_RULE, 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 rule_key
+
+    public static class template_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start template_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:716: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:717:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:717:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("template"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "template_key", "(validateIdentifierKey(\"template\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_template_key3903); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 717:52: -> VK_TEMPLATE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, 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 template_key
+
+    public static class query_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start query_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:720: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:721:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:721:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("query"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "query_key", "(validateIdentifierKey(\"query\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_query_key3925); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 721:49: -> VK_QUERY[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_QUERY, 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 query_key
+
+    public static class declare_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start declare_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:724: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:725:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:725:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("declare"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "declare_key", "(validateIdentifierKey(\"declare\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_declare_key3947); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 725:51: -> VK_DECLARE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_DECLARE, 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 declare_key
+
+    public static class function_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start function_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:728: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:729:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:729:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("function"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "function_key", "(validateIdentifierKey(\"function\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_function_key3969); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 729:52: -> VK_FUNCTION[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, 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 function_key
+
+    public static class global_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start global_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:732: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);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:733:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:733:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("global"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "global_key", "(validateIdentifierKey(\"global\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_global_key3991); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+
+            // 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();
+            // 733:50: -> VK_GLOBAL[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, 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 global_key
+
     public static class eval_key_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start eval_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:375:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:736: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);
@@ -7017,15 +13004,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:376:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:376:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:737:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:737:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("eval"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(\"eval\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_eval_key2238); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key4013); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7040,7 +13027,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 376:48: -> VK_EVAL[$id]
+            // 737:48: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -7073,7 +13060,7 @@
     };
 
     // $ANTLR start contains_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:379:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:740: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);
@@ -7086,15 +13073,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:380:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:380:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:741:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:741:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("contains"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(\"contains\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_contains_key2260); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key4035); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7109,7 +13096,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 380:52: -> VK_CONTAINS[$id]
+            // 741:52: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -7142,7 +13129,7 @@
     };
 
     // $ANTLR start matches_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:383:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:744: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);
@@ -7155,15 +13142,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:384:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:384:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:745:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:745:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("matches"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(\"matches\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_matches_key2282); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key4057); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7178,7 +13165,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 384:51: -> VK_MATCHES[$id]
+            // 745:51: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -7211,7 +13198,7 @@
     };
 
     // $ANTLR start excludes_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:387:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:748: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);
@@ -7224,15 +13211,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:388:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:388:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:749:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:749:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("excludes"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(\"excludes\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_excludes_key2304); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key4079); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7247,7 +13234,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 388:52: -> VK_EXCLUDES[$id]
+            // 749:52: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -7280,7 +13267,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:391:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:752: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);
@@ -7293,15 +13280,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:392:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:392:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:753:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:753:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("soundslike"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(\"soundslike\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_soundslike_key2326); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key4101); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7316,7 +13303,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 392:54: -> VK_SOUNDSLIKE[$id]
+            // 753:54: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -7349,7 +13336,7 @@
     };
 
     // $ANTLR start memberof_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:395:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:756: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);
@@ -7362,15 +13349,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:396:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:396:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:757:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:757:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("memberof"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(\"memberof\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_memberof_key2348); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key4123); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7385,7 +13372,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 396:52: -> VK_MEMBEROF[$id]
+            // 757:52: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -7418,7 +13405,7 @@
     };
 
     // $ANTLR start not_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:399:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:760: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);
@@ -7431,15 +13418,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:400:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:400:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:761:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:761:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("not"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(\"not\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_not_key2370); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key4145); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7454,7 +13441,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 400:47: -> VK_NOT[$id]
+            // 761:47: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -7487,7 +13474,7 @@
     };
 
     // $ANTLR start in_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:403:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:764: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);
@@ -7500,15 +13487,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:404:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:404:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:765:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:765:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("in"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(\"in\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_in_key2392); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key4167); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7523,7 +13510,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 404:46: -> VK_IN[$id]
+            // 765:46: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -7556,7 +13543,7 @@
     };
 
     // $ANTLR start or_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:407:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:768: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);
@@ -7569,15 +13556,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:408:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:408:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:769:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:769:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("or"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(\"or\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_or_key2414); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key4189); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7592,7 +13579,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 408:46: -> VK_OR[$id]
+            // 769:46: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -7625,7 +13612,7 @@
     };
 
     // $ANTLR start and_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:411:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:772: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);
@@ -7638,15 +13625,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:412:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:412:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:773:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:773:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("and"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(\"and\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_and_key2436); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key4211); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7661,7 +13648,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 412:47: -> VK_AND[$id]
+            // 773:47: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -7694,7 +13681,7 @@
     };
 
     // $ANTLR start exists_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:415:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:776: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);
@@ -7707,15 +13694,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:416:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:416:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:777:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:777:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("exists"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(\"exists\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_exists_key2458); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key4233); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7730,7 +13717,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 416:50: -> VK_EXISTS[$id]
+            // 777:50: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -7763,7 +13750,7 @@
     };
 
     // $ANTLR start forall_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:419:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:780: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);
@@ -7776,15 +13763,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:420:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:420:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:781:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:781:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("forall"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(\"forall\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_forall_key2480); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key4255); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7799,7 +13786,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 420:50: -> VK_FORALL[$id]
+            // 781:50: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -7832,7 +13819,7 @@
     };
 
     // $ANTLR start from_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:423:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:784:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
     public final from_key_return from_key() throws RecognitionException {
         from_key_return retval = new from_key_return();
         retval.start = input.LT(1);
@@ -7845,15 +13832,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:424:2: ({...}? =>id= ID -> VK_FROM[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:424:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:785:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:785:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("from"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(\"from\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_key2502); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_key4277); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -7868,7 +13855,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 424:48: -> VK_FROM[$id]
+            // 785:48: -> VK_FROM[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FROM, id));
 
@@ -7901,20 +13888,20 @@
     };
 
     // $ANTLR start entry_point_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:427:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:788:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
     public final entry_point_key_return entry_point_key() throws RecognitionException {
         entry_point_key_return retval = new entry_point_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID172=null;
-        Token MISC173=null;
-        Token ID174=null;
+        Token ID314=null;
+        Token MISC315=null;
+        Token ID316=null;
 
-        Object ID172_tree=null;
-        Object MISC173_tree=null;
-        Object ID174_tree=null;
+        Object ID314_tree=null;
+        Object MISC315_tree=null;
+        Object ID316_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -7922,24 +13909,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:430:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:430:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:791:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:791:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(\"entry\") && validateLT(2, \"-\") && validateLT(3, \"point\"))");
             }
-            ID172=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key2525); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID172);
+            ID314=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4300); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID314);
 
-            MISC173=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key2527); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC173);
+            MISC315=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4302); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC315);
 
-            ID174=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key2529); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID174);
+            ID316=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4304); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID316);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -7956,7 +13943,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 431:2: -> VK_ENTRY_POINT[$start, text]
+            // 792:2: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -7989,7 +13976,7 @@
     };
 
     // $ANTLR start accumulate_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:434:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:795:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
     public final accumulate_key_return accumulate_key() throws RecognitionException {
         accumulate_key_return retval = new accumulate_key_return();
         retval.start = input.LT(1);
@@ -8002,15 +13989,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:435:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:435:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:796:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:796:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("accumulate"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(\"accumulate\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_key2554); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_key4329); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -8025,7 +14012,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 435:54: -> VK_ACCUMULATE[$id]
+            // 796:54: -> VK_ACCUMULATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, id));
 
@@ -8058,7 +14045,7 @@
     };
 
     // $ANTLR start init_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:438:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:799:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
     public final init_key_return init_key() throws RecognitionException {
         init_key_return retval = new init_key_return();
         retval.start = input.LT(1);
@@ -8071,15 +14058,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:439:2: ({...}? =>id= ID -> VK_INIT[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:439:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:800:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:800:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("init"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(\"init\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_init_key2576); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_init_key4351); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -8094,7 +14081,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 439:48: -> VK_INIT[$id]
+            // 800:48: -> VK_INIT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_INIT, id));
 
@@ -8127,7 +14114,7 @@
     };
 
     // $ANTLR start action_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:442:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:803: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);
@@ -8140,15 +14127,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:443:2: ({...}? =>id= ID -> VK_ACTION[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:443:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:804:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:804:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("action"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(\"action\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_action_key2598); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key4373); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -8163,7 +14150,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 443:50: -> VK_ACTION[$id]
+            // 804:50: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -8196,7 +14183,7 @@
     };
 
     // $ANTLR start reverse_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:446:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:807: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);
@@ -8209,15 +14196,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:447:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:447:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:808:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:808:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("reverse"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(\"reverse\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_reverse_key2620); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key4395); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -8232,7 +14219,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 447:51: -> VK_REVERSE[$id]
+            // 808:51: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -8265,7 +14252,7 @@
     };
 
     // $ANTLR start result_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:450:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:811: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);
@@ -8278,15 +14265,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:451:2: ({...}? =>id= ID -> VK_RESULT[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:451:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:812:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:812:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("result"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(\"result\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_result_key2642); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key4417); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -8301,7 +14288,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 451:50: -> VK_RESULT[$id]
+            // 812:50: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -8334,7 +14321,7 @@
     };
 
     // $ANTLR start collect_key
-    // /Users/porcelli/Desktop/testes/NewDRL.g:454:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:815:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
     public final collect_key_return collect_key() throws RecognitionException {
         collect_key_return retval = new collect_key_return();
         retval.start = input.LT(1);
@@ -8347,15 +14334,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Desktop/testes/NewDRL.g:455:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
-            // /Users/porcelli/Desktop/testes/NewDRL.g:455:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:816:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:816:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("collect"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(\"collect\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_collect_key2664); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_collect_key4439); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -8370,7 +14357,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 455:51: -> VK_COLLECT[$id]
+            // 816:51: -> VK_COLLECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_COLLECT, id));
 
@@ -8399,11 +14386,11 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:86:5: ( LEFT_PAREN or_key )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:86:6: LEFT_PAREN or_key
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:320:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:320:6: LEFT_PAREN or_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred1256); if (failed) return ;
-        pushFollow(FOLLOW_or_key_in_synpred1258);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11431); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred11433);
         or_key();
         _fsp--;
         if (failed) return ;
@@ -8414,28 +14401,28 @@
 
     // $ANTLR start synpred2
     public final void synpred2_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:89:5: ( or_key | DOUBLE_PIPE )
-        int alt56=2;
-        int LA56_0 = input.LA(1);
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:5: ( or_key | DOUBLE_PIPE )
+        int alt93=2;
+        int LA93_0 = input.LA(1);
 
-        if ( (LA56_0==ID) && ((validateIdentifierKey("or")))) {
-            alt56=1;
+        if ( (LA93_0==ID) && ((validateIdentifierKey("or")))) {
+            alt93=1;
         }
-        else if ( (LA56_0==DOUBLE_PIPE) ) {
-            alt56=2;
+        else if ( (LA93_0==DOUBLE_PIPE) ) {
+            alt93=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("89:5: synpred2 : ( or_key | DOUBLE_PIPE );", 56, 0, input);
+                new NoViableAltException("323:5: synpred2 : ( or_key | DOUBLE_PIPE );", 93, 0, input);
 
             throw nvae;
         }
-        switch (alt56) {
+        switch (alt93) {
             case 1 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:89:6: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:6: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred2303);
+                pushFollow(FOLLOW_or_key_in_synpred21478);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -8443,9 +14430,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:89:13: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:323:13: DOUBLE_PIPE
                 {
-                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred2305); if (failed) return ;
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21480); if (failed) return ;
 
                 }
                 break;
@@ -8455,11 +14442,11 @@
 
     // $ANTLR start synpred3
     public final void synpred3_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:96:5: ( LEFT_PAREN and_key )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:96:6: LEFT_PAREN and_key
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:330:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:330:6: LEFT_PAREN and_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred3356); if (failed) return ;
-        pushFollow(FOLLOW_and_key_in_synpred3358);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31531); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred31533);
         and_key();
         _fsp--;
         if (failed) return ;
@@ -8470,28 +14457,28 @@
 
     // $ANTLR start synpred4
     public final void synpred4_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:99:5: ( and_key | DOUBLE_AMPER )
-        int alt57=2;
-        int LA57_0 = input.LA(1);
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:5: ( and_key | DOUBLE_AMPER )
+        int alt94=2;
+        int LA94_0 = input.LA(1);
 
-        if ( (LA57_0==ID) && ((validateIdentifierKey("and")))) {
-            alt57=1;
+        if ( (LA94_0==ID) && ((validateIdentifierKey("and")))) {
+            alt94=1;
         }
-        else if ( (LA57_0==DOUBLE_AMPER) ) {
-            alt57=2;
+        else if ( (LA94_0==DOUBLE_AMPER) ) {
+            alt94=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("99:5: synpred4 : ( and_key | DOUBLE_AMPER );", 57, 0, input);
+                new NoViableAltException("333:5: synpred4 : ( and_key | DOUBLE_AMPER );", 94, 0, input);
 
             throw nvae;
         }
-        switch (alt57) {
+        switch (alt94) {
             case 1 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:99:6: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:6: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred4403);
+                pushFollow(FOLLOW_and_key_in_synpred41578);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -8499,9 +14486,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:99:14: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:333:14: DOUBLE_AMPER
                 {
-                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred4405); if (failed) return ;
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41580); if (failed) return ;
 
                 }
                 break;
@@ -8511,10 +14498,10 @@
 
     // $ANTLR start synpred5
     public final void synpred5_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:112:4: ( SEMICOLON )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:112:5: SEMICOLON
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:346:4: ( SEMICOLON )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:346:5: SEMICOLON
         {
-        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred5508); if (failed) return ;
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51683); if (failed) return ;
 
         }
     }
@@ -8522,27 +14509,27 @@
 
     // $ANTLR start synpred6
     public final void synpred6_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:117:12: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:117:13: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:13: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred6540); if (failed) return ;
-        // /Users/porcelli/Desktop/testes/NewDRL.g:117:24: ( or_key | and_key )
-        int alt58=2;
-        int LA58_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61715); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:24: ( or_key | and_key )
+        int alt95=2;
+        int LA95_0 = input.LA(1);
 
-        if ( (LA58_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
-            int LA58_1 = input.LA(2);
+        if ( (LA95_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA95_1 = input.LA(2);
 
             if ( ((validateIdentifierKey("or"))) ) {
-                alt58=1;
+                alt95=1;
             }
             else if ( ((validateIdentifierKey("and"))) ) {
-                alt58=2;
+                alt95=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("117:24: ( or_key | and_key )", 58, 1, input);
+                    new NoViableAltException("351:24: ( or_key | and_key )", 95, 1, input);
 
                 throw nvae;
             }
@@ -8550,15 +14537,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("117:24: ( or_key | and_key )", 58, 0, input);
+                new NoViableAltException("351:24: ( or_key | and_key )", 95, 0, input);
 
             throw nvae;
         }
-        switch (alt58) {
+        switch (alt95) {
             case 1 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:117:25: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:25: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred6543);
+                pushFollow(FOLLOW_or_key_in_synpred61718);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -8566,9 +14553,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:117:32: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:351:32: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred6545);
+                pushFollow(FOLLOW_and_key_in_synpred61720);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -8585,27 +14572,27 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:125:5: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:125:6: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:6: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred7626); if (failed) return ;
-        // /Users/porcelli/Desktop/testes/NewDRL.g:125:17: ( or_key | and_key )
-        int alt59=2;
-        int LA59_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred71801); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:17: ( or_key | and_key )
+        int alt96=2;
+        int LA96_0 = input.LA(1);
 
-        if ( (LA59_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
-            int LA59_1 = input.LA(2);
+        if ( (LA96_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA96_1 = input.LA(2);
 
             if ( ((validateIdentifierKey("or"))) ) {
-                alt59=1;
+                alt96=1;
             }
             else if ( ((validateIdentifierKey("and"))) ) {
-                alt59=2;
+                alt96=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("125:17: ( or_key | and_key )", 59, 1, input);
+                    new NoViableAltException("359:17: ( or_key | and_key )", 96, 1, input);
 
                 throw nvae;
             }
@@ -8613,15 +14600,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("125:17: ( or_key | and_key )", 59, 0, input);
+                new NoViableAltException("359:17: ( or_key | and_key )", 96, 0, input);
 
             throw nvae;
         }
-        switch (alt59) {
+        switch (alt96) {
             case 1 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:125:18: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:18: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred7629);
+                pushFollow(FOLLOW_or_key_in_synpred71804);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -8629,9 +14616,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Desktop/testes/NewDRL.g:125:25: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:359:25: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred7631);
+                pushFollow(FOLLOW_and_key_in_synpred71806);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -8648,10 +14635,10 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:191:5: ( LEFT_PAREN )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:191:6: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:430:5: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:430:6: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred81079); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82286); if (failed) return ;
 
         }
     }
@@ -8659,10 +14646,10 @@
 
     // $ANTLR start synpred9
     public final void synpred9_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:200:6: ( LEFT_SQUARE )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:200:8: LEFT_SQUARE
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:439:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:439:8: LEFT_SQUARE
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred91140); if (failed) return ;
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92347); if (failed) return ;
 
         }
     }
@@ -8670,10 +14657,10 @@
 
     // $ANTLR start synpred10
     public final void synpred10_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:202:6: ( LEFT_PAREN )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:202:8: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:441:6: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:441:8: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred101162); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102369); if (failed) return ;
 
         }
     }
@@ -8681,11 +14668,11 @@
 
     // $ANTLR start synpred11
     public final void synpred11_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:271:53: ( DOUBLE_PIPE and_restr_connective )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:271:53: DOUBLE_PIPE and_restr_connective
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:509:53: ( DOUBLE_PIPE and_restr_connective )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:509:53: DOUBLE_PIPE and_restr_connective
         {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred111629); if (failed) return ;
-        pushFollow(FOLLOW_and_restr_connective_in_synpred111632);
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred112835); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred112838);
         and_restr_connective();
         _fsp--;
         if (failed) return ;
@@ -8696,11 +14683,11 @@
 
     // $ANTLR start synpred12
     public final void synpred12_fragment() throws RecognitionException {   
-        // /Users/porcelli/Desktop/testes/NewDRL.g:275:54: ( DOUBLE_AMPER constraint_expression )
-        // /Users/porcelli/Desktop/testes/NewDRL.g:275:54: DOUBLE_AMPER constraint_expression
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:513:54: ( DOUBLE_AMPER constraint_expression )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g:513:54: DOUBLE_AMPER constraint_expression
         {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred121659); if (failed) return ;
-        pushFollow(FOLLOW_constraint_expression_in_synpred121662);
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred122865); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred122868);
         constraint_expression();
         _fsp--;
         if (failed) return ;
@@ -8879,105 +14866,2881 @@
     }
 
 
+    protected DFA5 dfa5 = new DFA5(this);
     protected DFA12 dfa12 = new DFA12(this);
-    protected DFA13 dfa13 = new DFA13(this);
-    protected DFA18 dfa18 = new DFA18(this);
-    protected DFA22 dfa22 = new DFA22(this);
-    protected DFA23 dfa23 = new DFA23(this);
-    protected DFA38 dfa38 = new DFA38(this);
-    protected DFA39 dfa39 = new DFA39(this);
+    protected DFA17 dfa17 = new DFA17(this);
+    protected DFA24 dfa24 = new DFA24(this);
+    protected DFA30 dfa30 = new DFA30(this);
+    protected DFA47 dfa47 = new DFA47(this);
+    protected DFA48 dfa48 = new DFA48(this);
+    protected DFA53 dfa53 = new DFA53(this);
+    protected DFA57 dfa57 = new DFA57(this);
+    protected DFA61 dfa61 = new DFA61(this);
+    protected DFA74 dfa74 = new DFA74(this);
+    protected DFA75 dfa75 = new DFA75(this);
+    static final String DFA5_eotS =
+        "\162\uffff";
+    static final String DFA5_eofS =
+        "\3\uffff\1\16\1\22\12\uffff\1\16\6\uffff\1\16\4\uffff\1\16\2\uffff"+
+        "\1\16\7\uffff\1\22\1\uffff\1\22\1\16\6\uffff\2\102\3\uffff\1\22"+
+        "\2\uffff\2\16\4\uffff\2\16\4\uffff\2\22\4\uffff\2\22\2\16\1\uffff"+
+        "\1\16\2\22\1\16\1\uffff\2\16\4\uffff\1\22\1\uffff\2\22\1\16\4\uffff"+
+        "\1\22\1\16\5\uffff\1\22\7\uffff";
+    static final String DFA5_minS =
+        "\2\125\1\uffff\2\124\3\uffff\2\125\1\154\1\uffff\1\125\2\uffff\2"+
+        "\125\2\uffff\2\125\1\0\2\125\1\154\2\0\1\125\2\uffff\1\124\1\125"+
+        "\1\0\3\125\2\0\1\125\1\0\2\125\2\0\3\125\1\uffff\2\124\2\uffff\1"+
+        "\0\6\125\3\0\2\125\1\0\1\4\1\uffff\4\125\3\0\4\125\1\4\7\125\4\4"+
+        "\5\125\4\4\2\125\5\4\1\125\7\4";
+    static final String DFA5_maxS =
+        "\1\125\1\160\1\uffff\2\155\3\uffff\1\160\1\125\1\154\1\uffff\1\134"+
+        "\2\uffff\1\125\1\160\2\uffff\1\125\1\155\1\0\1\155\1\125\1\154\2"+
+        "\0\1\155\2\uffff\2\153\1\0\1\156\1\160\1\125\2\0\1\155\1\0\1\155"+
+        "\1\160\2\0\1\160\2\153\1\uffff\1\160\1\132\2\uffff\1\0\2\160\1\125"+
+        "\2\155\1\125\3\0\2\155\1\0\1\171\1\uffff\1\125\2\155\1\125\3\0\3"+
+        "\155\1\160\1\171\1\156\1\155\1\160\1\155\1\125\2\155\4\171\1\155"+
+        "\1\125\3\155\4\171\2\155\5\171\1\155\7\171";
+    static final String DFA5_acceptS =
+        "\2\uffff\1\1\2\uffff\3\1\3\uffff\1\7\1\uffff\1\10\1\3\2\uffff\1"+
+        "\6\1\1\11\uffff\1\2\1\4\21\uffff\1\5\2\uffff\2\5\16\uffff\1\4\57"+
+        "\uffff";
+    static final String DFA5_specialS =
+        "\1\74\1\114\1\uffff\1\23\1\134\3\uffff\1\77\1\6\1\124\1\uffff\1"+
+        "\141\2\uffff\1\125\1\105\2\uffff\1\63\1\5\1\132\1\66\1\123\1\34"+
+        "\1\43\1\113\1\121\2\uffff\1\1\1\67\1\106\1\17\1\55\1\47\1\0\1\40"+
+        "\1\12\1\133\1\75\1\16\1\126\1\102\1\127\1\62\1\53\1\uffff\1\27\1"+
+        "\115\2\uffff\1\130\1\56\1\137\1\70\1\41\1\54\1\64\1\72\1\116\1\65"+
+        "\1\136\1\10\1\103\1\117\1\uffff\1\2\1\37\1\13\1\50\1\11\1\7\1\120"+
+        "\1\112\1\61\1\104\1\140\1\45\1\122\1\60\1\46\1\42\1\71\1\76\1\107"+
+        "\1\111\1\21\1\35\1\15\1\25\1\3\1\22\1\135\1\44\1\101\1\131\1\33"+
+        "\1\4\1\73\1\36\1\32\1\57\1\110\1\20\1\142\1\14\1\52\1\100\1\24\1"+
+        "\31\1\30\1\26\1\51}>";
+    static final String[] DFA5_transitionS = {
+            "\1\1",
+            "\1\3\3\uffff\1\4\1\7\3\uffff\1\5\1\6\20\uffff\1\2",
+            "",
+            "\1\17\1\10\1\11\1\16\1\15\1\uffff\1\14\20\uffff\1\12\1\uffff"+
+            "\1\13",
+            "\1\21\1\20\2\uffff\1\15\1\uffff\1\15\22\uffff\1\13",
+            "",
+            "",
+            "",
+            "\1\25\1\27\2\uffff\1\32\1\31\2\uffff\1\24\1\33\1\26\13\uffff"+
+            "\1\30\1\uffff\1\13\2\uffff\1\23",
+            "\1\36",
+            "\1\37",
+            "",
+            "\1\40\4\uffff\1\15\1\uffff\1\41",
+            "",
+            "",
+            "\1\42",
+            "\1\44\1\27\2\uffff\1\45\1\47\2\uffff\1\24\1\50\1\46\13\uffff"+
+            "\1\30\1\uffff\1\13\2\uffff\1\43",
+            "",
+            "",
+            "\1\51",
+            "\1\53\4\uffff\1\52\22\uffff\1\13",
+            "\1\uffff",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\55",
+            "\1\56",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "",
+            "",
+            "\1\16\1\60\1\11\1\16\23\uffff\1\12",
+            "\1\61\25\uffff\1\12",
+            "\1\uffff",
+            "\1\15\2\uffff\1\15\1\uffff\1\15\23\uffff\1\63",
+            "\1\64\1\21\2\uffff\2\16\3\uffff\2\16\13\uffff\1\21\4\uffff\1"+
+            "\16",
+            "\1\65",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\uffff",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\54\3\uffff\1\70\1\uffff\1\13\2\uffff\1\71\16\uffff\1\13\2"+
+            "\uffff\1\67",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\73\3\uffff\1\74\1\75\2\uffff\1\13\1\77\1\76\15\uffff\1\13"+
+            "\2\uffff\1\72",
+            "\1\21\1\27\3\uffff\1\15\20\uffff\1\30",
+            "\1\21\4\uffff\1\15\20\uffff\1\30",
+            "",
+            "\1\102\1\100\3\uffff\1\16\1\101\3\uffff\2\16\20\uffff\1\16",
+            "\2\102\4\uffff\1\57",
+            "",
+            "",
+            "\1\uffff",
+            "\1\66\3\uffff\1\104\1\uffff\1\13\2\uffff\1\105\16\uffff\1\13"+
+            "\2\uffff\1\103",
+            "\1\107\3\uffff\1\110\1\111\2\uffff\1\13\1\112\1\113\15\uffff"+
+            "\1\13\2\uffff\1\106",
+            "\1\114",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\115",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\uffff",
+            "\121\16\1\116\6\16\1\117\35\16",
+            "",
+            "\1\120",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\121",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\54\5\uffff\1\13\2\uffff\1\122\16\uffff\1\13",
+            "\1\54\3\uffff\1\125\1\uffff\1\13\2\uffff\1\124\16\uffff\1\13"+
+            "\2\uffff\1\123",
+            "\121\16\1\130\1\126\4\16\1\131\1\117\16\16\1\127\16\16",
+            "\1\16\30\uffff\1\63",
+            "\1\66\5\uffff\1\13\2\uffff\1\132\16\uffff\1\13",
+            "\1\66\3\uffff\1\134\1\uffff\1\13\2\uffff\1\135\16\uffff\1\13"+
+            "\2\uffff\1\133",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\136",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\121\16\1\137\44\16",
+            "\150\16\1\140\15\16",
+            "\127\16\1\131\1\117\16\16\1\141\16\16",
+            "\121\16\1\142\44\16",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\143",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\1\54\5\uffff\1\13\2\uffff\1\144\16\uffff\1\13",
+            "\121\16\1\130\1\126\24\16\1\145\16\16",
+            "\121\16\1\130\5\16\1\131\1\117\16\16\1\127\16\16",
+            "\150\16\1\146\15\16",
+            "\121\16\1\151\1\147\4\16\1\131\1\117\16\16\1\150\16\16",
+            "\1\66\5\uffff\1\13\2\uffff\1\152\16\uffff\1\13",
+            "\1\54\5\uffff\1\13\21\uffff\1\13",
+            "\150\16\1\153\15\16",
+            "\127\16\1\131\1\117\16\16\1\141\16\16",
+            "\121\16\1\154\44\16",
+            "\150\16\1\155\15\16",
+            "\127\16\1\131\1\117\16\16\1\156\16\16",
+            "\1\66\5\uffff\1\13\21\uffff\1\13",
+            "\121\16\1\130\25\16\1\145\16\16",
+            "\121\16\1\151\1\147\24\16\1\157\16\16",
+            "\121\16\1\151\5\16\1\131\1\117\16\16\1\150\16\16",
+            "\150\16\1\160\15\16",
+            "\150\16\1\161\15\16",
+            "\127\16\1\131\1\117\16\16\1\156\16\16",
+            "\121\16\1\151\25\16\1\157\16\16"
+    };
+
+    static final short[] DFA5_eot = DFA.unpackEncodedString(DFA5_eotS);
+    static final short[] DFA5_eof = DFA.unpackEncodedString(DFA5_eofS);
+    static final char[] DFA5_min = DFA.unpackEncodedStringToUnsignedChars(DFA5_minS);
+    static final char[] DFA5_max = DFA.unpackEncodedStringToUnsignedChars(DFA5_maxS);
+    static final short[] DFA5_accept = DFA.unpackEncodedString(DFA5_acceptS);
+    static final short[] DFA5_special = DFA.unpackEncodedString(DFA5_specialS);
+    static final short[][] DFA5_transition;
+
+    static {
+        int numStates = DFA5_transitionS.length;
+        DFA5_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA5_transition[i] = DFA.unpackEncodedString(DFA5_transitionS[i]);
+        }
+    }
+
+    class DFA5 extends DFA {
+
+        public DFA5(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 5;
+            this.eot = DFA5_eot;
+            this.eof = DFA5_eof;
+            this.min = DFA5_min;
+            this.max = DFA5_max;
+            this.accept = DFA5_accept;
+            this.special = DFA5_special;
+            this.transition = DFA5_transition;
+        }
+        public String getDescription() {
+            return "131:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA5_36 = input.LA(1);
+
+                         
+                        int index5_36 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 17;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_36);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA5_30 = input.LA(1);
+
+                         
+                        int index5_30 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_30==EOF||LA5_30==SEMICOLON||LA5_30==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_30==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 48;}
+
+                        else if ( (LA5_30==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 9;}
+
+                        else if ( (LA5_30==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 10;}
+
+                         
+                        input.seek(index5_30);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA5_67 = input.LA(1);
+
+                         
+                        int index5_67 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_67==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 80;}
+
+                         
+                        input.seek(index5_67);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA5_91 = input.LA(1);
+
+                         
+                        int index5_91 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_91==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 99;}
+
+                         
+                        input.seek(index5_91);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA5_98 = input.LA(1);
+
+                         
+                        int index5_98 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_98==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_98==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+
+                        else if ( ((LA5_98>=VT_COMPILATION_UNIT && LA5_98<=SEMICOLON)||(LA5_98>=DOT_STAR && LA5_98<=LEFT_PAREN)||(LA5_98>=COLON && LA5_98<=NULL)||(LA5_98>=RIGHT_SQUARE && LA5_98<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_98==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( (LA5_98==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 105;}
+
+                        else if ( (LA5_98==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                         
+                        input.seek(index5_98);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA5_20 = input.LA(1);
+
+                         
+                        int index5_20 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_20==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 42;}
+
+                        else if ( (LA5_20==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 43;}
+
+                        else if ( (LA5_20==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA5_9 = input.LA(1);
+
+                         
+                        int index5_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_9==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 30;}
+
+                         
+                        input.seek(index5_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA5_72 = input.LA(1);
+
+                         
+                        int index5_72 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_72);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA5_63 = input.LA(1);
+
+                         
+                        int index5_63 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_63==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_63==COMMA||LA5_63==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_63==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_63);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA5_71 = input.LA(1);
+
+                         
+                        int index5_71 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_71);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA5_38 = input.LA(1);
+
+                         
+                        int index5_38 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_38==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_38==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_38==COMMA||LA5_38==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_38);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA5_69 = input.LA(1);
+
+                         
+                        int index5_69 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_69==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_69==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_69==COMMA||LA5_69==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_69);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA5_106 = input.LA(1);
+
+                         
+                        int index5_106 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_106==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_106==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_106==COMMA||LA5_106==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_106);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA5_89 = input.LA(1);
+
+                         
+                        int index5_89 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA5_89>=VT_COMPILATION_UNIT && LA5_89<=SEMICOLON)||(LA5_89>=DOT && LA5_89<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_89==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 98;}
+
+                         
+                        input.seek(index5_89);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        int LA5_41 = input.LA(1);
+
+                         
+                        int index5_41 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_41==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 55;}
+
+                        else if ( (LA5_41==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 56;}
+
+                        else if ( (LA5_41==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 57;}
+
+                        else if ( (LA5_41==COMMA||LA5_41==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_41==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_41==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_41);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 15 : 
+                        int LA5_33 = input.LA(1);
+
+                         
+                        int index5_33 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_33==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 51;}
+
+                        else if ( (LA5_33==ID||LA5_33==END||LA5_33==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 13;}
+
+                         
+                        input.seek(index5_33);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA5_104 = input.LA(1);
+
+                         
+                        int index5_104 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_104==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 109;}
+
+                        else if ( ((LA5_104>=VT_COMPILATION_UNIT && LA5_104<=LEFT_SQUARE)||(LA5_104>=THEN && LA5_104<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_104);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 17 : 
+                        int LA5_87 = input.LA(1);
+
+                         
+                        int index5_87 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_87==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 96;}
+
+                        else if ( ((LA5_87>=VT_COMPILATION_UNIT && LA5_87<=LEFT_SQUARE)||(LA5_87>=THEN && LA5_87<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_87);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 18 : 
+                        int LA5_92 = input.LA(1);
+
+                         
+                        int index5_92 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_92==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_92==COMMA||LA5_92==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_92==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_92);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 19 : 
+                        int LA5_3 = input.LA(1);
+
+                         
+                        int index5_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((!
 validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "functi!
 on") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") 
&& validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2,!
  "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")!
 ))||((validateLT(1, "import") && validateLT(2, "function") )&&(validat
eIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "impo!
 rt") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && valid!
 ateLT(2, "function") )&&(validateIdentifierKey("import")))||((validate
LT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(!
 validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(!
 1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("i
mport")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali!
 dateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifi!
 erKey("template"))||((validateLT(1, "import") && validateLT(2, "functi
on") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((val!
 idateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function"!
 ) )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && 
validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierK!
 ey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && val!
 idateLT(2, "function") )&&(validateIdentifierKey("import")))||((valida
teLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&!
 &(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateI!
 dentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "
function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))|!
 |((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "fun!
 ction") )&&(validateIdentifierKey("import")))||((validateLT(1, "import
") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 8;}
+
+                        else if ( (LA5_3==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 9;}
+
+                        else if ( (LA5_3==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 10;}
+
+                        else if ( (LA5_3==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_3==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 12;}
+
+                        else if ( (LA5_3==END) && ((validateIdentifierKey("query")))) {s = 13;}
+
+                        else if ( (LA5_3==EOF||LA5_3==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_3==SEMICOLON) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 15;}
+
+                         
+                        input.seek(index5_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 20 : 
+                        int LA5_109 = input.LA(1);
+
+                         
+                        int index5_109 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_109==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 105;}
+
+                        else if ( (LA5_109==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( (LA5_109==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_109==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( ((LA5_109>=VT_COMPILATION_UNIT && LA5_109<=SEMICOLON)||(LA5_109>=DOT && LA5_109<=LEFT_PAREN)||(LA5_109>=COLON && LA5_109<=NULL)||(LA5_109>=RIGHT_SQUARE && LA5_109<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_109);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA5_90 = input.LA(1);
+
+                         
+                        int index5_90 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_90==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_90==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_90==COMMA||LA5_90==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_90);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 22 : 
+                        int LA5_112 = input.LA(1);
+
+                         
+                        int index5_112 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_112==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_112==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( ((LA5_112>=VT_COMPILATION_UNIT && LA5_112<=LEFT_PAREN)||(LA5_112>=COLON && LA5_112<=NULL)||(LA5_112>=RIGHT_SQUARE && LA5_112<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_112==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 110;}
+
+                         
+                        input.seek(index5_112);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 23 : 
+                        int LA5_48 = input.LA(1);
+
+                         
+                        int index5_48 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_48==STRING||(LA5_48>=BOOL && LA5_48<=INT)||LA5_48==MISC) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_48==ID) && (((validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 64;}
+
+                        else if ( (LA5_48==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 65;}
+
+                        else if ( (LA5_48==EOF||LA5_48==SEMICOLON) && ((validateIdentifierKey("global")))) {s = 66;}
+
+                         
+                        input.seek(index5_48);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 24 : 
+                        int LA5_111 = input.LA(1);
+
+                         
+                        int index5_111 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_111==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 113;}
+
+                        else if ( ((LA5_111>=VT_COMPILATION_UNIT && LA5_111<=LEFT_SQUARE)||(LA5_111>=THEN && LA5_111<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_111);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 25 : 
+                        int LA5_110 = input.LA(1);
+
+                         
+                        int index5_110 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_110==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 112;}
+
+                        else if ( ((LA5_110>=VT_COMPILATION_UNIT && LA5_110<=LEFT_SQUARE)||(LA5_110>=THEN && LA5_110<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_110);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 26 : 
+                        int LA5_101 = input.LA(1);
+
+                         
+                        int index5_101 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_101==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 107;}
+
+                        else if ( ((LA5_101>=VT_COMPILATION_UNIT && LA5_101<=LEFT_SQUARE)||(LA5_101>=THEN && LA5_101<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_101);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 27 : 
+                        int LA5_97 = input.LA(1);
+
+                         
+                        int index5_97 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_97==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+
+                        else if ( ((LA5_97>=VT_COMPILATION_UNIT && LA5_97<=LEFT_SQUARE)||(LA5_97>=THEN && LA5_97<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_97);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 28 : 
+                        int LA5_24 = input.LA(1);
+
+                         
+                        int index5_24 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_24==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 46;}
+
+                         
+                        input.seek(index5_24);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 29 : 
+                        int LA5_88 = input.LA(1);
+
+                         
+                        int index5_88 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_88==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_88==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 97;}
+
+                        else if ( ((LA5_88>=VT_COMPILATION_UNIT && LA5_88<=LEFT_PAREN)||(LA5_88>=COLON && LA5_88<=NULL)||(LA5_88>=RIGHT_SQUARE && LA5_88<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_88==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                         
+                        input.seek(index5_88);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 30 : 
+                        int LA5_100 = input.LA(1);
+
+                         
+                        int index5_100 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_100==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_100==COMMA||LA5_100==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_100==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_100);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 31 : 
+                        int LA5_68 = input.LA(1);
+
+                         
+                        int index5_68 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_68==COMMA||LA5_68==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_68==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_68==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_68);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 32 : 
+                        int LA5_37 = input.LA(1);
+
+                         
+                        int index5_37 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_37);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 33 : 
+                        int LA5_56 = input.LA(1);
+
+                         
+                        int index5_56 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_56==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_56==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_56==COMMA||LA5_56==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_56);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 34 : 
+                        int LA5_82 = input.LA(1);
+
+                         
+                        int index5_82 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_82==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_82==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_82==COMMA||LA5_82==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_82);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 35 : 
+                        int LA5_25 = input.LA(1);
+
+                         
+                        int index5_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("function"))) ) {s = 47;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 36 : 
+                        int LA5_94 = input.LA(1);
+
+                         
+                        int index5_94 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_94==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 100;}
+
+                        else if ( (LA5_94==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_94==COMMA||LA5_94==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_94==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_94);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 37 : 
+                        int LA5_78 = input.LA(1);
+
+                         
+                        int index5_78 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_78==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 86;}
+
+                        else if ( (LA5_78==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 87;}
+
+                        else if ( (LA5_78==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 88;}
+
+                        else if ( (LA5_78==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_78==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( ((LA5_78>=VT_COMPILATION_UNIT && LA5_78<=SEMICOLON)||(LA5_78>=DOT_STAR && LA5_78<=LEFT_PAREN)||(LA5_78>=COLON && LA5_78<=NULL)||(LA5_78>=RIGHT_SQUARE && LA5_78<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_78);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 38 : 
+                        int LA5_81 = input.LA(1);
+
+                         
+                        int index5_81 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_81==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 91;}
+
+                        else if ( (LA5_81==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 92;}
+
+                        else if ( (LA5_81==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 93;}
+
+                        else if ( (LA5_81==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_81==COMMA||LA5_81==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_81==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_81);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 39 : 
+                        int LA5_35 = input.LA(1);
+
+                         
+                        int index5_35 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_35==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 53;}
+
+                         
+                        input.seek(index5_35);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 40 : 
+                        int LA5_70 = input.LA(1);
+
+                         
+                        int index5_70 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_70==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 81;}
+
+                         
+                        input.seek(index5_70);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 41 : 
+                        int LA5_113 = input.LA(1);
+
+                         
+                        int index5_113 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_113==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 105;}
+
+                        else if ( (LA5_113==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 111;}
+
+                        else if ( ((LA5_113>=VT_COMPILATION_UNIT && LA5_113<=SEMICOLON)||(LA5_113>=DOT && LA5_113<=NULL)||(LA5_113>=RIGHT_SQUARE && LA5_113<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_113);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 42 : 
+                        int LA5_107 = input.LA(1);
+
+                         
+                        int index5_107 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_107==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 88;}
+
+                        else if ( (LA5_107==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+
+                        else if ( ((LA5_107>=VT_COMPILATION_UNIT && LA5_107<=SEMICOLON)||(LA5_107>=DOT && LA5_107<=NULL)||(LA5_107>=RIGHT_SQUARE && LA5_107<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_107);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 43 : 
+                        int LA5_46 = input.LA(1);
+
+                         
+                        int index5_46 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_46==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 13;}
+
+                        else if ( (LA5_46==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 24;}
+
+                        else if ( (LA5_46==ID) && ((validateIdentifierKey("template")))) {s = 17;}
+
+                         
+                        input.seek(index5_46);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 44 : 
+                        int LA5_57 = input.LA(1);
+
+                         
+                        int index5_57 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_57==COMMA||LA5_57==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_57==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_57==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_57);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 45 : 
+                        int LA5_34 = input.LA(1);
+
+                         
+                        int index5_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA5_34>=STRING && LA5_34<=LEFT_PAREN)||(LA5_34>=BOOL && LA5_34<=INT)||LA5_34==MISC) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_34==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 52;}
+
+                        else if ( (LA5_34==DOT||LA5_34==LEFT_SQUARE) && ((validateIdentifierKey("template")))) {s = 17;}
+
+                         
+                        input.seek(index5_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 46 : 
+                        int LA5_53 = input.LA(1);
+
+                         
+                        int index5_53 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_53==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 67;}
+
+                        else if ( (LA5_53==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 68;}
+
+                        else if ( (LA5_53==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 69;}
+
+                        else if ( (LA5_53==COMMA||LA5_53==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_53==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_53==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_53);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 47 : 
+                        int LA5_102 = input.LA(1);
+
+                         
+                        int index5_102 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_102==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_102==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_102==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 97;}
+
+                        else if ( ((LA5_102>=VT_COMPILATION_UNIT && LA5_102<=LEFT_PAREN)||(LA5_102>=COLON && LA5_102<=NULL)||(LA5_102>=RIGHT_SQUARE && LA5_102<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_102);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 48 : 
+                        int LA5_80 = input.LA(1);
+
+                         
+                        int index5_80 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_80==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 90;}
+
+                        else if ( (LA5_80==COMMA||LA5_80==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_80==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_80==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_80);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 49 : 
+                        int LA5_75 = input.LA(1);
+
+                         
+                        int index5_75 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_75==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_75==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_75==COMMA||LA5_75==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_75);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 50 : 
+                        int LA5_45 = input.LA(1);
+
+                         
+                        int index5_45 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_45==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 24;}
+
+                        else if ( (LA5_45==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 13;}
+
+                        else if ( (LA5_45==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 23;}
+
+                        else if ( (LA5_45==ID) && ((validateIdentifierKey("template")))) {s = 17;}
+
+                         
+                        input.seek(index5_45);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 51 : 
+                        int LA5_19 = input.LA(1);
+
+                         
+                        int index5_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_19==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 41;}
+
+                         
+                        input.seek(index5_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 52 : 
+                        int LA5_58 = input.LA(1);
+
+                         
+                        int index5_58 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_58==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 77;}
+
+                         
+                        input.seek(index5_58);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 53 : 
+                        int LA5_61 = input.LA(1);
+
+                         
+                        int index5_61 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_61);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 54 : 
+                        int LA5_22 = input.LA(1);
+
+                         
+                        int index5_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_22==COMMA||LA5_22==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_22==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_22==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 55 : 
+                        int LA5_31 = input.LA(1);
+
+                         
+                        int index5_31 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_31==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 49;}
+
+                        else if ( (LA5_31==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 10;}
+
+                         
+                        input.seek(index5_31);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 56 : 
+                        int LA5_55 = input.LA(1);
+
+                         
+                        int index5_55 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_55==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 76;}
+
+                         
+                        input.seek(index5_55);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 57 : 
+                        int LA5_83 = input.LA(1);
+
+                         
+                        int index5_83 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_83==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 94;}
+
+                         
+                        input.seek(index5_83);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 58 : 
+                        int LA5_59 = input.LA(1);
+
+                         
+                        int index5_59 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_59);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 59 : 
+                        int LA5_99 = input.LA(1);
+
+                         
+                        int index5_99 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_99==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 106;}
+
+                        else if ( (LA5_99==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_99==COMMA||LA5_99==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_99==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_99);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 60 : 
+                        int LA5_0 = input.LA(1);
+
+                         
+                        int index5_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_0==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT!
 (2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+
+                         
+                        input.seek(index5_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 61 : 
+                        int LA5_40 = input.LA(1);
+
+                         
+                        int index5_40 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_40==COMMA||LA5_40==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_40==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_40==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_40);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 62 : 
+                        int LA5_84 = input.LA(1);
+
+                         
+                        int index5_84 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_84==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_84==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_84==COMMA||LA5_84==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_84);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 63 : 
+                        int LA5_8 = input.LA(1);
+
+                         
+                        int index5_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_8==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 19;}
+
+                        else if ( (LA5_8==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 20;}
+
+                        else if ( (LA5_8==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))))) {s = 21;}
+
+                        else if ( (LA5_8==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 22;}
+
+                        else if ( (LA5_8==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 23;}
+
+                        else if ( (LA5_8==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 24;}
+
+                        else if ( (LA5_8==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 25;}
+
+                        else if ( (LA5_8==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_8==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 26;}
+
+                        else if ( (LA5_8==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 27;}
+
+                        else if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))) ) {s = 28;}
+
+                        else if ( ((validateIdentifierKey("global"))) ) {s = 29;}
+
+                         
+                        input.seek(index5_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 64 : 
+                        int LA5_108 = input.LA(1);
+
+                         
+                        int index5_108 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_108==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 111;}
+
+                        else if ( (LA5_108==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 105;}
+
+                        else if ( (LA5_108==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+
+                        else if ( ((LA5_108>=VT_COMPILATION_UNIT && LA5_108<=SEMICOLON)||(LA5_108>=DOT_STAR && LA5_108<=NULL)||(LA5_108>=RIGHT_SQUARE && LA5_108<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_108);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 65 : 
+                        int LA5_95 = input.LA(1);
+
+                         
+                        int index5_95 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA5_95>=VT_COMPILATION_UNIT && LA5_95<=SEMICOLON)||(LA5_95>=DOT_STAR && LA5_95<=NULL)||(LA5_95>=RIGHT_SQUARE && LA5_95<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_95==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+
+                        else if ( (LA5_95==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 88;}
+
+                        else if ( (LA5_95==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 86;}
+
+                         
+                        input.seek(index5_95);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 66 : 
+                        int LA5_43 = input.LA(1);
+
+                         
+                        int index5_43 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_43);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 67 : 
+                        int LA5_64 = input.LA(1);
+
+                         
+                        int index5_64 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("global"))) ) {s = 66;}
+
+                         
+                        input.seek(index5_64);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 68 : 
+                        int LA5_76 = input.LA(1);
+
+                         
+                        int index5_76 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_76==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 82;}
+
+                        else if ( (LA5_76==COMMA||LA5_76==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_76==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_76==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_76);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 69 : 
+                        int LA5_16 = input.LA(1);
+
+                         
+                        int index5_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_16==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 35;}
+
+                        else if ( (LA5_16==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 20;}
+
+                        else if ( (LA5_16==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 36;}
+
+                        else if ( (LA5_16==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 37;}
+
+                        else if ( (LA5_16==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 38;}
+
+                        else if ( (LA5_16==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 23;}
+
+                        else if ( (LA5_16==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 24;}
+
+                        else if ( (LA5_16==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 39;}
+
+                        else if ( (LA5_16==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_16==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 40;}
+
+                         
+                        input.seek(index5_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 70 : 
+                        int LA5_32 = input.LA(1);
+
+                         
+                        int index5_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("function"))) ) {s = 50;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_32);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 71 : 
+                        int LA5_85 = input.LA(1);
+
+                         
+                        int index5_85 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_85==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_85==COMMA||LA5_85==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_85==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_85);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 72 : 
+                        int LA5_103 = input.LA(1);
+
+                         
+                        int index5_103 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_103==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 108;}
+
+                        else if ( ((LA5_103>=VT_COMPILATION_UNIT && LA5_103<=SEMICOLON)||(LA5_103>=DOT && LA5_103<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_103);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 73 : 
+                        int LA5_86 = input.LA(1);
+
+                         
+                        int index5_86 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_86==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 95;}
+
+                        else if ( ((LA5_86>=VT_COMPILATION_UNIT && LA5_86<=SEMICOLON)||(LA5_86>=DOT && LA5_86<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_86);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 74 : 
+                        int LA5_74 = input.LA(1);
+
+                         
+                        int index5_74 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_74==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_74==COMMA||LA5_74==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_74==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_74);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 75 : 
+                        int LA5_26 = input.LA(1);
+
+                         
+                        int index5_26 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 76 : 
+                        int LA5_1 = input.LA(1);
+
+                         
+                        int index5_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_1==MISC) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 2;}
+
+                        else if ( (LA5_1==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 3;}
+
+                        else if ( (LA5_1==STRING) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 4;}
+
+                        else if ( (LA5_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 5;}
+
+                        else if ( (LA5_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 6;}
+
+                        else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {s = 7;}
+
+                         
+                        input.seek(index5_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 77 : 
+                        int LA5_49 = input.LA(1);
+
+                         
+                        int index5_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_49==EOF||(LA5_49>=SEMICOLON && LA5_49<=ID)) && ((validateIdentifierKey("global")))) {s = 66;}
+
+                        else if ( (LA5_49==LEFT_PAREN) && ((validateIdentifierKey("function")))) {s = 47;}
+
+                         
+                        input.seek(index5_49);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 78 : 
+                        int LA5_60 = input.LA(1);
+
+                         
+                        int index5_60 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_60);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 79 : 
+                        int LA5_65 = input.LA(1);
+
+                         
+                        int index5_65 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_65==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 78;}
+
+                        else if ( ((LA5_65>=VT_COMPILATION_UNIT && LA5_65<=SEMICOLON)||(LA5_65>=DOT && LA5_65<=COMMA)||(LA5_65>=COLON && LA5_65<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_65==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                         
+                        input.seek(index5_65);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 80 : 
+                        int LA5_73 = input.LA(1);
+
+                         
+                        int index5_73 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                         
+                        input.seek(index5_73);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 81 : 
+                        int LA5_27 = input.LA(1);
+
+                         
+                        int index5_27 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_27==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_27==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_27==COMMA||LA5_27==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_27);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 82 : 
+                        int LA5_79 = input.LA(1);
+
+                         
+                        int index5_79 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_79==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 51;}
+
+                        else if ( (LA5_79==EOF||LA5_79==ID) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_79);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 83 : 
+                        int LA5_23 = input.LA(1);
+
+                         
+                        int index5_23 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_23==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 45;}
+
+                         
+                        input.seek(index5_23);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 84 : 
+                        int LA5_10 = input.LA(1);
+
+                         
+                        int index5_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_10==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 31;}
+
+                         
+                        input.seek(index5_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 85 : 
+                        int LA5_15 = input.LA(1);
+
+                         
+                        int index5_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_15==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 34;}
+
+                        else if ( (LA5_15==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 86 : 
+                        int LA5_42 = input.LA(1);
+
+                         
+                        int index5_42 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_42);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 87 : 
+                        int LA5_44 = input.LA(1);
+
+                         
+                        int index5_44 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_44==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 58;}
+
+                        else if ( (LA5_44==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 59;}
+
+                        else if ( (LA5_44==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 60;}
+
+                        else if ( (LA5_44==COLON||LA5_44==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_44==LEFT_PAREN) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 61;}
+
+                        else if ( (LA5_44==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 62;}
+
+                        else if ( (LA5_44==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 63;}
+
+                         
+                        input.seek(index5_44);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 88 : 
+                        int LA5_52 = input.LA(1);
+
+                         
+                        int index5_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 17;}
+
+                         
+                        input.seek(index5_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 89 : 
+                        int LA5_96 = input.LA(1);
+
+                         
+                        int index5_96 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_96==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 88;}
+
+                        else if ( (LA5_96==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 87;}
+
+                        else if ( (LA5_96==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_96==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( ((LA5_96>=VT_COMPILATION_UNIT && LA5_96<=SEMICOLON)||(LA5_96>=DOT && LA5_96<=LEFT_PAREN)||(LA5_96>=COLON && LA5_96<=NULL)||(LA5_96>=RIGHT_SQUARE && LA5_96<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_96);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 90 : 
+                        int LA5_21 = input.LA(1);
+
+                         
+                        int index5_21 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 14;}
+
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 17;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_21);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 91 : 
+                        int LA5_39 = input.LA(1);
+
+                         
+                        int index5_39 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 11;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 13;}
+
+                         
+                        input.seek(index5_39);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 92 : 
+                        int LA5_4 = input.LA(1);
+
+                         
+                        int index5_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_4==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 16;}
+
+                        else if ( (LA5_4==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_4==END||LA5_4==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 13;}
+
+                        else if ( (LA5_4==SEMICOLON) && ((validateIdentifierKey("template")))) {s = 17;}
+
+                        else if ( (LA5_4==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                         
+                        input.seek(index5_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 93 : 
+                        int LA5_93 = input.LA(1);
+
+                         
+                        int index5_93 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_93==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_93==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_93==COMMA||LA5_93==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                         
+                        input.seek(index5_93);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 94 : 
+                        int LA5_62 = input.LA(1);
+
+                         
+                        int index5_62 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_62==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_62==COMMA||LA5_62==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_62==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_62);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 95 : 
+                        int LA5_54 = input.LA(1);
+
+                         
+                        int index5_54 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_54==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 70;}
+
+                        else if ( (LA5_54==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 71;}
+
+                        else if ( (LA5_54==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 72;}
+
+                        else if ( (LA5_54==COLON||LA5_54==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_54==LEFT_PAREN) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 73;}
+
+                        else if ( (LA5_54==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 74;}
+
+                        else if ( (LA5_54==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 75;}
+
+                         
+                        input.seek(index5_54);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 96 : 
+                        int LA5_77 = input.LA(1);
+
+                         
+                        int index5_77 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_77==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 83;}
+
+                        else if ( (LA5_77==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 84;}
+
+                        else if ( (LA5_77==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 44;}
+
+                        else if ( (LA5_77==COMMA||LA5_77==THEN) && ((validateIdentifierKey("rule")))) {s = 11;}
+
+                        else if ( (LA5_77==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 85;}
+
+                        else if ( (LA5_77==EOF) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                         
+                        input.seek(index5_77);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 97 : 
+                        int LA5_12 = input.LA(1);
+
+                         
+                        int index5_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_12==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 32;}
+
+                        else if ( (LA5_12==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 13;}
+
+                        else if ( (LA5_12==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 33;}
+
+                         
+                        input.seek(index5_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 98 : 
+                        int LA5_105 = input.LA(1);
+
+                         
+                        int index5_105 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_105==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 79;}
+
+                        else if ( (LA5_105==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 110;}
+
+                        else if ( ((LA5_105>=VT_COMPILATION_UNIT && LA5_105<=LEFT_PAREN)||(LA5_105>=COLON && LA5_105<=NULL)||(LA5_105>=RIGHT_SQUARE && LA5_105<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 14;}
+
+                        else if ( (LA5_105==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                         
+                        input.seek(index5_105);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 5, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
     static final String DFA12_eotS =
-        "\164\uffff";
+        "\16\uffff";
     static final String DFA12_eofS =
-        "\164\uffff";
+        "\16\uffff";
     static final String DFA12_minS =
-        "\3\60\2\0\1\60\1\0\1\uffff\1\66\1\106\2\uffff\1\60\1\66\1\uffff"+
-        "\2\60\1\66\1\106\6\60\2\0\1\66\1\106\2\60\2\0\1\66\1\0\1\4\1\66"+
-        "\7\60\2\uffff\3\60\1\0\1\61\1\66\1\0\1\4\1\66\7\60\1\uffff\1\60"+
-        "\1\uffff\1\4\24\0\1\uffff\4\0\1\uffff\30\0";
+        "\2\125\1\uffff\1\125\1\uffff\1\125\1\154\3\125\2\154\1\132\1\125";
     static final String DFA12_maxS =
-        "\2\66\1\105\2\0\1\66\1\0\1\uffff\1\66\1\106\2\uffff\1\105\1\66\1"+
-        "\uffff\2\105\1\66\1\106\1\66\1\105\1\66\3\105\2\0\1\66\1\106\1\66"+
-        "\1\105\2\0\1\66\1\0\1\123\1\66\1\105\6\104\2\uffff\3\105\1\0\2\66"+
-        "\1\0\1\123\1\66\1\105\6\104\1\uffff\1\105\1\uffff\1\123\24\0\1\uffff"+
-        "\4\0\1\uffff\30\0";
+        "\1\132\1\134\1\uffff\1\153\1\uffff\1\125\1\154\3\153\2\154\2\153";
     static final String DFA12_acceptS =
-        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1"+
-        "\uffff\1\3\25\uffff\1\3\4\uffff\1\3\30\uffff";
+        "\2\uffff\1\2\1\uffff\1\1\11\uffff";
     static final String DFA12_specialS =
-        "\2\uffff\1\1\1\3\1\4\1\uffff\1\0\22\uffff\1\10\1\2\4\uffff\1\11"+
-        "\1\6\1\uffff\1\7\16\uffff\1\12\2\uffff\1\5\77\uffff}>";
+        "\16\uffff}>";
     static final String[] DFA12_transitionS = {
-            "\1\1\5\uffff\1\2",
-            "\1\3\5\uffff\1\4",
-            "\1\6\5\uffff\1\7\1\10\1\uffff\1\5\13\uffff\1\11",
+            "\1\2\2\uffff\1\2\1\uffff\1\1",
+            "\1\3\4\uffff\1\2\1\uffff\1\4",
+            "",
+            "\1\7\1\5\3\uffff\1\2\2\4\1\2\15\uffff\1\6",
+            "",
+            "\1\10",
+            "\1\11",
+            "\2\2\3\uffff\1\2\2\4\1\2\15\uffff\1\12",
+            "\1\4\1\5\3\uffff\1\2\20\uffff\1\13",
+            "\1\4\4\uffff\1\2\2\4\16\uffff\1\6",
+            "\1\14",
+            "\1\15",
+            "\1\2\2\4\16\uffff\1\12",
+            "\1\4\4\uffff\1\2\20\uffff\1\13"
+    };
+
+    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
+    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
+    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
+    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
+    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
+    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
+    static final short[][] DFA12_transition;
+
+    static {
+        int numStates = DFA12_transitionS.length;
+        DFA12_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+        }
+    }
+
+    class DFA12 extends DFA {
+
+        public DFA12(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 12;
+            this.eot = DFA12_eot;
+            this.eof = DFA12_eof;
+            this.min = DFA12_min;
+            this.max = DFA12_max;
+            this.accept = DFA12_accept;
+            this.special = DFA12_special;
+            this.transition = DFA12_transition;
+        }
+        public String getDescription() {
+            return "177:28: ( parameters )?";
+        }
+    }
+    static final String DFA17_eotS =
+        "\6\uffff";
+    static final String DFA17_eofS =
+        "\6\uffff";
+    static final String DFA17_minS =
+        "\2\125\1\154\2\uffff\1\125";
+    static final String DFA17_maxS =
+        "\1\125\1\153\1\154\2\uffff\1\153";
+    static final String DFA17_acceptS =
+        "\3\uffff\1\2\1\1\1\uffff";
+    static final String DFA17_specialS =
+        "\6\uffff}>";
+    static final String[] DFA17_transitionS = {
+            "\1\1",
+            "\2\4\4\uffff\2\3\16\uffff\1\2",
+            "\1\5",
+            "",
+            "",
+            "\1\4\5\uffff\2\3\16\uffff\1\2"
+    };
+
+    static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS);
+    static final short[] DFA17_eof = DFA.unpackEncodedString(DFA17_eofS);
+    static final char[] DFA17_min = DFA.unpackEncodedStringToUnsignedChars(DFA17_minS);
+    static final char[] DFA17_max = DFA.unpackEncodedStringToUnsignedChars(DFA17_maxS);
+    static final short[] DFA17_accept = DFA.unpackEncodedString(DFA17_acceptS);
+    static final short[] DFA17_special = DFA.unpackEncodedString(DFA17_specialS);
+    static final short[][] DFA17_transition;
+
+    static {
+        int numStates = DFA17_transitionS.length;
+        DFA17_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA17_transition[i] = DFA.unpackEncodedString(DFA17_transitionS[i]);
+        }
+    }
+
+    class DFA17 extends DFA {
+
+        public DFA17(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 17;
+            this.eot = DFA17_eot;
+            this.eof = DFA17_eof;
+            this.min = DFA17_min;
+            this.max = DFA17_max;
+            this.accept = DFA17_accept;
+            this.special = DFA17_special;
+            this.transition = DFA17_transition;
+        }
+        public String getDescription() {
+            return "194:4: ( data_type )?";
+        }
+    }
+    static final String DFA24_eotS =
+        "\36\uffff";
+    static final String DFA24_eofS =
+        "\36\uffff";
+    static final String DFA24_minS =
+        "\2\125\4\uffff\1\125\1\uffff\1\4\1\uffff\1\125\1\4\1\0\2\uffff\1"+
+        "\0\1\4\2\0\2\4\1\uffff\1\4\1\0\2\4\4\0";
+    static final String DFA24_maxS =
+        "\1\155\1\160\4\uffff\1\155\1\uffff\1\171\1\uffff\1\160\1\171\1\0"+
+        "\2\uffff\1\0\1\171\2\0\2\171\1\uffff\1\171\1\0\2\171\4\0";
+    static final String DFA24_acceptS =
+        "\2\uffff\1\2\3\1\1\uffff\1\1\1\uffff\1\2\3\uffff\2\1\6\uffff\1\1"+
+        "\10\uffff";
+    static final String DFA24_specialS =
+        "\1\7\1\20\4\uffff\1\4\1\uffff\1\14\1\uffff\1\2\1\11\1\1\2\uffff"+
+        "\1\5\1\16\1\15\1\3\1\17\1\10\1\uffff\1\12\1\0\1\6\1\13\4\uffff}>";
+    static final String[] DFA24_transitionS = {
+            "\1\1\27\uffff\1\2",
+            "\1\11\3\uffff\1\5\1\10\2\uffff\1\6\1\4\1\7\15\uffff\1\11\2\uffff"+
+            "\1\3",
+            "",
+            "",
+            "",
+            "",
+            "\1\12\4\uffff\1\11\22\uffff\1\11",
+            "",
+            "\121\15\1\13\4\15\1\14\37\15",
+            "",
+            "\2\11\2\uffff\1\16\1\17\2\uffff\1\11\2\16\13\uffff\1\11\4\uffff"+
+            "\1\16",
+            "\121\25\1\22\1\23\3\25\1\21\1\25\1\15\1\20\15\25\1\24\16\25",
             "\1\uffff",
+            "",
+            "",
             "\1\uffff",
-            "\1\15\5\uffff\1\14",
+            "\121\25\1\26\4\25\1\27\1\25\1\15\35\25",
             "\1\uffff",
+            "\1\uffff",
+            "\121\25\1\30\6\25\1\15\35\25",
+            "\130\25\1\15\17\25\1\31\15\25",
             "",
+            "\122\25\1\32\3\25\1\34\1\25\1\15\16\25\1\33\16\25",
+            "\1\uffff",
+            "\122\25\1\23\3\25\1\35\1\25\1\15\16\25\1\24\16\25",
+            "\126\25\1\35\1\25\1\15\16\25\1\24\16\25",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA24_eot = DFA.unpackEncodedString(DFA24_eotS);
+    static final short[] DFA24_eof = DFA.unpackEncodedString(DFA24_eofS);
+    static final char[] DFA24_min = DFA.unpackEncodedStringToUnsignedChars(DFA24_minS);
+    static final char[] DFA24_max = DFA.unpackEncodedStringToUnsignedChars(DFA24_maxS);
+    static final short[] DFA24_accept = DFA.unpackEncodedString(DFA24_acceptS);
+    static final short[] DFA24_special = DFA.unpackEncodedString(DFA24_specialS);
+    static final short[][] DFA24_transition;
+
+    static {
+        int numStates = DFA24_transitionS.length;
+        DFA24_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA24_transition[i] = DFA.unpackEncodedString(DFA24_transitionS[i]);
+        }
+    }
+
+    class DFA24 extends DFA {
+
+        public DFA24(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 24;
+            this.eot = DFA24_eot;
+            this.eof = DFA24_eof;
+            this.min = DFA24_min;
+            this.max = DFA24_max;
+            this.accept = DFA24_accept;
+            this.special = DFA24_special;
+            this.transition = DFA24_transition;
+        }
+        public String getDescription() {
+            return "224:21: ( rule_attributes )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA24_23 = input.LA(1);
+
+                         
+                        int index24_23 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+
+                         
+                        input.seek(index24_23);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA24_12 = input.LA(1);
+
+                         
+                        int index24_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+
+                         
+                        input.seek(index24_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA24_10 = input.LA(1);
+
+                         
+                        int index24_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_10==STRING||(LA24_10>=BOOL && LA24_10<=INT)||LA24_10==MISC) && ((validateIdentifierKey("attributes")))) {s = 14;}
+
+                        else if ( ((LA24_10>=ID && LA24_10<=DOT)||LA24_10==COLON||LA24_10==LEFT_SQUARE) && ((validateIdentifierKey("when")))) {s = 9;}
+
+                        else if ( (LA24_10==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 15;}
+
+                         
+                        input.seek(index24_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA24_18 = input.LA(1);
+
+                         
+                        int index24_18 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+
+                         
+                        input.seek(index24_18);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA24_6 = input.LA(1);
+
+                         
+                        int index24_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_6==LEFT_PAREN||LA24_6==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
+
+                        else if ( (LA24_6==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 10;}
+
+                         
+                        input.seek(index24_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA24_15 = input.LA(1);
+
+                         
+                        int index24_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("attributes"))) ) {s = 21;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+
+                         
+                        input.seek(index24_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA24_24 = input.LA(1);
+
+                         
+                        int index24_24 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_24==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+
+                        else if ( (LA24_24==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 29;}
+
+                        else if ( (LA24_24==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
+
+                        else if ( (LA24_24==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_24>=VT_COMPILATION_UNIT && LA24_24<=ID)||(LA24_24>=DOT_STAR && LA24_24<=STRING)||LA24_24==COMMA||(LA24_24>=COLON && LA24_24<=NULL)||(LA24_24>=RIGHT_SQUARE && LA24_24<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_24);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA24_0 = input.LA(1);
+
+                         
+                        int index24_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+
+                        else if ( (LA24_0==THEN) ) {s = 2;}
+
+                         
+                        input.seek(index24_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA24_20 = input.LA(1);
+
+                         
+                        int index24_20 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_20==RIGHT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+
+                        else if ( (LA24_20==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_20>=VT_COMPILATION_UNIT && LA24_20<=COMMA)||(LA24_20>=COLON && LA24_20<=LEFT_SQUARE)||(LA24_20>=THEN && LA24_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA24_11 = input.LA(1);
+
+                         
+                        int index24_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_11==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+
+                        else if ( (LA24_11==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
+                        else if ( (LA24_11==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
+
+                        else if ( (LA24_11==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
+
+                        else if ( (LA24_11==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+
+                        else if ( (LA24_11==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_11>=VT_COMPILATION_UNIT && LA24_11<=SEMICOLON)||(LA24_11>=DOT_STAR && LA24_11<=STRING)||LA24_11==COMMA||(LA24_11>=BOOL && LA24_11<=NULL)||(LA24_11>=RIGHT_SQUARE && LA24_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA24_22 = input.LA(1);
+
+                         
+                        int index24_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_22==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 26;}
+
+                        else if ( (LA24_22==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 27;}
+
+                        else if ( (LA24_22==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 28;}
+
+                        else if ( (LA24_22==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_22>=VT_COMPILATION_UNIT && LA24_22<=ID)||(LA24_22>=DOT_STAR && LA24_22<=STRING)||LA24_22==COMMA||(LA24_22>=COLON && LA24_22<=NULL)||(LA24_22>=RIGHT_SQUARE && LA24_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA24_25 = input.LA(1);
+
+                         
+                        int index24_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_25==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 29;}
+
+                        else if ( (LA24_25==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+
+                        else if ( (LA24_25==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_25>=VT_COMPILATION_UNIT && LA24_25<=STRING)||LA24_25==COMMA||(LA24_25>=COLON && LA24_25<=NULL)||(LA24_25>=RIGHT_SQUARE && LA24_25<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA24_8 = input.LA(1);
+
+                         
+                        int index24_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_8==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 11;}
+
+                        else if ( (LA24_8==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 12;}
+
+                        else if ( ((LA24_8>=VT_COMPILATION_UNIT && LA24_8<=SEMICOLON)||(LA24_8>=DOT && LA24_8<=STRING)||(LA24_8>=COMMA && LA24_8<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA24_17 = input.LA(1);
+
+                         
+                        int index24_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+
+                         
+                        input.seek(index24_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        int LA24_16 = input.LA(1);
+
+                         
+                        int index24_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_16==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
+
+                        else if ( (LA24_16==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
+
+                        else if ( (LA24_16==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_16>=VT_COMPILATION_UNIT && LA24_16<=SEMICOLON)||(LA24_16>=DOT && LA24_16<=STRING)||LA24_16==COMMA||(LA24_16>=COLON && LA24_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 15 : 
+                        int LA24_19 = input.LA(1);
+
+                         
+                        int index24_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_19==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
+
+                        else if ( (LA24_19==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                        else if ( ((LA24_19>=VT_COMPILATION_UNIT && LA24_19<=SEMICOLON)||(LA24_19>=DOT && LA24_19<=COMMA)||(LA24_19>=COLON && LA24_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                         
+                        input.seek(index24_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA24_1 = input.LA(1);
+
+                         
+                        int index24_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {s = 3;}
+
+                        else if ( (LA24_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 4;}
+
+                        else if ( (LA24_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 5;}
+
+                        else if ( (LA24_1==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 6;}
+
+                        else if ( (LA24_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 7;}
+
+                        else if ( (LA24_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 8;}
+
+                        else if ( (LA24_1==ID||LA24_1==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
+
+                         
+                        input.seek(index24_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 24, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA30_eotS =
+        "\32\uffff";
+    static final String DFA30_eofS =
+        "\32\uffff";
+    static final String DFA30_minS =
+        "\2\125\4\uffff\1\4\3\uffff\1\4\1\0\1\uffff\1\4\2\0\3\4\1\0\2\4\4"+
+        "\0";
+    static final String DFA30_maxS =
+        "\1\155\1\160\4\uffff\1\171\3\uffff\1\171\1\0\1\uffff\1\171\2\0\3"+
+        "\171\1\0\2\171\4\0";
+    static final String DFA30_acceptS =
+        "\2\uffff\1\2\3\1\1\uffff\1\2\2\1\2\uffff\1\1\15\uffff";
+    static final String DFA30_specialS =
+        "\1\13\1\3\4\uffff\1\10\3\uffff\1\6\1\0\1\uffff\1\14\1\12\1\2\1\15"+
+        "\1\5\1\7\1\1\1\4\1\11\4\uffff}>";
+    static final String[] DFA30_transitionS = {
+            "\1\1\5\uffff\1\3\21\uffff\1\2",
+            "\1\7\3\uffff\1\10\1\6\2\uffff\1\7\1\11\1\5\15\uffff\1\7\2\uffff"+
+            "\1\4",
+            "",
+            "",
+            "",
+            "",
+            "\121\14\1\12\4\14\1\13\37\14",
+            "",
+            "",
+            "",
+            "\121\14\1\17\1\20\3\14\1\16\2\14\1\15\15\14\1\21\16\14",
+            "\1\uffff",
+            "",
+            "\121\14\1\22\4\14\1\23\37\14",
+            "\1\uffff",
+            "\1\uffff",
+            "\121\14\1\24\44\14",
+            "\150\14\1\25\15\14",
+            "\122\14\1\26\3\14\1\30\20\14\1\27\16\14",
+            "\1\uffff",
+            "\122\14\1\20\3\14\1\31\20\14\1\21\16\14",
+            "\126\14\1\31\20\14\1\21\16\14",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA30_eot = DFA.unpackEncodedString(DFA30_eotS);
+    static final short[] DFA30_eof = DFA.unpackEncodedString(DFA30_eofS);
+    static final char[] DFA30_min = DFA.unpackEncodedStringToUnsignedChars(DFA30_minS);
+    static final char[] DFA30_max = DFA.unpackEncodedStringToUnsignedChars(DFA30_maxS);
+    static final short[] DFA30_accept = DFA.unpackEncodedString(DFA30_acceptS);
+    static final short[] DFA30_special = DFA.unpackEncodedString(DFA30_specialS);
+    static final short[][] DFA30_transition;
+
+    static {
+        int numStates = DFA30_transitionS.length;
+        DFA30_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA30_transition[i] = DFA.unpackEncodedString(DFA30_transitionS[i]);
+        }
+    }
+
+    class DFA30 extends DFA {
+
+        public DFA30(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 30;
+            this.eot = DFA30_eot;
+            this.eof = DFA30_eof;
+            this.min = DFA30_min;
+            this.max = DFA30_max;
+            this.accept = DFA30_accept;
+            this.special = DFA30_special;
+            this.transition = DFA30_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 239:45: ( ( COMMA )? attr= rule_attribute )*";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA30_11 = input.LA(1);
+
+                         
+                        int index30_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
+
+                         
+                        input.seek(index30_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA30_19 = input.LA(1);
+
+                         
+                        int index30_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
+
+                         
+                        input.seek(index30_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA30_15 = input.LA(1);
+
+                         
+                        int index30_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
+
+                         
+                        input.seek(index30_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA30_1 = input.LA(1);
+
+                         
+                        int index30_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 4;}
+
+                        else if ( (LA30_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 5;}
+
+                        else if ( (LA30_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 6;}
+
+                        else if ( (LA30_1==ID||LA30_1==COLON||LA30_1==THEN) && ((validateIdentifierKey("when")))) {s = 7;}
+
+                        else if ( (LA30_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 8;}
+
+                        else if ( (LA30_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 9;}
+
+                         
+                        input.seek(index30_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA30_20 = input.LA(1);
+
+                         
+                        int index30_20 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA30_20>=VT_COMPILATION_UNIT && LA30_20<=ID)||(LA30_20>=DOT_STAR && LA30_20<=STRING)||(LA30_20>=COMMA && LA30_20<=NULL)||(LA30_20>=RIGHT_SQUARE && LA30_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                        else if ( (LA30_20==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
+                        else if ( (LA30_20==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+
+                        else if ( (LA30_20==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+
+                         
+                        input.seek(index30_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA30_17 = input.LA(1);
+
+                         
+                        int index30_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_17==RIGHT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 21;}
+
+                        else if ( ((LA30_17>=VT_COMPILATION_UNIT && LA30_17<=LEFT_SQUARE)||(LA30_17>=THEN && LA30_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA30_10 = input.LA(1);
+
+                         
+                        int index30_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_10==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 13;}
+
+                        else if ( (LA30_10==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 14;}
+
+                        else if ( (LA30_10==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 15;}
+
+                        else if ( (LA30_10==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+
+                        else if ( (LA30_10==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
+                        else if ( ((LA30_10>=VT_COMPILATION_UNIT && LA30_10<=SEMICOLON)||(LA30_10>=DOT_STAR && LA30_10<=STRING)||(LA30_10>=COMMA && LA30_10<=RIGHT_PAREN)||(LA30_10>=BOOL && LA30_10<=NULL)||(LA30_10>=RIGHT_SQUARE && LA30_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA30_18 = input.LA(1);
+
+                         
+                        int index30_18 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_18==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
+
+                        else if ( (LA30_18==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
+
+                        else if ( (LA30_18==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
+
+                        else if ( ((LA30_18>=VT_COMPILATION_UNIT && LA30_18<=ID)||(LA30_18>=DOT_STAR && LA30_18<=STRING)||(LA30_18>=COMMA && LA30_18<=NULL)||(LA30_18>=RIGHT_SQUARE && LA30_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_18);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA30_6 = input.LA(1);
+
+                         
+                        int index30_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_6==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 10;}
+
+                        else if ( (LA30_6==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 11;}
+
+                        else if ( ((LA30_6>=VT_COMPILATION_UNIT && LA30_6<=SEMICOLON)||(LA30_6>=DOT && LA30_6<=STRING)||(LA30_6>=COMMA && LA30_6<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA30_21 = input.LA(1);
+
+                         
+                        int index30_21 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_21==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+
+                        else if ( (LA30_21==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
+                        else if ( ((LA30_21>=VT_COMPILATION_UNIT && LA30_21<=STRING)||(LA30_21>=COMMA && LA30_21<=NULL)||(LA30_21>=RIGHT_SQUARE && LA30_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_21);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA30_14 = input.LA(1);
+
+                         
+                        int index30_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
+
+                         
+                        input.seek(index30_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA30_0 = input.LA(1);
+
+                         
+                        int index30_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("when"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+
+                        else if ( (LA30_0==THEN) ) {s = 2;}
+
+                        else if ( (LA30_0==COMMA) ) {s = 3;}
+
+                         
+                        input.seek(index30_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA30_13 = input.LA(1);
+
+                         
+                        int index30_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA30_13>=VT_COMPILATION_UNIT && LA30_13<=SEMICOLON)||(LA30_13>=DOT && LA30_13<=STRING)||(LA30_13>=COMMA && LA30_13<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                        else if ( (LA30_13==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
+
+                        else if ( (LA30_13==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
+
+                         
+                        input.seek(index30_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA30_16 = input.LA(1);
+
+                         
+                        int index30_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_16==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+
+                        else if ( ((LA30_16>=VT_COMPILATION_UNIT && LA30_16<=SEMICOLON)||(LA30_16>=DOT && LA30_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_16);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 30, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA47_eotS =
+        "\164\uffff";
+    static final String DFA47_eofS =
+        "\164\uffff";
+    static final String DFA47_minS =
+        "\3\125\2\0\1\125\1\0\1\uffff\1\125\1\154\2\uffff\1\126\1\125\1\uffff"+
+        "\1\126\1\132\1\125\1\154\1\125\1\126\1\125\1\126\1\132\1\125\2\0"+
+        "\1\125\1\154\2\125\2\0\1\125\1\4\10\125\1\0\2\uffff\1\126\1\132"+
+        "\1\125\1\0\2\125\1\4\10\125\1\0\1\uffff\1\125\1\4\11\0\1\uffff\13"+
+        "\0\1\uffff\16\0\1\uffff\16\0";
+    static final String DFA47_maxS =
+        "\2\132\1\153\2\0\1\132\1\0\1\uffff\1\125\1\154\2\uffff\1\153\1\125"+
+        "\1\uffff\2\153\1\125\1\154\1\134\1\153\1\134\3\153\2\0\1\125\1\154"+
+        "\1\134\1\153\2\0\1\125\1\171\1\125\1\153\6\152\1\0\2\uffff\3\153"+
+        "\1\0\1\140\1\125\1\171\1\125\1\153\6\152\1\0\1\uffff\1\153\1\171"+
+        "\11\0\1\uffff\13\0\1\uffff\16\0\1\uffff\16\0";
+    static final String DFA47_acceptS =
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\13"+
+        "\uffff\1\3\13\uffff\1\3\16\uffff\1\3\16\uffff";
+    static final String DFA47_specialS =
+        "\2\uffff\1\0\1\6\1\7\1\uffff\1\11\22\uffff\1\2\1\12\4\uffff\1\1"+
+        "\1\10\12\uffff\1\5\5\uffff\1\4\13\uffff\1\3\66\uffff}>";
+    static final String[] DFA47_transitionS = {
+            "\1\2\4\uffff\1\1",
+            "\1\3\4\uffff\1\4",
+            "\1\7\1\10\3\uffff\1\6\2\uffff\1\5\15\uffff\1\11",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\14\4\uffff\1\15",
+            "\1\uffff",
+            "",
             "\1\17",
             "\1\20",
             "",
             "",
-            "\1\23\6\uffff\1\21\15\uffff\1\22",
+            "\1\21\3\uffff\1\23\20\uffff\1\22",
             "\1\24",
             "",
-            "\1\25\6\uffff\1\10\15\uffff\1\11",
-            "\1\25\24\uffff\1\11",
+            "\1\10\3\uffff\1\25\20\uffff\1\11",
+            "\1\25\20\uffff\1\11",
             "\1\26",
             "\1\27",
-            "\1\31\1\32\4\uffff\1\30",
-            "\1\35\6\uffff\1\33\15\uffff\1\34",
-            "\1\37\1\40\4\uffff\1\36",
-            "\1\23\6\uffff\1\21\15\uffff\1\22",
-            "\1\23\24\uffff\1\22",
-            "\1\42\5\uffff\1\45\1\44\1\uffff\1\41\1\46\1\47\1\50\1\51\1\52"+
-            "\1\53\5\uffff\1\43",
+            "\1\30\4\uffff\1\31\1\uffff\1\32",
+            "\1\33\3\uffff\1\35\20\uffff\1\34",
+            "\1\36\4\uffff\1\37\1\uffff\1\40",
+            "\1\21\3\uffff\1\23\20\uffff\1\22",
+            "\1\23\20\uffff\1\22",
+            "\1\44\1\43\3\uffff\1\53\2\uffff\1\41\5\uffff\1\45\1\46\1\47"+
+            "\1\50\1\51\1\52\2\uffff\1\42",
             "\1\uffff",
             "\1\uffff",
             "\1\56",
             "\1\57",
-            "\1\61\1\62\4\uffff\1\60",
-            "\1\64\5\uffff\1\67\1\66\1\uffff\1\63\1\70\1\71\1\72\1\73\1\74"+
-            "\1\75\5\uffff\1\65",
+            "\1\60\4\uffff\1\61\1\uffff\1\62",
+            "\1\66\1\65\3\uffff\1\75\2\uffff\1\63\5\uffff\1\67\1\70\1\71"+
+            "\1\72\1\73\1\74\2\uffff\1\64",
             "\1\uffff",
             "\1\uffff",
             "\1\77",
+            "\147\100\1\101\1\102\15\100",
+            "\1\103",
+            "\1\105\3\uffff\1\106\1\104\3\uffff\2\106\11\uffff\2\106\1\107",
+            "\1\110\3\uffff\1\106\1\111\3\uffff\2\106\11\uffff\2\106",
+            "\1\110\3\uffff\1\106\1\111\3\uffff\2\106\11\uffff\2\106",
+            "\1\110\3\uffff\1\106\1\111\3\uffff\2\106\11\uffff\2\106",
+            "\1\110\3\uffff\1\106\1\111\3\uffff\2\106\11\uffff\2\106",
+            "\1\110\3\uffff\1\106\1\111\3\uffff\2\106\11\uffff\2\106",
+            "\1\110\3\uffff\1\106\1\111\3\uffff\2\106\11\uffff\2\106",
             "\1\uffff",
-            "\101\101\1\102\1\103\15\101",
-            "\1\104",
-            "\1\107\5\uffff\1\105\11\uffff\5\106\1\110",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
             "",
             "",
-            "\1\35\6\uffff\1\33\15\uffff\1\34",
-            "\1\35\24\uffff\1\34",
-            "\1\125\5\uffff\1\116\1\115\1\uffff\1\113\1\117\1\120\1\121\1"+
-            "\122\1\123\1\124\5\uffff\1\114",
+            "\1\33\3\uffff\1\35\20\uffff\1\34",
+            "\1\35\20\uffff\1\34",
+            "\1\116\1\115\3\uffff\1\125\2\uffff\1\113\5\uffff\1\117\1\120"+
+            "\1\121\1\122\1\123\1\124\2\uffff\1\114",
             "\1\uffff",
-            "\1\131\1\130\3\uffff\1\127",
+            "\1\127\6\uffff\1\131\3\uffff\1\130",
             "\1\132",
+            "\147\133\1\134\1\135\15\133",
+            "\1\136",
+            "\1\137\3\uffff\1\140\1\141\3\uffff\2\140\11\uffff\2\140\1\142",
+            "\1\143\3\uffff\1\140\1\144\3\uffff\2\140\11\uffff\2\140",
+            "\1\143\3\uffff\1\140\1\144\3\uffff\2\140\11\uffff\2\140",
+            "\1\143\3\uffff\1\140\1\144\3\uffff\2\140\11\uffff\2\140",
+            "\1\143\3\uffff\1\140\1\144\3\uffff\2\140\11\uffff\2\140",
+            "\1\143\3\uffff\1\140\1\144\3\uffff\2\140\11\uffff\2\140",
+            "\1\143\3\uffff\1\140\1\144\3\uffff\2\140\11\uffff\2\140",
             "\1\uffff",
-            "\101\134\1\135\1\136\15\134",
-            "\1\137",
-            "\1\142\5\uffff\1\140\11\uffff\5\141\1\143",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
             "",
-            "\1\157\1\32\1\162\1\161\1\uffff\1\163\1\150\1\147\1\160\1\uffff"+
-            "\1\151\1\152\1\153\1\154\1\155\1\156\5\uffff\1\146",
-            "",
-            "\101\101\1\102\1\103\15\101",
+            "\1\150\1\147\3\uffff\1\157\1\163\1\32\3\uffff\1\162\1\161\1"+
+            "\160\1\151\1\152\1\153\1\154\1\155\1\156\2\uffff\1\146",
+            "\147\100\1\101\1\102\15\100",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -8987,6 +17750,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -9003,7 +17767,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -9014,6 +17777,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -9030,312 +17794,313 @@
             "\1\uffff"
     };
 
-    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
-    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
-    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
-    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
-    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
-    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
-    static final short[][] DFA12_transition;
+    static final short[] DFA47_eot = DFA.unpackEncodedString(DFA47_eotS);
+    static final short[] DFA47_eof = DFA.unpackEncodedString(DFA47_eofS);
+    static final char[] DFA47_min = DFA.unpackEncodedStringToUnsignedChars(DFA47_minS);
+    static final char[] DFA47_max = DFA.unpackEncodedStringToUnsignedChars(DFA47_maxS);
+    static final short[] DFA47_accept = DFA.unpackEncodedString(DFA47_acceptS);
+    static final short[] DFA47_special = DFA.unpackEncodedString(DFA47_specialS);
+    static final short[][] DFA47_transition;
 
     static {
-        int numStates = DFA12_transitionS.length;
-        DFA12_transition = new short[numStates][];
+        int numStates = DFA47_transitionS.length;
+        DFA47_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+            DFA47_transition[i] = DFA.unpackEncodedString(DFA47_transitionS[i]);
         }
     }
 
-    class DFA12 extends DFA {
+    class DFA47 extends DFA {
 
-        public DFA12(BaseRecognizer recognizer) {
+        public DFA47(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 12;
-            this.eot = DFA12_eot;
-            this.eof = DFA12_eof;
-            this.min = DFA12_min;
-            this.max = DFA12_max;
-            this.accept = DFA12_accept;
-            this.special = DFA12_special;
-            this.transition = DFA12_transition;
+            this.decisionNumber = 47;
+            this.eot = DFA47_eot;
+            this.eof = DFA47_eof;
+            this.min = DFA47_min;
+            this.max = DFA47_max;
+            this.accept = DFA47_accept;
+            this.special = DFA47_special;
+            this.transition = DFA47_transition;
         }
         public String getDescription() {
-            return "117:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "351: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 LA12_6 = input.LA(1);
+                        int LA47_2 = input.LA(1);
 
                          
-                        int index12_6 = input.index();
+                        int index47_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("eval")))||synpred6()||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("forall"))))) ) {s = 7;}
+                        if ( (LA47_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 14;}
+                        else if ( (LA47_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))))) {s = 7;}
+
+                        else if ( (LA47_2==DOT) ) {s = 8;}
+
+                        else if ( (LA47_2==LEFT_SQUARE) ) {s = 9;}
+
                          
-                        input.seek(index12_6);
+                        input.seek(index47_2);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA12_2 = input.LA(1);
+                        int LA47_31 = input.LA(1);
 
                          
-                        int index12_2 = input.index();
+                        int index47_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA12_2==COLON) ) {s = 5;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA12_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 62;}
 
-                        else if ( (LA12_2==ID) && (((synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))))) {s = 7;}
-
-                        else if ( (LA12_2==DOT) ) {s = 8;}
-
-                        else if ( (LA12_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index12_2);
+                        input.seek(index47_31);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA12_26 = input.LA(1);
+                        int LA47_25 = input.LA(1);
 
                          
-                        int index12_26 = input.index();
+                        int index47_25 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 44;}
 
                          
-                        input.seek(index12_26);
+                        input.seek(index47_25);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA12_3 = input.LA(1);
+                        int LA47_61 = input.LA(1);
 
                          
-                        int index12_3 = input.index();
+                        int index47_61 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 101;}
 
                          
-                        input.seek(index12_3);
+                        input.seek(index47_61);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA12_4 = input.LA(1);
+                        int LA47_49 = input.LA(1);
 
                          
-                        int index12_4 = input.index();
+                        int index47_49 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 86;}
 
                          
-                        input.seek(index12_4);
+                        input.seek(index47_49);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA12_52 = input.LA(1);
+                        int LA47_43 = input.LA(1);
 
                          
-                        int index12_52 = input.index();
+                        int index47_43 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 91;}
+                        else if ( (true) ) {s = 74;}
 
                          
-                        input.seek(index12_52);
+                        input.seek(index47_43);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA12_32 = input.LA(1);
+                        int LA47_3 = input.LA(1);
 
                          
-                        int index12_32 = input.index();
+                        int index47_3 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index12_32);
+                        input.seek(index47_3);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA12_34 = input.LA(1);
+                        int LA47_4 = input.LA(1);
 
                          
-                        int index12_34 = input.index();
+                        int index47_4 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index12_34);
+                        input.seek(index47_4);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA12_25 = input.LA(1);
+                        int LA47_32 = input.LA(1);
 
                          
-                        int index12_25 = input.index();
+                        int index47_32 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 44;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index12_25);
+                        input.seek(index47_32);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA12_31 = input.LA(1);
+                        int LA47_6 = input.LA(1);
 
                          
-                        int index12_31 = input.index();
+                        int index47_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (((synpred6()&&(validateIdentifierKey("forall")))||(synpred6()&&(validateIdentifierKey("exists")))||synpred6()||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("eval"))))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 62;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index12_31);
+                        input.seek(index47_6);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA12_49 = input.LA(1);
+                        int LA47_26 = input.LA(1);
 
                          
-                        int index12_49 = input.index();
+                        int index47_26 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 86;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index12_49);
+                        input.seek(index47_26);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 12, _s, input);
+                new NoViableAltException(getDescription(), 47, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA13_eotS =
+    static final String DFA48_eotS =
         "\164\uffff";
-    static final String DFA13_eofS =
+    static final String DFA48_eofS =
         "\164\uffff";
-    static final String DFA13_minS =
-        "\3\60\2\0\1\60\1\0\1\66\1\106\3\uffff\1\60\1\66\1\uffff\2\60\1\66"+
-        "\1\106\6\60\2\0\1\66\1\106\2\60\2\0\1\66\1\0\1\4\1\66\7\60\2\uffff"+
-        "\3\60\1\0\1\61\1\66\1\0\1\4\1\66\7\60\1\uffff\1\60\1\uffff\1\4\24"+
-        "\0\1\uffff\4\0\1\uffff\30\0";
-    static final String DFA13_maxS =
-        "\2\66\1\105\2\0\1\66\1\0\1\66\1\106\3\uffff\1\105\1\66\1\uffff\2"+
-        "\105\1\66\1\106\1\66\1\105\1\66\3\105\2\0\1\66\1\106\1\66\1\105"+
-        "\2\0\1\66\1\0\1\123\1\66\1\105\6\104\2\uffff\3\105\1\0\2\66\1\0"+
-        "\1\123\1\66\1\105\6\104\1\uffff\1\105\1\uffff\1\123\24\0\1\uffff"+
-        "\4\0\1\uffff\30\0";
-    static final String DFA13_acceptS =
+    static final String DFA48_minS =
+        "\3\125\2\0\1\125\1\0\1\125\1\154\3\uffff\1\126\1\125\1\uffff\1\126"+
+        "\1\132\1\125\1\154\1\125\1\126\1\125\1\126\1\132\1\125\2\0\1\125"+
+        "\1\154\2\125\2\0\1\125\1\0\1\4\10\125\2\uffff\1\126\1\132\1\125"+
+        "\1\0\2\125\1\4\10\125\1\0\1\uffff\1\125\1\uffff\1\4\24\0\1\uffff"+
+        "\16\0\1\uffff\16\0";
+    static final String DFA48_maxS =
+        "\2\132\1\153\2\0\1\132\1\0\1\125\1\154\3\uffff\1\153\1\125\1\uffff"+
+        "\2\153\1\125\1\154\1\134\1\153\1\134\3\153\2\0\1\125\1\154\1\134"+
+        "\1\153\2\0\1\125\1\0\1\171\1\125\1\153\6\152\2\uffff\3\153\1\0\1"+
+        "\140\1\125\1\171\1\125\1\153\6\152\1\0\1\uffff\1\153\1\uffff\1\171"+
+        "\24\0\1\uffff\16\0\1\uffff\16\0";
+    static final String DFA48_acceptS =
         "\11\uffff\1\1\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1\uffff"+
-        "\1\3\25\uffff\1\3\4\uffff\1\3\30\uffff";
-    static final String DFA13_specialS =
-        "\2\uffff\1\3\1\2\1\5\1\uffff\1\12\22\uffff\1\10\1\1\4\uffff\1\7"+
-        "\1\4\1\uffff\1\6\16\uffff\1\11\2\uffff\1\0\77\uffff}>";
-    static final String[] DFA13_transitionS = {
-            "\1\1\5\uffff\1\2",
-            "\1\4\5\uffff\1\3",
-            "\1\6\5\uffff\1\11\1\7\1\uffff\1\5\13\uffff\1\10",
+        "\1\3\25\uffff\1\3\16\uffff\1\3\16\uffff";
+    static final String DFA48_specialS =
+        "\2\uffff\1\1\1\11\1\7\1\uffff\1\12\22\uffff\1\3\1\6\4\uffff\1\2"+
+        "\1\5\1\uffff\1\0\16\uffff\1\4\13\uffff\1\10\66\uffff}>";
+    static final String[] DFA48_transitionS = {
+            "\1\2\4\uffff\1\1",
+            "\1\3\4\uffff\1\4",
+            "\1\11\1\7\3\uffff\1\6\2\uffff\1\5\15\uffff\1\10",
             "\1\uffff",
             "\1\uffff",
-            "\1\15\5\uffff\1\14",
+            "\1\14\4\uffff\1\15",
             "\1\uffff",
             "\1\17",
             "\1\20",
             "",
             "",
             "",
-            "\1\23\6\uffff\1\21\15\uffff\1\22",
+            "\1\21\3\uffff\1\23\20\uffff\1\22",
             "\1\24",
             "",
-            "\1\25\6\uffff\1\7\15\uffff\1\10",
-            "\1\25\24\uffff\1\10",
+            "\1\7\3\uffff\1\25\20\uffff\1\10",
+            "\1\25\20\uffff\1\10",
             "\1\26",
             "\1\27",
-            "\1\31\1\32\4\uffff\1\30",
-            "\1\35\6\uffff\1\33\15\uffff\1\34",
-            "\1\37\1\40\4\uffff\1\36",
-            "\1\23\6\uffff\1\21\15\uffff\1\22",
-            "\1\23\24\uffff\1\22",
-            "\1\42\5\uffff\1\45\1\44\1\uffff\1\41\1\46\1\47\1\50\1\51\1\52"+
-            "\1\53\5\uffff\1\43",
+            "\1\30\4\uffff\1\31\1\uffff\1\32",
+            "\1\33\3\uffff\1\35\20\uffff\1\34",
+            "\1\36\4\uffff\1\37\1\uffff\1\40",
+            "\1\21\3\uffff\1\23\20\uffff\1\22",
+            "\1\23\20\uffff\1\22",
+            "\1\45\1\44\3\uffff\1\42\2\uffff\1\41\5\uffff\1\46\1\47\1\50"+
+            "\1\51\1\52\1\53\2\uffff\1\43",
             "\1\uffff",
             "\1\uffff",
             "\1\56",
             "\1\57",
-            "\1\61\1\62\4\uffff\1\60",
-            "\1\64\5\uffff\1\67\1\66\1\uffff\1\63\1\70\1\71\1\72\1\73\1\74"+
-            "\1\75\5\uffff\1\65",
+            "\1\60\4\uffff\1\61\1\uffff\1\62",
+            "\1\66\1\65\3\uffff\1\75\2\uffff\1\63\5\uffff\1\67\1\70\1\71"+
+            "\1\72\1\73\1\74\2\uffff\1\64",
             "\1\uffff",
             "\1\uffff",
             "\1\77",
             "\1\uffff",
-            "\101\101\1\102\1\103\15\101",
+            "\147\101\1\102\1\103\15\101",
             "\1\104",
-            "\1\107\5\uffff\1\105\11\uffff\5\106\1\110",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
-            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\105\3\uffff\1\106\1\107\3\uffff\2\106\11\uffff\2\106\1\110",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
             "",
             "",
-            "\1\35\6\uffff\1\33\15\uffff\1\34",
-            "\1\35\24\uffff\1\34",
-            "\1\114\5\uffff\1\117\1\116\1\uffff\1\113\1\120\1\121\1\122\1"+
-            "\123\1\124\1\125\5\uffff\1\115",
+            "\1\33\3\uffff\1\35\20\uffff\1\34",
+            "\1\35\20\uffff\1\34",
+            "\1\116\1\115\3\uffff\1\125\2\uffff\1\113\5\uffff\1\117\1\120"+
+            "\1\121\1\122\1\123\1\124\2\uffff\1\114",
             "\1\uffff",
-            "\1\131\1\130\3\uffff\1\127",
+            "\1\127\6\uffff\1\131\3\uffff\1\130",
             "\1\132",
+            "\147\133\1\134\1\135\15\133",
+            "\1\136",
+            "\1\140\3\uffff\1\141\1\142\3\uffff\2\141\11\uffff\2\141\1\137",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
             "\1\uffff",
-            "\101\134\1\135\1\136\15\134",
-            "\1\137",
-            "\1\142\5\uffff\1\140\11\uffff\5\141\1\143",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
-            "\1\145\5\uffff\1\144\11\uffff\5\141",
             "",
-            "\1\157\1\32\1\162\1\161\1\uffff\1\163\1\150\1\147\1\160\1\uffff"+
-            "\1\151\1\152\1\153\1\154\1\155\1\156\5\uffff\1\146",
+            "\1\150\1\147\3\uffff\1\157\1\163\1\32\3\uffff\1\162\1\161\1"+
+            "\160\1\151\1\152\1\153\1\154\1\155\1\156\2\uffff\1\146",
             "",
-            "\101\101\1\102\1\103\15\101",
+            "\147\101\1\102\1\103\15\101",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -9361,7 +18126,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -9372,6 +18136,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -9388,239 +18153,239 @@
             "\1\uffff"
     };
 
-    static final short[] DFA13_eot = DFA.unpackEncodedString(DFA13_eotS);
-    static final short[] DFA13_eof = DFA.unpackEncodedString(DFA13_eofS);
-    static final char[] DFA13_min = DFA.unpackEncodedStringToUnsignedChars(DFA13_minS);
-    static final char[] DFA13_max = DFA.unpackEncodedStringToUnsignedChars(DFA13_maxS);
-    static final short[] DFA13_accept = DFA.unpackEncodedString(DFA13_acceptS);
-    static final short[] DFA13_special = DFA.unpackEncodedString(DFA13_specialS);
-    static final short[][] DFA13_transition;
+    static final short[] DFA48_eot = DFA.unpackEncodedString(DFA48_eotS);
+    static final short[] DFA48_eof = DFA.unpackEncodedString(DFA48_eofS);
+    static final char[] DFA48_min = DFA.unpackEncodedStringToUnsignedChars(DFA48_minS);
+    static final char[] DFA48_max = DFA.unpackEncodedStringToUnsignedChars(DFA48_maxS);
+    static final short[] DFA48_accept = DFA.unpackEncodedString(DFA48_acceptS);
+    static final short[] DFA48_special = DFA.unpackEncodedString(DFA48_specialS);
+    static final short[][] DFA48_transition;
 
     static {
-        int numStates = DFA13_transitionS.length;
-        DFA13_transition = new short[numStates][];
+        int numStates = DFA48_transitionS.length;
+        DFA48_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA13_transition[i] = DFA.unpackEncodedString(DFA13_transitionS[i]);
+            DFA48_transition[i] = DFA.unpackEncodedString(DFA48_transitionS[i]);
         }
     }
 
-    class DFA13 extends DFA {
+    class DFA48 extends DFA {
 
-        public DFA13(BaseRecognizer recognizer) {
+        public DFA48(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 13;
-            this.eot = DFA13_eot;
-            this.eof = DFA13_eof;
-            this.min = DFA13_min;
-            this.max = DFA13_max;
-            this.accept = DFA13_accept;
-            this.special = DFA13_special;
-            this.transition = DFA13_transition;
+            this.decisionNumber = 48;
+            this.eot = DFA48_eot;
+            this.eof = DFA48_eof;
+            this.min = DFA48_min;
+            this.max = DFA48_max;
+            this.accept = DFA48_accept;
+            this.special = DFA48_special;
+            this.transition = DFA48_transition;
         }
         public String getDescription() {
-            return "125:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "359: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 LA13_52 = input.LA(1);
+                        int LA48_34 = input.LA(1);
 
                          
-                        int index13_52 = input.index();
+                        int index48_34 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 91;}
+                        else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index13_52);
+                        input.seek(index48_34);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA13_26 = input.LA(1);
+                        int LA48_2 = input.LA(1);
 
                          
-                        int index13_26 = input.index();
+                        int index48_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (LA48_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (LA48_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA48_2==DOT) ) {s = 7;}
+
+                        else if ( (LA48_2==LEFT_SQUARE) ) {s = 8;}
+
+                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))))) {s = 9;}
+
                          
-                        input.seek(index13_26);
+                        input.seek(index48_2);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA13_3 = input.LA(1);
+                        int LA48_31 = input.LA(1);
 
                          
-                        int index13_3 = input.index();
+                        int index48_31 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 62;}
 
                          
-                        input.seek(index13_3);
+                        input.seek(index48_31);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA13_2 = input.LA(1);
+                        int LA48_25 = input.LA(1);
 
                          
-                        int index13_2 = input.index();
+                        int index48_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA13_2==COLON) ) {s = 5;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (LA13_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 44;}
 
-                        else if ( (LA13_2==DOT) ) {s = 7;}
-
-                        else if ( (LA13_2==LEFT_SQUARE) ) {s = 8;}
-
-                        else if ( (LA13_2==ID) && (((synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))))) {s = 9;}
-
                          
-                        input.seek(index13_2);
+                        input.seek(index48_25);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA13_32 = input.LA(1);
+                        int LA48_49 = input.LA(1);
 
                          
-                        int index13_32 = input.index();
+                        int index48_49 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 86;}
 
                          
-                        input.seek(index13_32);
+                        input.seek(index48_49);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA13_4 = input.LA(1);
+                        int LA48_32 = input.LA(1);
 
                          
-                        int index13_4 = input.index();
+                        int index48_32 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index13_4);
+                        input.seek(index48_32);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA13_34 = input.LA(1);
+                        int LA48_26 = input.LA(1);
 
                          
-                        int index13_34 = input.index();
+                        int index48_26 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index13_34);
+                        input.seek(index48_26);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA13_31 = input.LA(1);
+                        int LA48_4 = input.LA(1);
 
                          
-                        int index13_31 = input.index();
+                        int index48_4 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 62;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index13_31);
+                        input.seek(index48_4);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA13_25 = input.LA(1);
+                        int LA48_61 = input.LA(1);
 
                          
-                        int index13_25 = input.index();
+                        int index48_61 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 44;}
+                        else if ( (true) ) {s = 101;}
 
                          
-                        input.seek(index13_25);
+                        input.seek(index48_61);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA13_49 = input.LA(1);
+                        int LA48_3 = input.LA(1);
 
                          
-                        int index13_49 = input.index();
+                        int index48_3 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 86;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index13_49);
+                        input.seek(index48_3);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA13_6 = input.LA(1);
+                        int LA48_6 = input.LA(1);
 
                          
-                        int index13_6 = input.index();
+                        int index48_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred7()&&(validateIdentifierKey("exists")))||synpred7()||(synpred7()&&(validateIdentifierKey("eval")))||(synpred7()&&(validateIdentifierKey("forall")))||(synpred7()&&(validateIdentifierKey("not"))))) ) {s = 9;}
+                        if ( (((synpred7()&&(validateIdentifierKey("forall")))||synpred7()||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("eval"))))) ) {s = 9;}
 
                         else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index13_6);
+                        input.seek(index48_6);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 13, _s, input);
+                new NoViableAltException(getDescription(), 48, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA18_eotS =
+    static final String DFA53_eotS =
         "\13\uffff";
-    static final String DFA18_eofS =
+    static final String DFA53_eofS =
         "\13\uffff";
-    static final String DFA18_minS =
-        "\1\66\1\60\2\4\1\0\1\61\1\0\4\uffff";
-    static final String DFA18_maxS =
-        "\1\66\1\60\2\123\1\0\1\66\1\0\4\uffff";
-    static final String DFA18_acceptS =
-        "\7\uffff\1\1\1\2\1\1\1\2";
-    static final String DFA18_specialS =
-        "\4\uffff\1\1\1\0\1\2\4\uffff}>";
-    static final String[] DFA18_transitionS = {
+    static final String DFA53_minS =
+        "\1\125\1\132\2\4\1\0\1\125\1\0\4\uffff";
+    static final String DFA53_maxS =
+        "\1\125\1\132\2\171\1\0\1\134\1\0\4\uffff";
+    static final String DFA53_acceptS =
+        "\7\uffff\1\1\2\2\1\1";
+    static final String DFA53_specialS =
+        "\4\uffff\1\0\1\2\1\1\4\uffff}>";
+    static final String[] DFA53_transitionS = {
             "\1\1",
             "\1\2",
-            "\54\3\1\4\1\5\42\3",
-            "\54\3\1\6\1\5\42\3",
+            "\126\3\1\4\1\3\1\5\35\3",
+            "\126\3\1\6\1\3\1\5\35\3",
             "\1\uffff",
-            "\1\12\3\uffff\2\11",
+            "\1\12\5\uffff\1\12\1\11",
             "\1\uffff",
             "",
             "",
@@ -9628,113 +18393,113 @@
             ""
     };
 
-    static final short[] DFA18_eot = DFA.unpackEncodedString(DFA18_eotS);
-    static final short[] DFA18_eof = DFA.unpackEncodedString(DFA18_eofS);
-    static final char[] DFA18_min = DFA.unpackEncodedStringToUnsignedChars(DFA18_minS);
-    static final char[] DFA18_max = DFA.unpackEncodedStringToUnsignedChars(DFA18_maxS);
-    static final short[] DFA18_accept = DFA.unpackEncodedString(DFA18_acceptS);
-    static final short[] DFA18_special = DFA.unpackEncodedString(DFA18_specialS);
-    static final short[][] DFA18_transition;
+    static final short[] DFA53_eot = DFA.unpackEncodedString(DFA53_eotS);
+    static final short[] DFA53_eof = DFA.unpackEncodedString(DFA53_eofS);
+    static final char[] DFA53_min = DFA.unpackEncodedStringToUnsignedChars(DFA53_minS);
+    static final char[] DFA53_max = DFA.unpackEncodedStringToUnsignedChars(DFA53_maxS);
+    static final short[] DFA53_accept = DFA.unpackEncodedString(DFA53_acceptS);
+    static final short[] DFA53_special = DFA.unpackEncodedString(DFA53_specialS);
+    static final short[][] DFA53_transition;
 
     static {
-        int numStates = DFA18_transitionS.length;
-        DFA18_transition = new short[numStates][];
+        int numStates = DFA53_transitionS.length;
+        DFA53_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA18_transition[i] = DFA.unpackEncodedString(DFA18_transitionS[i]);
+            DFA53_transition[i] = DFA.unpackEncodedString(DFA53_transitionS[i]);
         }
     }
 
-    class DFA18 extends DFA {
+    class DFA53 extends DFA {
 
-        public DFA18(BaseRecognizer recognizer) {
+        public DFA53(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 18;
-            this.eot = DFA18_eot;
-            this.eof = DFA18_eof;
-            this.min = DFA18_min;
-            this.max = DFA18_max;
-            this.accept = DFA18_accept;
-            this.special = DFA18_special;
-            this.transition = DFA18_transition;
+            this.decisionNumber = 53;
+            this.eot = DFA53_eot;
+            this.eof = DFA53_eof;
+            this.min = DFA53_min;
+            this.max = DFA53_max;
+            this.accept = DFA53_accept;
+            this.special = DFA53_special;
+            this.transition = DFA53_transition;
         }
         public String getDescription() {
-            return "157:3: ( accumulate_init_clause | accumulate_id_clause )";
+            return "391:3: ( accumulate_init_clause | accumulate_id_clause )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA18_5 = input.LA(1);
+                        int LA53_4 = input.LA(1);
 
                          
-                        int index18_5 = input.index();
+                        int index53_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA18_5>=COMMA && LA18_5<=ID)) && ((validateIdentifierKey("init")))) {s = 9;}
+                        if ( ((validateIdentifierKey("init"))) ) {s = 7;}
 
-                        else if ( (LA18_5==RIGHT_PAREN) ) {s = 10;}
+                        else if ( (true) ) {s = 8;}
 
                          
-                        input.seek(index18_5);
+                        input.seek(index53_4);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA18_4 = input.LA(1);
+                        int LA53_6 = input.LA(1);
 
                          
-                        int index18_4 = input.index();
+                        int index53_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("init"))) ) {s = 7;}
+                        if ( ((validateIdentifierKey("init"))) ) {s = 10;}
 
-                        else if ( (true) ) {s = 8;}
+                        else if ( (true) ) {s = 9;}
 
                          
-                        input.seek(index18_4);
+                        input.seek(index53_6);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA18_6 = input.LA(1);
+                        int LA53_5 = input.LA(1);
 
                          
-                        int index18_6 = input.index();
+                        int index53_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("init"))) ) {s = 9;}
+                        if ( (LA53_5==RIGHT_PAREN) ) {s = 9;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (LA53_5==ID||LA53_5==COMMA) && ((validateIdentifierKey("init")))) {s = 10;}
 
                          
-                        input.seek(index18_6);
+                        input.seek(index53_5);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 18, _s, input);
+                new NoViableAltException(getDescription(), 53, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA22_eotS =
+    static final String DFA57_eotS =
         "\13\uffff";
-    static final String DFA22_eofS =
+    static final String DFA57_eofS =
         "\13\uffff";
-    static final String DFA22_minS =
-        "\1\66\1\60\2\4\1\0\1\61\1\0\4\uffff";
-    static final String DFA22_maxS =
-        "\1\66\1\60\2\123\1\0\1\66\1\0\4\uffff";
-    static final String DFA22_acceptS =
+    static final String DFA57_minS =
+        "\1\125\1\132\2\4\1\0\1\125\1\0\4\uffff";
+    static final String DFA57_maxS =
+        "\1\125\1\132\2\171\1\0\1\134\1\0\4\uffff";
+    static final String DFA57_acceptS =
         "\7\uffff\1\1\1\2\1\1\1\2";
-    static final String DFA22_specialS =
-        "\1\4\1\6\1\0\1\5\1\2\1\1\1\3\4\uffff}>";
-    static final String[] DFA22_transitionS = {
+    static final String DFA57_specialS =
+        "\1\3\1\5\1\6\1\4\1\1\1\0\1\2\4\uffff}>";
+    static final String[] DFA57_transitionS = {
             "\1\1",
             "\1\2",
-            "\54\3\1\4\1\5\42\3",
-            "\54\3\1\6\1\5\42\3",
+            "\126\3\1\4\1\3\1\5\35\3",
+            "\126\3\1\6\1\3\1\5\35\3",
             "\1\uffff",
-            "\1\12\3\uffff\2\11",
+            "\1\11\5\uffff\1\11\1\12",
             "\1\uffff",
             "",
             "",
@@ -9742,487 +18507,507 @@
             ""
     };
 
-    static final short[] DFA22_eot = DFA.unpackEncodedString(DFA22_eotS);
-    static final short[] DFA22_eof = DFA.unpackEncodedString(DFA22_eofS);
-    static final char[] DFA22_min = DFA.unpackEncodedStringToUnsignedChars(DFA22_minS);
-    static final char[] DFA22_max = DFA.unpackEncodedStringToUnsignedChars(DFA22_maxS);
-    static final short[] DFA22_accept = DFA.unpackEncodedString(DFA22_acceptS);
-    static final short[] DFA22_special = DFA.unpackEncodedString(DFA22_specialS);
-    static final short[][] DFA22_transition;
+    static final short[] DFA57_eot = DFA.unpackEncodedString(DFA57_eotS);
+    static final short[] DFA57_eof = DFA.unpackEncodedString(DFA57_eofS);
+    static final char[] DFA57_min = DFA.unpackEncodedStringToUnsignedChars(DFA57_minS);
+    static final char[] DFA57_max = DFA.unpackEncodedStringToUnsignedChars(DFA57_maxS);
+    static final short[] DFA57_accept = DFA.unpackEncodedString(DFA57_acceptS);
+    static final short[] DFA57_special = DFA.unpackEncodedString(DFA57_specialS);
+    static final short[][] DFA57_transition;
 
     static {
-        int numStates = DFA22_transitionS.length;
-        DFA22_transition = new short[numStates][];
+        int numStates = DFA57_transitionS.length;
+        DFA57_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA22_transition[i] = DFA.unpackEncodedString(DFA22_transitionS[i]);
+            DFA57_transition[i] = DFA.unpackEncodedString(DFA57_transitionS[i]);
         }
     }
 
-    class DFA22 extends DFA {
+    class DFA57 extends DFA {
 
-        public DFA22(BaseRecognizer recognizer) {
+        public DFA57(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 22;
-            this.eot = DFA22_eot;
-            this.eof = DFA22_eof;
-            this.min = DFA22_min;
-            this.max = DFA22_max;
-            this.accept = DFA22_accept;
-            this.special = DFA22_special;
-            this.transition = DFA22_transition;
+            this.decisionNumber = 57;
+            this.eot = DFA57_eot;
+            this.eof = DFA57_eof;
+            this.min = DFA57_min;
+            this.max = DFA57_max;
+            this.accept = DFA57_accept;
+            this.special = DFA57_special;
+            this.transition = DFA57_transition;
         }
         public String getDescription() {
-            return "168:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+            return "402:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA22_2 = input.LA(1);
+                        int LA57_5 = input.LA(1);
 
                          
-                        int index22_2 = input.index();
+                        int index57_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA22_2>=VT_FACT && LA22_2<=VK_COLLECT)||(LA22_2>=DOUBLE_PIPE && LA22_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
+                        if ( (LA57_5==ID||LA57_5==COMMA) && ((validateIdentifierKey("reverse")))) {s = 9;}
 
-                        else if ( (LA22_2==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 4;}
+                        else if ( (LA57_5==RIGHT_PAREN) && ((validateIdentifierKey("result")))) {s = 10;}
 
-                        else if ( (LA22_2==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
-
                          
-                        input.seek(index22_2);
+                        input.seek(index57_5);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA22_5 = input.LA(1);
+                        int LA57_4 = input.LA(1);
 
                          
-                        int index22_5 = input.index();
+                        int index57_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA22_5>=COMMA && LA22_5<=ID)) && ((validateIdentifierKey("reverse")))) {s = 9;}
+                        if ( ((validateIdentifierKey("reverse"))) ) {s = 7;}
 
-                        else if ( (LA22_5==RIGHT_PAREN) && ((validateIdentifierKey("result")))) {s = 10;}
+                        else if ( ((validateIdentifierKey("result"))) ) {s = 8;}
 
                          
-                        input.seek(index22_5);
+                        input.seek(index57_4);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA22_4 = input.LA(1);
+                        int LA57_6 = input.LA(1);
 
                          
-                        int index22_4 = input.index();
+                        int index57_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("reverse"))) ) {s = 7;}
+                        if ( ((validateIdentifierKey("reverse"))) ) {s = 9;}
 
-                        else if ( ((validateIdentifierKey("result"))) ) {s = 8;}
+                        else if ( ((validateIdentifierKey("result"))) ) {s = 10;}
 
                          
-                        input.seek(index22_4);
+                        input.seek(index57_6);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA22_6 = input.LA(1);
+                        int LA57_0 = input.LA(1);
 
                          
-                        int index22_6 = input.index();
+                        int index57_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("reverse"))) ) {s = 9;}
+                        if ( (LA57_0==ID) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 1;}
 
-                        else if ( ((validateIdentifierKey("result"))) ) {s = 10;}
-
                          
-                        input.seek(index22_6);
+                        input.seek(index57_0);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA22_0 = input.LA(1);
+                        int LA57_3 = input.LA(1);
 
                          
-                        int index22_0 = input.index();
+                        int index57_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA22_0==ID) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 1;}
+                        if ( (LA57_3==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
 
+                        else if ( ((LA57_3>=VT_COMPILATION_UNIT && LA57_3<=STRING)||LA57_3==COMMA||(LA57_3>=COLON && LA57_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
+
+                        else if ( (LA57_3==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 6;}
+
                          
-                        input.seek(index22_0);
+                        input.seek(index57_3);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA22_3 = input.LA(1);
+                        int LA57_1 = input.LA(1);
 
                          
-                        int index22_3 = input.index();
+                        int index57_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA22_3==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
+                        if ( (LA57_1==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 2;}
 
-                        else if ( ((LA22_3>=VT_FACT && LA22_3<=VK_COLLECT)||(LA22_3>=DOUBLE_PIPE && LA22_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
-
-                        else if ( (LA22_3==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 6;}
-
                          
-                        input.seek(index22_3);
+                        input.seek(index57_1);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA22_1 = input.LA(1);
+                        int LA57_2 = input.LA(1);
 
                          
-                        int index22_1 = input.index();
+                        int index57_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA22_1==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 2;}
+                        if ( ((LA57_2>=VT_COMPILATION_UNIT && LA57_2<=STRING)||LA57_2==COMMA||(LA57_2>=COLON && LA57_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
 
+                        else if ( (LA57_2==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 4;}
+
+                        else if ( (LA57_2==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
+
                          
-                        input.seek(index22_1);
+                        input.seek(index57_2);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 22, _s, input);
+                new NoViableAltException(getDescription(), 57, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA23_eotS =
-        "\25\uffff";
-    static final String DFA23_eofS =
-        "\1\2\24\uffff";
-    static final String DFA23_minS =
-        "\1\60\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 DFA23_maxS =
-        "\1\67\1\123\1\uffff\1\123\1\0\2\uffff\1\123\2\0\3\123\1\0\1\123"+
-        "\1\uffff\1\123\4\0";
-    static final String DFA23_acceptS =
-        "\2\uffff\1\2\2\uffff\2\1\10\uffff\1\1\5\uffff";
-    static final String DFA23_specialS =
-        "\1\uffff\1\3\1\uffff\1\7\1\2\2\uffff\1\11\1\6\1\0\1\12\1\1\1\5\1"+
-        "\4\1\10\1\uffff\1\13\4\uffff}>";
-    static final String[] DFA23_transitionS = {
-            "\1\1\7\2",
-            "\54\5\1\4\1\6\4\5\1\3\35\5",
+    static final String DFA61_eotS =
+        "\26\uffff";
+    static final String DFA61_eofS =
+        "\26\uffff";
+    static final String DFA61_minS =
+        "\1\124\1\uffff\1\4\1\uffff\1\4\1\0\2\uffff\3\4\2\0\1\4\1\0\1\4\1"+
+        "\uffff\1\4\4\0";
+    static final String DFA61_maxS =
+        "\1\155\1\uffff\1\171\1\uffff\1\171\1\0\2\uffff\3\171\2\0\1\171\1"+
+        "\0\1\171\1\uffff\1\171\4\0";
+    static final String DFA61_acceptS =
+        "\1\uffff\1\1\1\uffff\1\3\2\uffff\2\2\10\uffff\1\2\5\uffff";
+    static final String DFA61_specialS =
+        "\1\0\1\uffff\1\4\1\uffff\1\14\1\6\2\uffff\1\11\1\2\1\12\1\1\1\3"+
+        "\1\5\1\10\1\13\1\uffff\1\7\4\uffff}>";
+    static final String[] DFA61_transitionS = {
+            "\3\3\1\uffff\1\3\1\uffff\1\2\2\3\3\uffff\2\3\11\uffff\1\1\1"+
+            "\uffff\1\3",
             "",
-            "\54\5\1\10\1\6\4\5\1\11\1\12\1\5\1\7\13\5\1\13\16\5",
+            "\121\6\1\4\4\6\1\5\1\6\1\7\35\6",
+            "",
+            "\121\6\1\14\1\11\3\6\1\13\1\6\1\7\1\10\15\6\1\12\16\6",
             "\1\uffff",
             "",
             "",
-            "\54\5\1\15\1\6\4\5\1\14\35\5",
+            "\121\6\1\15\4\6\1\16\1\6\1\7\35\6",
+            "\121\6\1\17\4\6\1\20\1\6\1\7\35\6",
+            "\126\6\1\20\1\6\1\7\17\6\1\21\15\6",
             "\1\uffff",
             "\1\uffff",
-            "\54\5\1\17\1\6\4\5\1\16\35\5",
-            "\54\5\1\17\1\6\24\5\1\20\15\5",
-            "\54\5\1\22\1\6\5\5\1\21\15\5\1\23\16\5",
+            "\122\6\1\22\3\6\1\24\1\6\1\7\16\6\1\23\16\6",
             "\1\uffff",
-            "\54\5\1\24\1\6\5\5\1\12\15\5\1\13\16\5",
+            "\122\6\1\11\3\6\1\25\1\6\1\7\16\6\1\12\16\6",
             "",
-            "\54\5\1\24\1\6\23\5\1\13\16\5",
+            "\126\6\1\25\1\6\1\7\16\6\1\12\16\6",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA23_eot = DFA.unpackEncodedString(DFA23_eotS);
-    static final short[] DFA23_eof = DFA.unpackEncodedString(DFA23_eofS);
-    static final char[] DFA23_min = DFA.unpackEncodedStringToUnsignedChars(DFA23_minS);
-    static final char[] DFA23_max = DFA.unpackEncodedStringToUnsignedChars(DFA23_maxS);
-    static final short[] DFA23_accept = DFA.unpackEncodedString(DFA23_acceptS);
-    static final short[] DFA23_special = DFA.unpackEncodedString(DFA23_specialS);
-    static final short[][] DFA23_transition;
+    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
+    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
+    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
+    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
+    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
+    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
+    static final short[][] DFA61_transition;
 
     static {
-        int numStates = DFA23_transitionS.length;
-        DFA23_transition = new short[numStates][];
+        int numStates = DFA61_transitionS.length;
+        DFA61_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA23_transition[i] = DFA.unpackEncodedString(DFA23_transitionS[i]);
+            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
         }
     }
 
-    class DFA23 extends DFA {
+    class DFA61 extends DFA {
 
-        public DFA23(BaseRecognizer recognizer) {
+        public DFA61(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 23;
-            this.eot = DFA23_eot;
-            this.eof = DFA23_eof;
-            this.min = DFA23_min;
-            this.max = DFA23_max;
-            this.accept = DFA23_accept;
-            this.special = DFA23_special;
-            this.transition = DFA23_transition;
+            this.decisionNumber = 61;
+            this.eot = DFA61_eot;
+            this.eof = DFA61_eof;
+            this.min = DFA61_min;
+            this.max = DFA61_max;
+            this.accept = DFA61_accept;
+            this.special = DFA61_special;
+            this.transition = DFA61_transition;
         }
         public String getDescription() {
-            return "191:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
+            return "438:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA23_9 = input.LA(1);
+                        int LA61_0 = input.LA(1);
 
                          
-                        int index23_9 = input.index();
+                        int index61_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 6;}
+                        if ( (LA61_0==LEFT_SQUARE) && (synpred9())) {s = 1;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (LA61_0==LEFT_PAREN) ) {s = 2;}
 
+                        else if ( ((LA61_0>=SEMICOLON && LA61_0<=DOT)||LA61_0==END||(LA61_0>=COMMA && LA61_0<=RIGHT_PAREN)||(LA61_0>=DOUBLE_PIPE && LA61_0<=DOUBLE_AMPER)||LA61_0==THEN) ) {s = 3;}
+
                          
-                        input.seek(index23_9);
+                        input.seek(index61_0);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA23_11 = input.LA(1);
+                        int LA61_11 = input.LA(1);
 
                          
-                        int index23_11 = input.index();
+                        int index61_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_11==RIGHT_SQUARE) ) {s = 16;}
+                        if ( (synpred10()) ) {s = 16;}
 
-                        else if ( (LA23_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( ((LA23_11>=VT_FACT && LA23_11<=VK_COLLECT)||(LA23_11>=DOUBLE_PIPE && LA23_11<=LEFT_SQUARE)||(LA23_11>=LEFT_CURLY && LA23_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA23_11==LEFT_PAREN) && (synpred8())) {s = 15;}
-
                          
-                        input.seek(index23_11);
+                        input.seek(index61_11);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA23_4 = input.LA(1);
+                        int LA61_9 = input.LA(1);
 
                          
-                        int index23_4 = input.index();
+                        int index61_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 6;}
+                        if ( (LA61_9==ID) ) {s = 15;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (LA61_9==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
+                        else if ( ((LA61_9>=VT_COMPILATION_UNIT && LA61_9<=SEMICOLON)||(LA61_9>=DOT && LA61_9<=STRING)||LA61_9==COMMA||(LA61_9>=COLON && LA61_9<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA61_9==LEFT_PAREN) && (synpred10())) {s = 16;}
+
                          
-                        input.seek(index23_4);
+                        input.seek(index61_9);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA23_1 = input.LA(1);
+                        int LA61_12 = input.LA(1);
 
                          
-                        int index23_1 = input.index();
+                        int index61_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_1==ID) ) {s = 3;}
+                        if ( (synpred10()) ) {s = 16;}
 
-                        else if ( (LA23_1==LEFT_PAREN) ) {s = 4;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( ((LA23_1>=VT_FACT && LA23_1<=VK_COLLECT)||(LA23_1>=DOUBLE_PIPE && LA23_1<=COMMA)||(LA23_1>=DOT && LA23_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA23_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
                          
-                        input.seek(index23_1);
+                        input.seek(index61_12);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA23_13 = input.LA(1);
+                        int LA61_2 = input.LA(1);
 
                          
-                        int index23_13 = input.index();
+                        int index61_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 15;}
+                        if ( (LA61_2==ID) ) {s = 4;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (LA61_2==LEFT_PAREN) ) {s = 5;}
 
+                        else if ( ((LA61_2>=VT_COMPILATION_UNIT && LA61_2<=SEMICOLON)||(LA61_2>=DOT && LA61_2<=STRING)||LA61_2==COMMA||(LA61_2>=COLON && LA61_2<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA61_2==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
                          
-                        input.seek(index23_13);
+                        input.seek(index61_2);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA23_12 = input.LA(1);
+                        int LA61_13 = input.LA(1);
 
                          
-                        int index23_12 = input.index();
+                        int index61_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        if ( (LA61_13==DOT) ) {s = 18;}
 
-                        else if ( (LA23_12==DOT) ) {s = 17;}
+                        else if ( (LA61_13==LEFT_SQUARE) ) {s = 19;}
 
-                        else if ( (LA23_12==LEFT_PAREN) ) {s = 18;}
+                        else if ( (LA61_13==LEFT_PAREN) ) {s = 20;}
 
-                        else if ( (LA23_12==LEFT_SQUARE) ) {s = 19;}
+                        else if ( (LA61_13==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
-                        else if ( ((LA23_12>=VT_FACT && LA23_12<=VK_COLLECT)||(LA23_12>=DOUBLE_PIPE && LA23_12<=ID)||(LA23_12>=ARROW && LA23_12<=NULL)||(LA23_12>=RIGHT_SQUARE && LA23_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+                        else if ( ((LA61_13>=VT_COMPILATION_UNIT && LA61_13<=ID)||(LA61_13>=DOT_STAR && LA61_13<=STRING)||LA61_13==COMMA||(LA61_13>=COLON && LA61_13<=NULL)||(LA61_13>=RIGHT_SQUARE && LA61_13<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
 
                          
-                        input.seek(index23_12);
+                        input.seek(index61_13);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA23_8 = input.LA(1);
+                        int LA61_5 = input.LA(1);
 
                          
-                        int index23_8 = input.index();
+                        int index61_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 6;}
+                        if ( (synpred10()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index23_8);
+                        input.seek(index61_5);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA23_3 = input.LA(1);
+                        int LA61_17 = input.LA(1);
 
                          
-                        int index23_3 = input.index();
+                        int index61_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_3==COLON) ) {s = 7;}
+                        if ( (LA61_17==LEFT_PAREN) ) {s = 21;}
 
-                        else if ( (LA23_3==LEFT_PAREN) ) {s = 8;}
+                        else if ( (LA61_17==LEFT_SQUARE) ) {s = 10;}
 
-                        else if ( (LA23_3==ID) ) {s = 9;}
+                        else if ( (LA61_17==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
-                        else if ( (LA23_3==DOT) ) {s = 10;}
+                        else if ( ((LA61_17>=VT_COMPILATION_UNIT && LA61_17<=STRING)||LA61_17==COMMA||(LA61_17>=COLON && LA61_17<=NULL)||(LA61_17>=RIGHT_SQUARE && LA61_17<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
 
-                        else if ( (LA23_3==LEFT_SQUARE) ) {s = 11;}
+                         
+                        input.seek(index61_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA61_14 = input.LA(1);
 
-                        else if ( (LA23_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                         
+                        int index61_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 16;}
 
-                        else if ( ((LA23_3>=VT_FACT && LA23_3<=VK_COLLECT)||(LA23_3>=DOUBLE_PIPE && LA23_3<=COMMA)||LA23_3==ARROW||(LA23_3>=EQUAL && LA23_3<=NULL)||(LA23_3>=RIGHT_SQUARE && LA23_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+                        else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index23_3);
+                        input.seek(index61_14);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
-                        int LA23_14 = input.LA(1);
+                    case 9 : 
+                        int LA61_8 = input.LA(1);
 
                          
-                        int index23_14 = input.index();
+                        int index61_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_14==LEFT_SQUARE) ) {s = 11;}
+                        if ( (LA61_8==ID) ) {s = 13;}
 
-                        else if ( (LA23_14==LEFT_PAREN) ) {s = 20;}
+                        else if ( (LA61_8==LEFT_PAREN) ) {s = 14;}
 
-                        else if ( (LA23_14==DOT) ) {s = 10;}
+                        else if ( (LA61_8==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
-                        else if ( (LA23_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( ((LA61_8>=VT_COMPILATION_UNIT && LA61_8<=SEMICOLON)||(LA61_8>=DOT && LA61_8<=STRING)||LA61_8==COMMA||(LA61_8>=COLON && LA61_8<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
 
-                        else if ( ((LA23_14>=VT_FACT && LA23_14<=VK_COLLECT)||(LA23_14>=DOUBLE_PIPE && LA23_14<=ID)||(LA23_14>=ARROW && LA23_14<=NULL)||(LA23_14>=RIGHT_SQUARE && LA23_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
                          
-                        input.seek(index23_14);
+                        input.seek(index61_8);
                         if ( s>=0 ) return s;
                         break;
-                    case 9 : 
-                        int LA23_7 = input.LA(1);
+                    case 10 : 
+                        int LA61_10 = input.LA(1);
 
                          
-                        int index23_7 = input.index();
+                        int index61_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_7==ID) ) {s = 12;}
+                        if ( (LA61_10==RIGHT_SQUARE) ) {s = 17;}
 
-                        else if ( (LA23_7==LEFT_PAREN) ) {s = 13;}
+                        else if ( (LA61_10==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
-                        else if ( (LA23_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( ((LA61_10>=VT_COMPILATION_UNIT && LA61_10<=STRING)||LA61_10==COMMA||(LA61_10>=COLON && LA61_10<=LEFT_SQUARE)||(LA61_10>=THEN && LA61_10<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
 
-                        else if ( ((LA23_7>=VT_FACT && LA23_7<=VK_COLLECT)||(LA23_7>=DOUBLE_PIPE && LA23_7<=COMMA)||(LA23_7>=DOT && LA23_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+                        else if ( (LA61_10==LEFT_PAREN) && (synpred10())) {s = 16;}
 
                          
-                        input.seek(index23_7);
+                        input.seek(index61_10);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
-                        int LA23_10 = input.LA(1);
+                    case 11 : 
+                        int LA61_15 = input.LA(1);
 
                          
-                        int index23_10 = input.index();
+                        int index61_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_10==ID) ) {s = 14;}
+                        if ( (LA61_15==LEFT_SQUARE) ) {s = 10;}
 
-                        else if ( (LA23_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( (LA61_15==LEFT_PAREN) ) {s = 21;}
 
-                        else if ( ((LA23_10>=VT_FACT && LA23_10<=VK_COLLECT)||(LA23_10>=DOUBLE_PIPE && LA23_10<=COMMA)||(LA23_10>=DOT && LA23_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+                        else if ( (LA61_15==DOT) ) {s = 9;}
 
-                        else if ( (LA23_10==LEFT_PAREN) && (synpred8())) {s = 15;}
+                        else if ( (LA61_15==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
+                        else if ( ((LA61_15>=VT_COMPILATION_UNIT && LA61_15<=ID)||(LA61_15>=DOT_STAR && LA61_15<=STRING)||LA61_15==COMMA||(LA61_15>=COLON && LA61_15<=NULL)||(LA61_15>=RIGHT_SQUARE && LA61_15<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
                          
-                        input.seek(index23_10);
+                        input.seek(index61_15);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
-                        int LA23_16 = input.LA(1);
+                    case 12 : 
+                        int LA61_4 = input.LA(1);
 
                          
-                        int index23_16 = input.index();
+                        int index61_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA23_16==LEFT_PAREN) ) {s = 20;}
+                        if ( (LA61_4==COLON) ) {s = 8;}
 
-                        else if ( (LA23_16==LEFT_SQUARE) ) {s = 11;}
+                        else if ( (LA61_4==DOT) ) {s = 9;}
 
-                        else if ( (LA23_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( (LA61_4==LEFT_SQUARE) ) {s = 10;}
 
-                        else if ( ((LA23_16>=VT_FACT && LA23_16<=VK_COLLECT)||(LA23_16>=DOUBLE_PIPE && LA23_16<=NULL)||(LA23_16>=RIGHT_SQUARE && LA23_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+                        else if ( (LA61_4==LEFT_PAREN) ) {s = 11;}
 
+                        else if ( (LA61_4==ID) ) {s = 12;}
+
+                        else if ( (LA61_4==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_4>=VT_COMPILATION_UNIT && LA61_4<=SEMICOLON)||(LA61_4>=DOT_STAR && LA61_4<=STRING)||LA61_4==COMMA||(LA61_4>=BOOL && LA61_4<=NULL)||(LA61_4>=RIGHT_SQUARE && LA61_4<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
                          
-                        input.seek(index23_16);
+                        input.seek(index61_4);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 23, _s, input);
+                new NoViableAltException(getDescription(), 61, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA38_eotS =
+    static final String DFA74_eotS =
         "\30\uffff";
-    static final String DFA38_eofS =
+    static final String DFA74_eofS =
         "\30\uffff";
-    static final String DFA38_minS =
-        "\1\61\1\uffff\2\60\1\0\1\uffff\1\0\1\60\1\4\2\0\3\4\12\0";
-    static final String DFA38_maxS =
-        "\1\65\1\uffff\1\77\1\105\1\0\1\uffff\1\0\1\105\1\123\2\0\3\123\12"+
-        "\0";
-    static final String DFA38_acceptS =
-        "\1\uffff\1\2\3\uffff\1\1\22\uffff";
-    static final String DFA38_specialS =
-        "\4\uffff\1\0\1\uffff\1\3\2\uffff\1\2\1\1\15\uffff}>";
-    static final String[] DFA38_transitionS = {
-            "\1\1\1\2\1\1\1\uffff\1\1",
+    static final String DFA74_minS =
+        "\1\133\1\uffff\2\125\1\uffff\1\0\1\125\1\0\1\4\2\0\3\4\12\0";
+    static final String DFA74_maxS =
+        "\1\141\1\uffff\1\150\1\153\1\uffff\1\0\1\153\1\0\1\171\2\0\3\171"+
+        "\12\0";
+    static final String DFA74_acceptS =
+        "\1\uffff\1\2\2\uffff\1\1\23\uffff";
+    static final String DFA74_specialS =
+        "\5\uffff\1\1\1\uffff\1\2\1\uffff\1\3\1\0\15\uffff}>";
+    static final String[] DFA74_transitionS = {
+            "\2\1\3\uffff\1\2\1\1",
             "",
-            "\1\4\5\uffff\1\3\3\uffff\6\5",
-            "\1\6\5\uffff\1\7\1\1\1\uffff\7\1\5\5\1\10",
-            "\1\uffff",
+            "\1\3\4\uffff\1\5\10\uffff\6\4",
+            "\1\6\1\1\2\uffff\1\4\1\7\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1\10",
             "",
             "\1\uffff",
-            "\1\13\3\5\1\uffff\1\5\1\11\1\5\10\uffff\5\12\1\14",
-            "\101\15\1\16\1\17\15\15",
+            "\1\11\1\4\2\uffff\1\12\1\13\2\4\1\uffff\2\12\2\4\7\uffff\2\12"+
+            "\1\14",
             "\1\uffff",
+            "\147\15\1\16\1\17\15\15",
             "\1\uffff",
-            "\54\23\1\22\1\24\4\23\1\20\11\23\5\21\17\23",
-            "\101\25\1\26\1\27\15\25",
-            "\101\15\1\16\1\17\15\15",
             "\1\uffff",
+            "\121\23\1\20\3\23\1\21\1\22\1\23\1\24\1\23\2\21\11\23\2\21\17"+
+            "\23",
+            "\147\25\1\26\1\27\15\25",
+            "\147\15\1\16\1\17\15\15",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -10231,145 +19016,150 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA38_eot = DFA.unpackEncodedString(DFA38_eotS);
-    static final short[] DFA38_eof = DFA.unpackEncodedString(DFA38_eofS);
-    static final char[] DFA38_min = DFA.unpackEncodedStringToUnsignedChars(DFA38_minS);
-    static final char[] DFA38_max = DFA.unpackEncodedStringToUnsignedChars(DFA38_maxS);
-    static final short[] DFA38_accept = DFA.unpackEncodedString(DFA38_acceptS);
-    static final short[] DFA38_special = DFA.unpackEncodedString(DFA38_specialS);
-    static final short[][] DFA38_transition;
+    static final short[] DFA74_eot = DFA.unpackEncodedString(DFA74_eotS);
+    static final short[] DFA74_eof = DFA.unpackEncodedString(DFA74_eofS);
+    static final char[] DFA74_min = DFA.unpackEncodedStringToUnsignedChars(DFA74_minS);
+    static final char[] DFA74_max = DFA.unpackEncodedStringToUnsignedChars(DFA74_maxS);
+    static final short[] DFA74_accept = DFA.unpackEncodedString(DFA74_acceptS);
+    static final short[] DFA74_special = DFA.unpackEncodedString(DFA74_specialS);
+    static final short[][] DFA74_transition;
 
     static {
-        int numStates = DFA38_transitionS.length;
-        DFA38_transition = new short[numStates][];
+        int numStates = DFA74_transitionS.length;
+        DFA74_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA38_transition[i] = DFA.unpackEncodedString(DFA38_transitionS[i]);
+            DFA74_transition[i] = DFA.unpackEncodedString(DFA74_transitionS[i]);
         }
     }
 
-    class DFA38 extends DFA {
+    class DFA74 extends DFA {
 
-        public DFA38(BaseRecognizer recognizer) {
+        public DFA74(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 38;
-            this.eot = DFA38_eot;
-            this.eof = DFA38_eof;
-            this.min = DFA38_min;
-            this.max = DFA38_max;
-            this.accept = DFA38_accept;
-            this.special = DFA38_special;
-            this.transition = DFA38_transition;
+            this.decisionNumber = 74;
+            this.eot = DFA74_eot;
+            this.eof = DFA74_eof;
+            this.min = DFA74_min;
+            this.max = DFA74_max;
+            this.accept = DFA74_accept;
+            this.special = DFA74_special;
+            this.transition = DFA74_transition;
         }
         public String getDescription() {
-            return "()* loopback of 271:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 509:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA38_4 = input.LA(1);
+                        int LA74_10 = input.LA(1);
 
                          
-                        int index38_4 = input.index();
+                        int index74_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index38_4);
+                        input.seek(index74_10);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA38_10 = input.LA(1);
+                        int LA74_5 = input.LA(1);
 
                          
-                        int index38_10 = input.index();
+                        int index74_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index38_10);
+                        input.seek(index74_5);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA38_9 = input.LA(1);
+                        int LA74_7 = input.LA(1);
 
                          
-                        int index38_9 = input.index();
+                        int index74_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index38_9);
+                        input.seek(index74_7);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA38_6 = input.LA(1);
+                        int LA74_9 = input.LA(1);
 
                          
-                        int index38_6 = input.index();
+                        int index74_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index38_6);
+                        input.seek(index74_9);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 38, _s, input);
+                new NoViableAltException(getDescription(), 74, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA39_eotS =
-        "\61\uffff";
-    static final String DFA39_eofS =
-        "\1\1\5\uffff\1\4\52\uffff";
-    static final String DFA39_minS =
-        "\1\61\1\uffff\2\60\1\uffff\2\60\2\4\1\60\3\0\5\4\37\0";
-    static final String DFA39_maxS =
-        "\1\65\1\uffff\1\77\1\105\1\uffff\1\77\1\105\2\123\1\105\3\0\5\123"+
-        "\37\0";
-    static final String DFA39_acceptS =
-        "\1\uffff\1\2\2\uffff\1\1\54\uffff";
-    static final String DFA39_specialS =
-        "\12\uffff\1\1\1\0\1\2\44\uffff}>";
-    static final String[] DFA39_transitionS = {
-            "\2\1\1\2\1\uffff\1\1",
+    static final String DFA75_eotS =
+        "\51\uffff";
+    static final String DFA75_eofS =
+        "\1\1\6\uffff\1\4\41\uffff";
+    static final String DFA75_minS =
+        "\1\133\1\uffff\2\125\1\uffff\1\125\1\4\1\125\1\4\1\125\1\0\1\4\2"+
+        "\0\2\4\31\0";
+    static final String DFA75_maxS =
+        "\1\141\1\uffff\1\150\1\153\1\uffff\1\150\1\171\1\153\1\171\1\153"+
+        "\1\0\1\171\2\0\2\171\31\0";
+    static final String DFA75_acceptS =
+        "\1\uffff\1\2\2\uffff\1\1\44\uffff";
+    static final String DFA75_specialS =
+        "\12\uffff\1\2\1\uffff\1\0\1\1\33\uffff}>";
+    static final String[] DFA75_transitionS = {
+            "\2\1\3\uffff\1\1\1\2",
             "",
-            "\1\5\5\uffff\1\3\3\uffff\6\4",
-            "\1\7\5\uffff\1\6\1\1\1\uffff\7\1\5\4\1\10",
+            "\1\3\4\uffff\1\5\10\uffff\6\4",
+            "\1\7\1\1\2\uffff\1\4\1\6\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1\10",
             "",
-            "\1\12\5\uffff\1\11\3\uffff\6\4",
-            "\1\15\3\4\1\uffff\1\4\1\13\1\4\10\uffff\5\14\1\16",
-            "\54\31\1\26\1\30\4\31\1\17\3\31\1\20\1\21\1\22\1\23\1\24\1\25"+
-            "\5\27\17\31",
-            "\101\32\1\33\1\34\15\32",
-            "\1\36\5\uffff\1\35\1\1\1\uffff\7\1\5\4\1\37",
+            "\1\11\4\uffff\1\12\10\uffff\6\4",
+            "\121\25\1\13\3\25\1\24\1\14\1\25\1\15\1\25\2\24\3\25\1\16\1"+
+            "\17\1\20\1\21\1\22\1\23\2\24\17\25",
+            "\1\26\1\4\2\uffff\1\27\1\30\2\4\1\uffff\2\27\2\4\7\uffff\2\27"+
+            "\1\31",
+            "\147\32\1\33\1\34\15\32",
+            "\1\36\1\1\2\uffff\1\4\1\35\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1"+
+            "\37",
             "\1\uffff",
+            "\121\25\1\40\1\45\2\25\1\41\1\42\1\46\1\43\1\25\2\41\11\25\2"+
+            "\41\1\44\16\25",
             "\1\uffff",
             "\1\uffff",
-            "\54\43\1\42\1\44\4\43\1\40\11\43\5\41\17\43",
-            "\101\45\1\46\1\47\15\45",
-            "\54\31\1\52\1\50\3\31\1\56\1\51\1\55\10\31\5\53\1\54\16\31",
-            "\54\31\1\60\1\30\4\31\1\57\11\31\5\53\17\31",
-            "\54\31\1\60\1\30\4\31\1\57\11\31\5\53\17\31",
+            "\121\25\1\47\3\25\1\41\1\50\1\25\1\15\1\25\2\41\11\25\2\41\17"+
+            "\25",
+            "\121\25\1\47\3\25\1\41\1\50\1\25\1\15\1\25\2\41\11\25\2\41\17"+
+            "\25",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -10394,55 +19184,49 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA39_eot = DFA.unpackEncodedString(DFA39_eotS);
-    static final short[] DFA39_eof = DFA.unpackEncodedString(DFA39_eofS);
-    static final char[] DFA39_min = DFA.unpackEncodedStringToUnsignedChars(DFA39_minS);
-    static final char[] DFA39_max = DFA.unpackEncodedStringToUnsignedChars(DFA39_maxS);
-    static final short[] DFA39_accept = DFA.unpackEncodedString(DFA39_acceptS);
-    static final short[] DFA39_special = DFA.unpackEncodedString(DFA39_specialS);
-    static final short[][] DFA39_transition;
+    static final short[] DFA75_eot = DFA.unpackEncodedString(DFA75_eotS);
+    static final short[] DFA75_eof = DFA.unpackEncodedString(DFA75_eofS);
+    static final char[] DFA75_min = DFA.unpackEncodedStringToUnsignedChars(DFA75_minS);
+    static final char[] DFA75_max = DFA.unpackEncodedStringToUnsignedChars(DFA75_maxS);
+    static final short[] DFA75_accept = DFA.unpackEncodedString(DFA75_acceptS);
+    static final short[] DFA75_special = DFA.unpackEncodedString(DFA75_specialS);
+    static final short[][] DFA75_transition;
 
     static {
-        int numStates = DFA39_transitionS.length;
-        DFA39_transition = new short[numStates][];
+        int numStates = DFA75_transitionS.length;
+        DFA75_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA39_transition[i] = DFA.unpackEncodedString(DFA39_transitionS[i]);
+            DFA75_transition[i] = DFA.unpackEncodedString(DFA75_transitionS[i]);
         }
     }
 
-    class DFA39 extends DFA {
+    class DFA75 extends DFA {
 
-        public DFA39(BaseRecognizer recognizer) {
+        public DFA75(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 39;
-            this.eot = DFA39_eot;
-            this.eof = DFA39_eof;
-            this.min = DFA39_min;
-            this.max = DFA39_max;
-            this.accept = DFA39_accept;
-            this.special = DFA39_special;
-            this.transition = DFA39_transition;
+            this.decisionNumber = 75;
+            this.eot = DFA75_eot;
+            this.eof = DFA75_eof;
+            this.min = DFA75_min;
+            this.max = DFA75_max;
+            this.accept = DFA75_accept;
+            this.special = DFA75_special;
+            this.transition = DFA75_transition;
         }
         public String getDescription() {
-            return "()* loopback of 275:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 513:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA39_11 = input.LA(1);
+                        int LA75_12 = input.LA(1);
 
                          
-                        int index39_11 = input.index();
+                        int index75_12 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred12()) ) {s = 4;}
@@ -10450,14 +19234,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index39_11);
+                        input.seek(index75_12);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA39_10 = input.LA(1);
+                        int LA75_13 = input.LA(1);
 
                          
-                        int index39_10 = input.index();
+                        int index75_13 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred12()) ) {s = 4;}
@@ -10465,14 +19249,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index39_10);
+                        input.seek(index75_13);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA39_12 = input.LA(1);
+                        int LA75_10 = input.LA(1);
 
                          
-                        int index39_12 = input.index();
+                        int index75_10 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred12()) ) {s = 4;}
@@ -10480,258 +19264,423 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index39_12);
+                        input.seek(index75_10);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 39, _s, input);
+                new NoViableAltException(getDescription(), 75, _s, input);
             error(nvae);
             throw nvae;
         }
     }
  
 
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block220 = new BitSet(new long[]{0x0041000000000002L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs241 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or262 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or266 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or268 = new BitSet(new long[]{0x0043000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or271 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or290 = new BitSet(new long[]{0x0044000000000002L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or312 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or319 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or324 = new BitSet(new long[]{0x0044000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and362 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and366 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and368 = new BitSet(new long[]{0x0043000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and371 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and390 = new BitSet(new long[]{0x0048000000000002L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and412 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and419 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and424 = new BitSet(new long[]{0x0048000000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary462 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary468 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary474 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary480 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary486 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary489 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary491 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary498 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary512 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exists_key_in_lhs_exist526 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist550 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist557 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist559 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist561 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist574 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not619 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not636 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not643 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not645 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not647 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not655 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_lhs_eval689 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval691 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forall_key_in_lhs_forall712 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall714 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall716 = new BitSet(new long[]{0x0042000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall719 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source749 = new BitSet(new long[]{0x0040000000000002L});
-    public static final BitSet FOLLOW_from_key_in_pattern_source758 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source774 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source790 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source807 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_pattern_source823 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement851 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement855 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement857 = new BitSet(new long[]{0x0060000000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement859 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement867 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement873 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement881 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause908 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause913 = new BitSet(new long[]{0x0060000000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause915 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause919 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause923 = new BitSet(new long[]{0x0060000000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause925 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause931 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause935 = new BitSet(new long[]{0x0060000000000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause937 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause943 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause947 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause996 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause1000 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_key_in_collect_statement1022 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement1026 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement1028 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement1030 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement1050 = new BitSet(new long[]{0x0040000000000000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_name_in_entrypoint_statement1052 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source1072 = new BitSet(new long[]{0x0081000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source1085 = new BitSet(new long[]{0x0080000000000002L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source1092 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain1124 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_ID_in_expression_chain1126 = new BitSet(new long[]{0x0081000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain1146 = new BitSet(new long[]{0x0080000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1168 = new BitSet(new long[]{0x0080000000000002L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain1179 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern1212 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern1225 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_fact_binding1245 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding1251 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding1258 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding1260 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding1262 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression1298 = new BitSet(new long[]{0x0044000000000002L});
-    public static final BitSet FOLLOW_or_key_in_fact_binding_expression1310 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression1316 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression1321 = new BitSet(new long[]{0x0044000000000002L});
-    public static final BitSet FOLLOW_qualified_id_in_fact1350 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact1352 = new BitSet(new long[]{0x0043000000000000L});
-    public static final BitSet FOLLOW_constraints_in_fact1354 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact1357 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints1380 = new BitSet(new long[]{0x0020000000000002L});
-    public static final BitSet FOLLOW_COMMA_in_constraints1384 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_constraint_in_constraints1387 = new BitSet(new long[]{0x0020000000000002L});
-    public static final BitSet FOLLOW_or_constr_in_constraint1401 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr1412 = new BitSet(new long[]{0x0004000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr1416 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr1419 = new BitSet(new long[]{0x0004000000000002L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr1434 = new BitSet(new long[]{0x0008000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr1438 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr1441 = new BitSet(new long[]{0x0008000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_unary_constr1462 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_unary_constr1464 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr1477 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr1482 = new BitSet(new long[]{0x0041000000000000L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr1484 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr1486 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_field_constraint1505 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint1507 = new BitSet(new long[]{0xFD41000000000002L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint1511 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ARROW_in_field_constraint1517 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_field_constraint1519 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint1573 = new BitSet(new long[]{0xFC41000000000000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint1575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_label1599 = new BitSet(new long[]{0x0200000000000000L});
-    public static final BitSet FOLLOW_COLON_in_label1601 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective1617 = new BitSet(new long[]{0x0004000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective1629 = new BitSet(new long[]{0xFC41000000000000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective1632 = new BitSet(new long[]{0x0004000000000002L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective1647 = new BitSet(new long[]{0x0008000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective1659 = new BitSet(new long[]{0xFC41000000000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective1662 = new BitSet(new long[]{0x0008000000000002L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression1684 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression1689 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression1694 = new BitSet(new long[]{0xFC41000000000000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression1696 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression1698 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator1714 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator1720 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator1726 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_LESS_in_simple_operator1732 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator1738 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator1744 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_not_key_in_simple_operator1750 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator1753 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator1756 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator1759 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator1762 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_ID_in_simple_operator1765 = new BitSet(new long[]{0x0041000000000000L,0x000000000000003FL});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator1768 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator1781 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator1787 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator1793 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator1799 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator1805 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_ID_in_simple_operator1811 = new BitSet(new long[]{0x0041000000000000L,0x000000000000003FL});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator1814 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator1819 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator1834 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator1839 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator1841 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator1846 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator1849 = new BitSet(new long[]{0x0022000000000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator1853 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator1856 = new BitSet(new long[]{0x0022000000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator1861 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value1873 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value1878 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value1884 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit368 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit373 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_package_key_in_package_statement400 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_package_id_in_package_statement402 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_package_statement404 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_id426 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOT_in_package_id430 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_package_id432 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement457 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement464 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement470 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement482 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement492 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement497 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_import_statement508 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_import_name_in_import_statement510 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_import_statement512 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_function_import_statement534 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_function_key_in_function_import_statement536 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement538 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_name564 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_DOT_in_import_name568 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_import_name570 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_key_in_global601 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_global603 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_global_id_in_global605 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_global607 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_id633 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_key_in_function651 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_function653 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_function_id_in_function656 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_parameters_in_function658 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function660 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_id690 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_key_in_query707 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_query_id_in_query709 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
+    public static final BitSet FOLLOW_parameters_in_query711 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query714 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_END_in_query716 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_query718 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_id748 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_query_id761 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters777 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters784 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_COMMA_in_parameters787 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters789 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters798 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_param_definition820 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_argument_in_param_definition823 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument834 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument836 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_template_key_in_template849 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_template_id_in_template851 = new BitSet(new long[]{0x0000000000000000L,0x0000000000300000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template853 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_template_slot_in_template858 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
+    public static final BitSet FOLLOW_END_in_template863 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_id893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_template_id906 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_template_slot923 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_slot_id_in_template_slot925 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template_slot927 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_slot_id952 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_key_in_rule970 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_rule_id_in_rule972 = new BitSet(new long[]{0x0000000000000000L,0x0000200000200000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule974 = new BitSet(new long[]{0x0000000000000000L,0x0000200000200000L});
+    public static final BitSet FOLLOW_when_part_in_rule977 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule980 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1009 = new BitSet(new long[]{0x0000000000000002L,0x0000000024200000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1011 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1014 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1035 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1048 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1066 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1068 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1073 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1077 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1082 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1110 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1116 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1123 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1137 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1149 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1155 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1173 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1178 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1190 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1193 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1204 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1207 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1221 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1224 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1236 = new BitSet(new long[]{0x0000000000000000L,0x0000000084000000L});
+    public static final BitSet FOLLOW_INT_in_salience1243 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1252 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1268 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1283 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1300 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1303 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1314 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1317 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1328 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1331 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1342 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_INT_in_duration1345 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect1359 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1380 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1383 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1395 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1416 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1437 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1441 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1443 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1446 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1465 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1487 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1494 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1499 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1537 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1541 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1543 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1546 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1565 = new BitSet(new long[]{0x0000000000000002L,0x0000000200200000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1587 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1594 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1599 = new BitSet(new long[]{0x0000000000000002L,0x0000000200200000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1637 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1643 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1649 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1655 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1661 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1664 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1666 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1673 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1687 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist1701 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1725 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1732 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1734 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1736 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1749 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not1794 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not1811 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not1818 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not1820 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not1822 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not1830 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval1864 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval1866 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall1887 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall1889 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall1891 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall1894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source1924 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source1933 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source1949 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source1965 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source1982 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source1998 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2026 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2030 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2032 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2034 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2042 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2048 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2056 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2083 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2088 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2090 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2094 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2098 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2100 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2110 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2112 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2118 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2122 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2171 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2175 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement2197 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2201 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement2203 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2205 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2225 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id2250 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id2263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source2279 = new BitSet(new long[]{0x0000000000000002L,0x0000000004400000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2292 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2331 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain2333 = new BitSet(new long[]{0x0000000000000002L,0x0000080004400000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain2353 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2375 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2386 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2432 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding2452 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding2458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2465 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2467 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2469 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2505 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2517 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2523 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2528 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_data_type_in_fact2557 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2559 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_constraints_in_fact2561 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2564 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints2587 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints2591 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_constraint_in_constraints2594 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint2608 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2619 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2623 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2626 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2641 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2645 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2648 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr2669 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2671 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr2684 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2689 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr2691 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2693 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint2711 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2713 = new BitSet(new long[]{0x0000000000000002L,0x000001FC04200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2717 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint2723 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2725 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2779 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2781 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label2805 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_COLON_in_label2807 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2823 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2835 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2838 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2853 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2865 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2868 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2890 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2895 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2900 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2902 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2904 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator2920 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator2926 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator2932 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator2938 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator2944 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator2950 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator2956 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator2959 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator2962 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator2965 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator2968 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator2971 = new BitSet(new long[]{0x0000000000000000L,0x00000E00C6200000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator2974 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator2981 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator2987 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator2993 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator2999 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3005 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3011 = new BitSet(new long[]{0x0000000000000000L,0x00000E00C6200000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3014 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3019 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3034 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator3039 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3041 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3046 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3049 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3053 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3056 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3061 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value3073 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3078 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value3084 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_qualified_id1926 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_DOT_in_qualified_id1930 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_ID_in_qualified_id1932 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_qualified_id1939 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_qualified_id1941 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path1966 = new BitSet(new long[]{0x0080000000000002L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path1970 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path1972 = new BitSet(new long[]{0x0080000000000002L});
-    public static final BitSet FOLLOW_ID_in_accessor_element1996 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element1998 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_name2025 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_name2038 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk2059 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data2078 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data2081 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data2095 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data2100 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk2117 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data2139 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data2142 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data2156 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data2161 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk2178 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data2199 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk_data2202 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data2216 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data2221 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key2238 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key2260 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key2282 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key2304 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key2326 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key2348 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key2370 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key2392 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key2414 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key2436 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key2458 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key2480 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_key2502 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key2525 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key2527 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key2529 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_key2554 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_init_key2576 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key2598 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key2620 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key2642 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_collect_key2664 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred1256 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_or_key_in_synpred1258 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_or_key_in_synpred2303 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred2305 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred3356 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_and_key_in_synpred3358 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred4403 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred4405 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_synpred5508 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred6540 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_or_key_in_synpred6543 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred6545 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred7626 = new BitSet(new long[]{0x0040000000000000L});
-    public static final BitSet FOLLOW_or_key_in_synpred7629 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred7631 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred81079 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred91140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred101162 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred111629 = new BitSet(new long[]{0xFC41000000000000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_synpred111632 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred121659 = new BitSet(new long[]{0xFC41000000000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_synpred121662 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_data_type3126 = new BitSet(new long[]{0x0000000000000002L,0x0000080000400000L});
+    public static final BitSet FOLLOW_DOT_in_data_type3130 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_data_type3132 = new BitSet(new long[]{0x0000000000000002L,0x0000080000400000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type3137 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3164 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3177 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path3181 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3183 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element3207 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element3209 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3257 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data3261 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data3267 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3269 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3305 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data3308 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3322 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3327 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3343 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3363 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data3366 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3380 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3385 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3402 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3421 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk_data3424 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3438 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3462 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key3464 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3466 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3492 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key3494 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3496 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3522 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3524 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3526 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3528 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3530 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3556 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key3558 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3560 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3586 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key3588 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3590 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3616 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key3618 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3620 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3646 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key3648 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3650 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3676 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3678 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3680 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key3705 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key3727 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key3749 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key3771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key3793 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key3815 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key3837 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_when_key3859 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key3881 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key3903 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key3925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key3947 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key3969 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key3991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key4013 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key4035 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key4057 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key4079 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key4101 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key4123 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key4145 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key4167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key4189 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key4211 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key4233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key4255 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key4277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4300 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key4302 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4304 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key4329 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key4351 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key4373 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key4395 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key4417 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key4439 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11431 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred11433 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred21478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21480 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31531 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_and_key_in_synpred31533 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred41578 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred51683 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61715 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred61718 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred61720 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred71801 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred71804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred71806 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102369 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred112835 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred112838 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred122865 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred122868 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java	2008-05-08 18:46:10 UTC (rev 19913)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java	2008-05-08 21:16:04 UTC (rev 19914)
@@ -1,5 +1,7 @@
 package org.drools.lang;
 
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g 2008-05-08 18:11:20
+
 import org.antlr.runtime.*;
 import org.antlr.runtime.tree.*;import java.util.Stack;
 import java.util.List;
@@ -7,89 +9,127 @@
 
 public class TreeNewDRL extends TreeParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_FACT", "VT_CONSTRAINTS", "VT_QUALIFIED_ID", "VT_LABEL", "VT_NAME", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "LEFT_PAREN", "RIGHT_PAREN", "DOUBLE_PIPE", "DOUBLE_AMPER", "SEMICOLON", "COMMA", "ID", "DOT", "ARROW", "COLON", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "STRING", "INT", "FLOAT", "BOOL", "NULL", "LEFT_SQUARE", "RIGHT_SQUA!
 RE", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "TILDE", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE", "VK_IMPORT", "VK_P!
 ACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int COMMA=53;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=18;
-    public static final int VT_FACT_OR=23;
-    public static final int VK_NOT=35;
-    public static final int HexDigit=77;
-    public static final int VK_ACCUMULATE=42;
-    public static final int VT_EXPRESSION_CHAIN=20;
-    public static final int ARROW=56;
-    public static final int VT_AND_PREFIX=13;
-    public static final int MISC=73;
-    public static final int FLOAT=66;
-    public static final int VT_CURLY_CHUNK=9;
-    public static final int TILDE=80;
-    public static final int DOT=55;
-    public static final int VT_OR_PREFIX=14;
-    public static final int DOUBLE_PIPE=50;
-    public static final int LESS=61;
-    public static final int VT_PATTERN=21;
-    public static final int EscapeSequence=76;
-    public static final int VK_EXISTS=39;
-    public static final int INT=65;
-    public static final int VT_BIND_FIELD=24;
-    public static final int VK_COLLECT=47;
-    public static final int VK_EVAL=28;
-    public static final int LEFT_SQUARE=69;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=81;
-    public static final int GREATER=59;
-    public static final int VT_FACT=4;
-    public static final int VK_MATCHES=30;
-    public static final int LEFT_CURLY=71;
-    public static final int VT_FACT_BINDING=22;
-    public static final int ID=54;
-    public static final int NOT_EQUAL=63;
-    public static final int DOUBLE_AMPER=51;
-    public static final int LEFT_PAREN=48;
-    public static final int RIGHT_CURLY=72;
-    public static final int BOOL=67;
-    public static final int VT_AND_INFIX=15;
-    public static final int VK_ENTRY_POINT=34;
-    public static final int VT_ACCESSOR_PATH=26;
-    public static final int VT_FROM_SOURCE=19;
-    public static final int VT_LABEL=7;
-    public static final int VK_CONTAINS=29;
-    public static final int VK_SOUNDSLIKE=32;
-    public static final int VT_FIELD=25;
-    public static final int WS=75;
-    public static final int VT_QUALIFIED_ID=6;
-    public static final int VK_AND=38;
-    public static final int STRING=64;
-    public static final int VK_IN=36;
-    public static final int VT_ACCESSOR_ELEMENT=27;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=17;
-    public static final int VK_REVERSE=45;
-    public static final int VK_MEMBEROF=33;
-    public static final int GREATER_EQUAL=60;
-    public static final int VT_OR_INFIX=16;
-    public static final int VK_FORALL=40;
-    public static final int VT_SQUARE_CHUNK=10;
-    public static final int VK_OR=37;
-    public static final int VT_PAREN_CHUNK=11;
-    public static final int VT_NAME=8;
-    public static final int LESS_EQUAL=62;
-    public static final int VK_RESULT=46;
-    public static final int UnicodeEscape=78;
-    public static final int EQUAL=58;
-    public static final int SEMICOLON=52;
-    public static final int VT_AND_IMPLICIT=12;
+    public static final int COMMA=91;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
+    public static final int VK_FUNCTION=62;
+    public static final int VK_DIALECT=51;
+    public static final int END=88;
+    public static final int HexDigit=116;
+    public static final int VK_ATTRIBUTES=54;
+    public static final int VT_EXPRESSION_CHAIN=28;
+    public static final int VK_ACCUMULATE=78;
+    public static final int MISC=112;
+    public static final int VT_AND_PREFIX=21;
+    public static final int VK_QUERY=60;
+    public static final int THEN=109;
+    public static final int VK_AUTO_FOCUS=46;
+    public static final int DOT=86;
+    public static final int VK_IMPORT=57;
+    public static final int VT_SLOT=14;
+    public static final int VT_PACKAGE_ID=37;
+    public static final int LEFT_SQUARE=107;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_DATA_TYPE=36;
+    public static final int VK_MATCHES=66;
+    public static final int VT_FACT=6;
+    public static final int LEFT_CURLY=110;
+    public static final int LEFT_PAREN=90;
+    public static final int DOUBLE_AMPER=97;
+    public static final int VT_QUERY_ID=9;
+    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_LABEL=8;
+    public static final int VT_ENTRYPOINT_ID=12;
+    public static final int VK_SOUNDSLIKE=68;
+    public static final int VK_SALIENCE=52;
+    public static final int VT_FIELD=33;
+    public static final int WS=114;
+    public static final int STRING=89;
+    public static final int VK_AND=74;
+    public static final int VT_ACCESSOR_ELEMENT=35;
+    public static final int VK_REVERSE=81;
+    public static final int VK_GLOBAL=63;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
+    public static final int VK_DURATION=50;
+    public static final int VT_SQUARE_CHUNK=18;
+    public static final int VK_FORALL=76;
+    public static final int VT_COMPILATION_UNIT=4;
+    public static final int VT_PAREN_CHUNK=19;
+    public static final int VK_ENABLED=53;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=117;
+    public static final int VK_PACKAGE=58;
+    public static final int VT_RULE_ID=11;
+    public static final int EQUAL=99;
+    public static final int VK_NO_LOOP=45;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=59;
+    public static final int VT_AND_IMPLICIT=20;
+    public static final int NULL=106;
+    public static final int COLON=93;
+    public static final int MULTI_LINE_COMMENT=121;
+    public static final int VT_RULE_ATTRIBUTES=15;
+    public static final int RIGHT_SQUARE=108;
+    public static final int VK_AGENDA_GROUP=48;
+    public static final int VT_FACT_OR=31;
+    public static final int VK_NOT=71;
+    public static final int VK_DATE_EXPIRES=43;
+    public static final int ARROW=98;
+    public static final int FLOAT=105;
+    public static final int VT_SLOT_ID=13;
+    public static final int VT_CURLY_CHUNK=17;
+    public static final int VT_OR_PREFIX=22;
+    public static final int DOUBLE_PIPE=96;
+    public static final int LESS=102;
+    public static final int VT_PATTERN=29;
+    public static final int VK_DATE_EFFECTIVE=42;
+    public static final int EscapeSequence=115;
+    public static final int VK_EXISTS=75;
+    public static final int INT=95;
+    public static final int VT_BIND_FIELD=32;
+    public static final int VK_RULE=56;
+    public static final int VK_EVAL=64;
+    public static final int VK_COLLECT=83;
+    public static final int GREATER=100;
+    public static final int VT_FACT_BINDING=30;
+    public static final int ID=85;
+    public static final int NOT_EQUAL=104;
+    public static final int RIGHT_CURLY=111;
+    public static final int VK_ENTRY_POINT=70;
+    public static final int BOOL=94;
+    public static final int VT_PARAM_LIST=41;
+    public static final int VT_AND_INFIX=23;
+    public static final int VT_FROM_SOURCE=27;
+    public static final int VK_CONTAINS=65;
+    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VT_FUNCTION_IMPORT=5;
+    public static final int VK_IN=72;
+    public static final int VT_RHS_CHUNK=16;
+    public static final int VK_MEMBEROF=69;
+    public static final int GREATER_EQUAL=101;
+    public static final int VT_OR_INFIX=24;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=73;
+    public static final int VT_GLOBAL_ID=39;
+    public static final int LESS_EQUAL=103;
+    public static final int VK_WHEN=55;
+    public static final int VK_RULEFLOW_GROUP=49;
+    public static final int VT_FUNCTION_ID=40;
     public static final int EOF=-1;
-    public static final int VT_CONSTRAINTS=5;
-    public static final int NULL=68;
-    public static final int EOL=74;
-    public static final int VK_INIT=43;
-    public static final int COLON=57;
-    public static final int OctalEscape=79;
-    public static final int VK_ACTION=44;
-    public static final int MULTI_LINE_COMMENT=83;
-    public static final int VK_FROM=41;
-    public static final int VK_EXCLUDES=31;
-    public static final int RIGHT_PAREN=49;
-    public static final int RIGHT_SQUARE=70;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=82;
+    public static final int VT_CONSTRAINTS=7;
+    public static final int VT_IMPORT_ID=38;
+    public static final int EOL=113;
+    public static final int VK_INIT=79;
+    public static final int VK_ACTIVATION_GROUP=47;
+    public static final int OctalEscape=118;
+    public static final int VK_ACTION=80;
+    public static final int VK_FROM=77;
+    public static final int VK_EXCLUDES=67;
+    public static final int RIGHT_PAREN=92;
+    public static final int VT_TEMPLATE_ID=10;
+    public static final int VK_DECLARE=61;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
 
         public TreeNewDRL(TreeNodeStream input) {
             super(input);
@@ -97,35 +137,1366 @@
         
 
     public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "/Users/porcelli/Desktop/testes/TreeNewDRL.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g"; }
 
+
+
+    // $ANTLR start compilation_unit
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:7:1: compilation_unit : ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    public final void compilation_unit() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:8:2: ( ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:8:4: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            {
+            match(input,VT_COMPILATION_UNIT,FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit30); 
+
+            if ( input.LA(1)==Token.DOWN ) {
+                match(input, Token.DOWN, null); 
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:8:26: ( package_statement )?
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==VK_PACKAGE) ) {
+                    alt1=1;
+                }
+                switch (alt1) {
+                    case 1 :
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:8:26: package_statement
+                        {
+                        pushFollow(FOLLOW_package_statement_in_compilation_unit32);
+                        package_statement();
+                        _fsp--;
+
+
+                        }
+                        break;
+
+                }
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:8:45: ( statement )*
+                loop2:
+                do {
+                    int alt2=2;
+                    int LA2_0 = input.LA(1);
+
+                    if ( (LA2_0==VT_FUNCTION_IMPORT||(LA2_0>=VK_DATE_EFFECTIVE && LA2_0<=VK_ENABLED)||(LA2_0>=VK_RULE && LA2_0<=VK_IMPORT)||(LA2_0>=VK_TEMPLATE && LA2_0<=VK_QUERY)||(LA2_0>=VK_FUNCTION && LA2_0<=VK_GLOBAL)) ) {
+                        alt2=1;
+                    }
+
+
+                    switch (alt2) {
+                	case 1 :
+                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:8:45: statement
+                	    {
+                	    pushFollow(FOLLOW_statement_in_compilation_unit35);
+                	    statement();
+                	    _fsp--;
+
+
+                	    }
+                	    break;
+
+                	default :
+                	    break loop2;
+                    }
+                } while (true);
+
+
+                match(input, Token.UP, null); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end compilation_unit
+
+
+    // $ANTLR start package_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:11:1: package_statement : ^( VK_PACKAGE package_id ) ;
+    public final void package_statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:12:2: ( ^( VK_PACKAGE package_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:12:4: ^( VK_PACKAGE package_id )
+            {
+            match(input,VK_PACKAGE,FOLLOW_VK_PACKAGE_in_package_statement50); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_package_id_in_package_statement52);
+            package_id();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end package_statement
+
+
+    // $ANTLR start package_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:15:1: package_id : ^( VT_PACKAGE_ID ( ID )+ ) ;
+    public final void package_id() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:16:2: ( ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:16:4: ^( VT_PACKAGE_ID ( ID )+ )
+            {
+            match(input,VT_PACKAGE_ID,FOLLOW_VT_PACKAGE_ID_in_package_id65); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:16:20: ( ID )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0==ID) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:16:20: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_package_id67); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end package_id
+
+
+    // $ANTLR start statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:19:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query );
+    public final void statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:20:2: ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query )
+            int alt4=8;
+            switch ( input.LA(1) ) {
+            case VK_DATE_EFFECTIVE:
+            case VK_DATE_EXPIRES:
+            case VK_LOCK_ON_ACTIVE:
+            case VK_NO_LOOP:
+            case VK_AUTO_FOCUS:
+            case VK_ACTIVATION_GROUP:
+            case VK_AGENDA_GROUP:
+            case VK_RULEFLOW_GROUP:
+            case VK_DURATION:
+            case VK_DIALECT:
+            case VK_SALIENCE:
+            case VK_ENABLED:
+                {
+                alt4=1;
+                }
+                break;
+            case VT_FUNCTION_IMPORT:
+                {
+                alt4=2;
+                }
+                break;
+            case VK_IMPORT:
+                {
+                alt4=3;
+                }
+                break;
+            case VK_GLOBAL:
+                {
+                alt4=4;
+                }
+                break;
+            case VK_FUNCTION:
+                {
+                alt4=5;
+                }
+                break;
+            case VK_TEMPLATE:
+                {
+                alt4=6;
+                }
+                break;
+            case VK_RULE:
+                {
+                alt4=7;
+                }
+                break;
+            case VK_QUERY:
+                {
+                alt4=8;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("19:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query );", 4, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt4) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:20:4: rule_attribute
+                    {
+                    pushFollow(FOLLOW_rule_attribute_in_statement80);
+                    rule_attribute();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:21:4: function_import_statement
+                    {
+                    pushFollow(FOLLOW_function_import_statement_in_statement85);
+                    function_import_statement();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:22:4: import_statement
+                    {
+                    pushFollow(FOLLOW_import_statement_in_statement91);
+                    import_statement();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:23:4: global
+                    {
+                    pushFollow(FOLLOW_global_in_statement97);
+                    global();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:24:4: function
+                    {
+                    pushFollow(FOLLOW_function_in_statement103);
+                    function();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:25:4: template
+                    {
+                    pushFollow(FOLLOW_template_in_statement108);
+                    template();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:26:4: rule
+                    {
+                    pushFollow(FOLLOW_rule_in_statement113);
+                    rule();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:27:4: query
+                    {
+                    pushFollow(FOLLOW_query_in_statement118);
+                    query();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end statement
+
+
+    // $ANTLR start import_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:30:1: import_statement : ^( VK_IMPORT import_name ) ;
+    public final void import_statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:31:2: ( ^( VK_IMPORT import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:31:4: ^( VK_IMPORT import_name )
+            {
+            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement130); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_import_name_in_import_statement132);
+            import_name();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end import_statement
+
+
+    // $ANTLR start function_import_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:34:1: function_import_statement : ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) ;
+    public final void function_import_statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:35:2: ( ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:35:4: ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name )
+            {
+            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement145); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement147); 
+            pushFollow(FOLLOW_import_name_in_function_import_statement149);
+            import_name();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end function_import_statement
+
+
+    // $ANTLR start import_name
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:38:1: import_name : ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    public final void import_name() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:39:2: ( ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:39:4: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            {
+            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name162); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:39:19: ( ID )+
+            int cnt5=0;
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( (LA5_0==ID) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:39:19: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_import_name164); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt5 >= 1 ) break loop5;
+                        EarlyExitException eee =
+                            new EarlyExitException(5, input);
+                        throw eee;
+                }
+                cnt5++;
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:39:23: ( DOT_STAR )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==DOT_STAR) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:39:23: DOT_STAR
+                    {
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name167); 
+
+                    }
+                    break;
+
+            }
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end import_name
+
+
+    // $ANTLR start global
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:42:1: global : ^( VK_GLOBAL data_type VT_GLOBAL_ID ) ;
+    public final void global() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:43:2: ( ^( VK_GLOBAL data_type VT_GLOBAL_ID ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:43:4: ^( VK_GLOBAL data_type VT_GLOBAL_ID )
+            {
+            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global181); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_data_type_in_global183);
+            data_type();
+            _fsp--;
+
+            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global185); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end global
+
+
+    // $ANTLR start function
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:46:1: function : ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) ;
+    public final void function() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:47:2: ( ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:47:4: ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk )
+            {
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function198); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:47:18: ( data_type )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==VT_DATA_TYPE) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:47:18: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_function200);
+                    data_type();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function203); 
+            pushFollow(FOLLOW_parameters_in_function205);
+            parameters();
+            _fsp--;
+
+            pushFollow(FOLLOW_curly_chunk_in_function207);
+            curly_chunk();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end function
+
+
+    // $ANTLR start query
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:50:1: query : ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block ) ;
+    public final void query() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:51:2: ( ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:51:4: ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block )
+            {
+            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query220); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query222); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:51:27: ( parameters )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==VT_PARAM_LIST) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:51:27: parameters
+                    {
+                    pushFollow(FOLLOW_parameters_in_query224);
+                    parameters();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_lhs_block_in_query227);
+            lhs_block();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end query
+
+
+    // $ANTLR start parameters
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:54:1: parameters : ^( VT_PARAM_LIST ( param_definition )* ) ;
+    public final void parameters() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:55:2: ( ^( VT_PARAM_LIST ( param_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:55:4: ^( VT_PARAM_LIST ( param_definition )* )
+            {
+            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters240); 
+
+            if ( input.LA(1)==Token.DOWN ) {
+                match(input, Token.DOWN, null); 
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:55:20: ( param_definition )*
+                loop9:
+                do {
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0==VT_DATA_TYPE||LA9_0==ID) ) {
+                        alt9=1;
+                    }
+
+
+                    switch (alt9) {
+                	case 1 :
+                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:55:20: param_definition
+                	    {
+                	    pushFollow(FOLLOW_param_definition_in_parameters242);
+                	    param_definition();
+                	    _fsp--;
+
+
+                	    }
+                	    break;
+
+                	default :
+                	    break loop9;
+                    }
+                } while (true);
+
+
+                match(input, Token.UP, null); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end parameters
+
+
+    // $ANTLR start param_definition
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:58:1: param_definition : ( data_type )? argument ;
+    public final void param_definition() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:59:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:59:4: ( data_type )? argument
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:59:4: ( data_type )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==VT_DATA_TYPE) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:59:4: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_param_definition255);
+                    data_type();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_argument_in_param_definition258);
+            argument();
+            _fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end param_definition
+
+
+    // $ANTLR start argument
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:62:1: argument : ID ( dimension_definition )* ;
+    public final void argument() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:63:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:63:4: ID ( dimension_definition )*
+            {
+            match(input,ID,FOLLOW_ID_in_argument269); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:63:7: ( dimension_definition )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==LEFT_SQUARE) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:63:7: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_argument271);
+            	    dimension_definition();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end argument
+
+
+    // $ANTLR start template
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:67:1: template : ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ ) ;
+    public final void template() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:68:2: ( ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:68:4: ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ )
+            {
+            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template285); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template287); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:68:33: ( template_slot )+
+            int cnt12=0;
+            loop12:
+            do {
+                int alt12=2;
+                int LA12_0 = input.LA(1);
+
+                if ( (LA12_0==VT_SLOT) ) {
+                    alt12=1;
+                }
+
+
+                switch (alt12) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:68:33: template_slot
+            	    {
+            	    pushFollow(FOLLOW_template_slot_in_template289);
+            	    template_slot();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt12 >= 1 ) break loop12;
+                        EarlyExitException eee =
+                            new EarlyExitException(12, input);
+                        throw eee;
+                }
+                cnt12++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end template
+
+
+    // $ANTLR start template_slot
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:71:1: template_slot : ^( VT_SLOT data_type VT_SLOT_ID ) ;
+    public final void template_slot() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:72:2: ( ^( VT_SLOT data_type VT_SLOT_ID ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:72:4: ^( VT_SLOT data_type VT_SLOT_ID )
+            {
+            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot303); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_data_type_in_template_slot305);
+            data_type();
+            _fsp--;
+
+            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot307); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end template_slot
+
+
+    // $ANTLR start rule
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:75:1: rule : ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) ;
+    public final void rule() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:76:2: ( ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:76:4: ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK )
+            {
+            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule320); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule322); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:76:25: ( rule_attributes )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==VT_RULE_ATTRIBUTES) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:76:25: rule_attributes
+                    {
+                    pushFollow(FOLLOW_rule_attributes_in_rule324);
+                    rule_attributes();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:76:42: ( when_part )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==VK_WHEN) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:76:42: when_part
+                    {
+                    pushFollow(FOLLOW_when_part_in_rule327);
+                    when_part();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule330); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end rule
+
+
+    // $ANTLR start when_part
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:79:1: when_part : VK_WHEN lhs_block ;
+    public final void when_part() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:80:2: ( VK_WHEN lhs_block )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:80:4: VK_WHEN lhs_block
+            {
+            match(input,VK_WHEN,FOLLOW_VK_WHEN_in_when_part342); 
+            pushFollow(FOLLOW_lhs_block_in_when_part344);
+            lhs_block();
+            _fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end when_part
+
+
+    // $ANTLR start rule_attributes
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:83:1: rule_attributes : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) ;
+    public final void rule_attributes() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:84:2: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:84:4: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ )
+            {
+            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes356); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:84:25: ( VK_ATTRIBUTES )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==VK_ATTRIBUTES) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:84:25: VK_ATTRIBUTES
+                    {
+                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes358); 
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:84:40: ( rule_attribute )+
+            int cnt16=0;
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( ((LA16_0>=VK_DATE_EFFECTIVE && LA16_0<=VK_ENABLED)) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:84:40: rule_attribute
+            	    {
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes361);
+            	    rule_attribute();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt16 >= 1 ) break loop16;
+                        EarlyExitException eee =
+                            new EarlyExitException(16, input);
+                        throw eee;
+                }
+                cnt16++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end rule_attributes
+
+
+    // $ANTLR start rule_attribute
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:87:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );
+    public final void rule_attribute() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:88:2: ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) )
+            int alt20=12;
+            switch ( input.LA(1) ) {
+            case VK_SALIENCE:
+                {
+                alt20=1;
+                }
+                break;
+            case VK_NO_LOOP:
+                {
+                alt20=2;
+                }
+                break;
+            case VK_AGENDA_GROUP:
+                {
+                alt20=3;
+                }
+                break;
+            case VK_DURATION:
+                {
+                alt20=4;
+                }
+                break;
+            case VK_ACTIVATION_GROUP:
+                {
+                alt20=5;
+                }
+                break;
+            case VK_AUTO_FOCUS:
+                {
+                alt20=6;
+                }
+                break;
+            case VK_DATE_EFFECTIVE:
+                {
+                alt20=7;
+                }
+                break;
+            case VK_DATE_EXPIRES:
+                {
+                alt20=8;
+                }
+                break;
+            case VK_ENABLED:
+                {
+                alt20=9;
+                }
+                break;
+            case VK_RULEFLOW_GROUP:
+                {
+                alt20=10;
+                }
+                break;
+            case VK_LOCK_ON_ACTIVE:
+                {
+                alt20=11;
+                }
+                break;
+            case VK_DIALECT:
+                {
+                alt20=12;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("87:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );", 20, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt20) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:88:4: ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) )
+                    {
+                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute375); 
+
+                    match(input, Token.DOWN, null); 
+                    if ( input.LA(1)==VT_PAREN_CHUNK||input.LA(1)==INT ) {
+                        input.consume();
+                        errorRecovery=false;
+                    }
+                    else {
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rule_attribute377);    throw mse;
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:89:4: ^( VK_NO_LOOP ( BOOL )? )
+                    {
+                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute389); 
+
+                    if ( input.LA(1)==Token.DOWN ) {
+                        match(input, Token.DOWN, null); 
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:89:17: ( BOOL )?
+                        int alt17=2;
+                        int LA17_0 = input.LA(1);
+
+                        if ( (LA17_0==BOOL) ) {
+                            alt17=1;
+                        }
+                        switch (alt17) {
+                            case 1 :
+                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:89:17: BOOL
+                                {
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute391); 
+
+                                }
+                                break;
+
+                        }
+
+
+                        match(input, Token.UP, null); 
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:90:4: ^( VK_AGENDA_GROUP STRING )
+                    {
+                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute401); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute403); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:91:4: ^( VK_DURATION INT )
+                    {
+                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute412); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,INT,FOLLOW_INT_in_rule_attribute414); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:92:4: ^( VK_ACTIVATION_GROUP STRING )
+                    {
+                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute424); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute426); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:93:4: ^( VK_AUTO_FOCUS ( BOOL )? )
+                    {
+                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute434); 
+
+                    if ( input.LA(1)==Token.DOWN ) {
+                        match(input, Token.DOWN, null); 
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:93:20: ( BOOL )?
+                        int alt18=2;
+                        int LA18_0 = input.LA(1);
+
+                        if ( (LA18_0==BOOL) ) {
+                            alt18=1;
+                        }
+                        switch (alt18) {
+                            case 1 :
+                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:93:20: BOOL
+                                {
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute436); 
+
+                                }
+                                break;
+
+                        }
+
+
+                        match(input, Token.UP, null); 
+                    }
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:94:4: ^( VK_DATE_EFFECTIVE STRING )
+                    {
+                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute445); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute447); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:95:4: ^( VK_DATE_EXPIRES STRING )
+                    {
+                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute455); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute457); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:96:4: ^( VK_ENABLED BOOL )
+                    {
+                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute465); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute467); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:97:4: ^( VK_RULEFLOW_GROUP STRING )
+                    {
+                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute475); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute477); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:98:4: ^( VK_LOCK_ON_ACTIVE ( BOOL )? )
+                    {
+                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute485); 
+
+                    if ( input.LA(1)==Token.DOWN ) {
+                        match(input, Token.DOWN, null); 
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:98:24: ( BOOL )?
+                        int alt19=2;
+                        int LA19_0 = input.LA(1);
+
+                        if ( (LA19_0==BOOL) ) {
+                            alt19=1;
+                        }
+                        switch (alt19) {
+                            case 1 :
+                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:98:24: BOOL
+                                {
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute487); 
+
+                                }
+                                break;
+
+                        }
+
+
+                        match(input, Token.UP, null); 
+                    }
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:99:4: ^( VK_DIALECT STRING )
+                    {
+                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute495); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute497); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end rule_attribute
+
+
     // $ANTLR start lhs_block
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:23:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:102:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
     public final void lhs_block() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:4: ^( VT_AND_IMPLICIT ( lhs )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:103:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:103:4: ^( VT_AND_IMPLICIT ( lhs )* )
             {
-            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block43); 
+            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block511); 
 
             if ( input.LA(1)==Token.DOWN ) {
                 match(input, Token.DOWN, null); 
-                // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:22: ( lhs )*
-                loop1:
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:103:22: ( lhs )*
+                loop21:
                 do {
-                    int alt1=2;
-                    int LA1_0 = input.LA(1);
+                    int alt21=2;
+                    int LA21_0 = input.LA(1);
 
-                    if ( ((LA1_0>=VT_AND_PREFIX && LA1_0<=VT_OR_INFIX)||LA1_0==VT_PATTERN||LA1_0==VK_EVAL||LA1_0==VK_NOT||(LA1_0>=VK_EXISTS && LA1_0<=VK_FROM)) ) {
-                        alt1=1;
+                    if ( ((LA21_0>=VT_AND_PREFIX && LA21_0<=VT_OR_INFIX)||LA21_0==VT_PATTERN||LA21_0==VK_EVAL||LA21_0==VK_NOT||(LA21_0>=VK_EXISTS && LA21_0<=VK_FROM)) ) {
+                        alt21=1;
                     }
 
 
-                    switch (alt1) {
+                    switch (alt21) {
                 	case 1 :
-                	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:22: lhs
+                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:103:22: lhs
                 	    {
-                	    pushFollow(FOLLOW_lhs_in_lhs_block45);
+                	    pushFollow(FOLLOW_lhs_in_lhs_block513);
                 	    lhs();
                 	    _fsp--;
 
@@ -134,7 +1505,7 @@
                 	    break;
 
                 	default :
-                	    break loop1;
+                	    break loop21;
                     }
                 } while (true);
 
@@ -157,93 +1528,93 @@
 
 
     // $ANTLR start lhs
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:106:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );
     public final void lhs() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:5: ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern )
-            int alt5=10;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:106:5: ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern )
+            int alt25=10;
             switch ( input.LA(1) ) {
             case VT_OR_PREFIX:
                 {
-                alt5=1;
+                alt25=1;
                 }
                 break;
             case VT_OR_INFIX:
                 {
-                alt5=2;
+                alt25=2;
                 }
                 break;
             case VT_AND_PREFIX:
                 {
-                alt5=3;
+                alt25=3;
                 }
                 break;
             case VT_AND_INFIX:
                 {
-                alt5=4;
+                alt25=4;
                 }
                 break;
             case VK_EXISTS:
                 {
-                alt5=5;
+                alt25=5;
                 }
                 break;
             case VK_NOT:
                 {
-                alt5=6;
+                alt25=6;
                 }
                 break;
             case VK_EVAL:
                 {
-                alt5=7;
+                alt25=7;
                 }
                 break;
             case VK_FORALL:
                 {
-                alt5=8;
+                alt25=8;
                 }
                 break;
             case VK_FROM:
                 {
-                alt5=9;
+                alt25=9;
                 }
                 break;
             case VT_PATTERN:
                 {
-                alt5=10;
+                alt25=10;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("28:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );", 5, 0, input);
+                    new NoViableAltException("106:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );", 25, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt5) {
+            switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:7: ^( VT_OR_PREFIX ( lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:106:7: ^( VT_OR_PREFIX ( lhs )+ )
                     {
-                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs59); 
+                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs526); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:22: ( lhs )+
-                    int cnt2=0;
-                    loop2:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:106:22: ( lhs )+
+                    int cnt22=0;
+                    loop22:
                     do {
-                        int alt2=2;
-                        int LA2_0 = input.LA(1);
+                        int alt22=2;
+                        int LA22_0 = input.LA(1);
 
-                        if ( ((LA2_0>=VT_AND_PREFIX && LA2_0<=VT_OR_INFIX)||LA2_0==VT_PATTERN||LA2_0==VK_EVAL||LA2_0==VK_NOT||(LA2_0>=VK_EXISTS && LA2_0<=VK_FROM)) ) {
-                            alt2=1;
+                        if ( ((LA22_0>=VT_AND_PREFIX && LA22_0<=VT_OR_INFIX)||LA22_0==VT_PATTERN||LA22_0==VK_EVAL||LA22_0==VK_NOT||(LA22_0>=VK_EXISTS && LA22_0<=VK_FROM)) ) {
+                            alt22=1;
                         }
 
 
-                        switch (alt2) {
+                        switch (alt22) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:22: lhs
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:106:22: lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs61);
+                    	    pushFollow(FOLLOW_lhs_in_lhs528);
                     	    lhs();
                     	    _fsp--;
 
@@ -252,12 +1623,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt2 >= 1 ) break loop2;
+                    	    if ( cnt22 >= 1 ) break loop22;
                                 EarlyExitException eee =
-                                    new EarlyExitException(2, input);
+                                    new EarlyExitException(22, input);
                                 throw eee;
                         }
-                        cnt2++;
+                        cnt22++;
                     } while (true);
 
 
@@ -266,16 +1637,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:29:4: ^( VT_OR_INFIX lhs lhs )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:107:4: ^( VT_OR_INFIX lhs lhs )
                     {
-                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs69); 
+                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs536); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs71);
+                    pushFollow(FOLLOW_lhs_in_lhs538);
                     lhs();
                     _fsp--;
 
-                    pushFollow(FOLLOW_lhs_in_lhs73);
+                    pushFollow(FOLLOW_lhs_in_lhs540);
                     lhs();
                     _fsp--;
 
@@ -285,28 +1656,28 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:30:4: ^( VT_AND_PREFIX ( lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:108:4: ^( VT_AND_PREFIX ( lhs )+ )
                     {
-                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs80); 
+                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs547); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:30:20: ( lhs )+
-                    int cnt3=0;
-                    loop3:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:108:20: ( lhs )+
+                    int cnt23=0;
+                    loop23:
                     do {
-                        int alt3=2;
-                        int LA3_0 = input.LA(1);
+                        int alt23=2;
+                        int LA23_0 = input.LA(1);
 
-                        if ( ((LA3_0>=VT_AND_PREFIX && LA3_0<=VT_OR_INFIX)||LA3_0==VT_PATTERN||LA3_0==VK_EVAL||LA3_0==VK_NOT||(LA3_0>=VK_EXISTS && LA3_0<=VK_FROM)) ) {
-                            alt3=1;
+                        if ( ((LA23_0>=VT_AND_PREFIX && LA23_0<=VT_OR_INFIX)||LA23_0==VT_PATTERN||LA23_0==VK_EVAL||LA23_0==VK_NOT||(LA23_0>=VK_EXISTS && LA23_0<=VK_FROM)) ) {
+                            alt23=1;
                         }
 
 
-                        switch (alt3) {
+                        switch (alt23) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:30:20: lhs
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:108:20: lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs82);
+                    	    pushFollow(FOLLOW_lhs_in_lhs549);
                     	    lhs();
                     	    _fsp--;
 
@@ -315,12 +1686,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt3 >= 1 ) break loop3;
+                    	    if ( cnt23 >= 1 ) break loop23;
                                 EarlyExitException eee =
-                                    new EarlyExitException(3, input);
+                                    new EarlyExitException(23, input);
                                 throw eee;
                         }
-                        cnt3++;
+                        cnt23++;
                     } while (true);
 
 
@@ -329,16 +1700,16 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:31:4: ^( VT_AND_INFIX lhs lhs )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:109:4: ^( VT_AND_INFIX lhs lhs )
                     {
-                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs90); 
+                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs557); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs92);
+                    pushFollow(FOLLOW_lhs_in_lhs559);
                     lhs();
                     _fsp--;
 
-                    pushFollow(FOLLOW_lhs_in_lhs94);
+                    pushFollow(FOLLOW_lhs_in_lhs561);
                     lhs();
                     _fsp--;
 
@@ -348,12 +1719,12 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:32:4: ^( VK_EXISTS lhs )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:110:4: ^( VK_EXISTS lhs )
                     {
-                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs101); 
+                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs568); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs103);
+                    pushFollow(FOLLOW_lhs_in_lhs570);
                     lhs();
                     _fsp--;
 
@@ -363,12 +1734,12 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:33:4: ^( VK_NOT lhs )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:111:4: ^( VK_NOT lhs )
                     {
-                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs110); 
+                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs577); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs112);
+                    pushFollow(FOLLOW_lhs_in_lhs579);
                     lhs();
                     _fsp--;
 
@@ -378,40 +1749,40 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:34:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:112:4: ^( VK_EVAL VT_PAREN_CHUNK )
                     {
-                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs120); 
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs587); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs122); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs589); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:35:4: ^( VK_FORALL ( lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:113:4: ^( VK_FORALL ( lhs )+ )
                     {
-                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs129); 
+                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs596); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:35:16: ( lhs )+
-                    int cnt4=0;
-                    loop4:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:113:16: ( lhs )+
+                    int cnt24=0;
+                    loop24:
                     do {
-                        int alt4=2;
-                        int LA4_0 = input.LA(1);
+                        int alt24=2;
+                        int LA24_0 = input.LA(1);
 
-                        if ( ((LA4_0>=VT_AND_PREFIX && LA4_0<=VT_OR_INFIX)||LA4_0==VT_PATTERN||LA4_0==VK_EVAL||LA4_0==VK_NOT||(LA4_0>=VK_EXISTS && LA4_0<=VK_FROM)) ) {
-                            alt4=1;
+                        if ( ((LA24_0>=VT_AND_PREFIX && LA24_0<=VT_OR_INFIX)||LA24_0==VT_PATTERN||LA24_0==VK_EVAL||LA24_0==VK_NOT||(LA24_0>=VK_EXISTS && LA24_0<=VK_FROM)) ) {
+                            alt24=1;
                         }
 
 
-                        switch (alt4) {
+                        switch (alt24) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:35:16: lhs
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:113:16: lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs131);
+                    	    pushFollow(FOLLOW_lhs_in_lhs598);
                     	    lhs();
                     	    _fsp--;
 
@@ -420,12 +1791,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt4 >= 1 ) break loop4;
+                    	    if ( cnt24 >= 1 ) break loop24;
                                 EarlyExitException eee =
-                                    new EarlyExitException(4, input);
+                                    new EarlyExitException(24, input);
                                 throw eee;
                         }
-                        cnt4++;
+                        cnt24++;
                     } while (true);
 
 
@@ -434,16 +1805,16 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:36:4: ^( VK_FROM lhs_pattern from_elements )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:114:4: ^( VK_FROM lhs_pattern from_elements )
                     {
-                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs139); 
+                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs606); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs141);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs608);
                     lhs_pattern();
                     _fsp--;
 
-                    pushFollow(FOLLOW_from_elements_in_lhs143);
+                    pushFollow(FOLLOW_from_elements_in_lhs610);
                     from_elements();
                     _fsp--;
 
@@ -453,9 +1824,9 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:37:4: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:115:4: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs149);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs616);
                     lhs_pattern();
                     _fsp--;
 
@@ -477,71 +1848,71 @@
 
 
     // $ANTLR start from_elements
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:40:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_NAME ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:118:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );
     public final void from_elements() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:2: ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_NAME ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
-            int alt9=4;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:119:2: ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            int alt29=4;
             switch ( input.LA(1) ) {
             case VK_ACCUMULATE:
                 {
-                alt9=1;
+                alt29=1;
                 }
                 break;
             case VK_COLLECT:
                 {
-                alt9=2;
+                alt29=2;
                 }
                 break;
             case VK_ENTRY_POINT:
                 {
-                alt9=3;
+                alt29=3;
                 }
                 break;
             case VT_FROM_SOURCE:
                 {
-                alt9=4;
+                alt29=4;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("40:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_NAME ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );", 9, 0, input);
+                    new NoViableAltException("118:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );", 29, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt9) {
+            switch (alt29) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:4: ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:119:4: ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
                     {
-                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements161); 
+                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements628); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_from_elements163);
+                    pushFollow(FOLLOW_lhs_in_from_elements630);
                     lhs();
                     _fsp--;
 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:24: ( accumulate_init_clause | accumulate_id_clause )
-                    int alt6=2;
-                    int LA6_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:119:24: ( accumulate_init_clause | accumulate_id_clause )
+                    int alt26=2;
+                    int LA26_0 = input.LA(1);
 
-                    if ( (LA6_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
-                        alt6=1;
+                    if ( (LA26_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
+                        alt26=1;
                     }
-                    else if ( (LA6_0==VT_ACCUMULATE_ID_CLAUSE) ) {
-                        alt6=2;
+                    else if ( (LA26_0==VT_ACCUMULATE_ID_CLAUSE) ) {
+                        alt26=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("41:24: ( accumulate_init_clause | accumulate_id_clause )", 6, 0, input);
+                            new NoViableAltException("119:24: ( accumulate_init_clause | accumulate_id_clause )", 26, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt6) {
+                    switch (alt26) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:25: accumulate_init_clause
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:119:25: accumulate_init_clause
                             {
-                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements166);
+                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements633);
                             accumulate_init_clause();
                             _fsp--;
 
@@ -549,9 +1920,9 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:48: accumulate_id_clause
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:119:48: accumulate_id_clause
                             {
-                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements168);
+                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements635);
                             accumulate_id_clause();
                             _fsp--;
 
@@ -567,12 +1938,12 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:42:4: ^( VK_COLLECT lhs )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:120:4: ^( VK_COLLECT lhs )
                     {
-                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements176); 
+                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements643); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_from_elements178);
+                    pushFollow(FOLLOW_lhs_in_from_elements645);
                     lhs();
                     _fsp--;
 
@@ -582,54 +1953,54 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:43:4: ^( VK_ENTRY_POINT VT_NAME )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:121:4: ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID )
                     {
-                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements185); 
+                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements652); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_NAME,FOLLOW_VT_NAME_in_from_elements187); 
+                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements654); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:122:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
                     {
-                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements194); 
+                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements661); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,ID,FOLLOW_ID_in_from_elements196); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:24: ( VT_PAREN_CHUNK )?
-                    int alt7=2;
-                    int LA7_0 = input.LA(1);
+                    match(input,ID,FOLLOW_ID_in_from_elements663); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:122:24: ( VT_PAREN_CHUNK )?
+                    int alt27=2;
+                    int LA27_0 = input.LA(1);
 
-                    if ( (LA7_0==VT_PAREN_CHUNK) ) {
-                        alt7=1;
+                    if ( (LA27_0==VT_PAREN_CHUNK) ) {
+                        alt27=1;
                     }
-                    switch (alt7) {
+                    switch (alt27) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:24: VT_PAREN_CHUNK
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:122:24: VT_PAREN_CHUNK
                             {
-                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements198); 
+                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements665); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:40: ( expression_chain )?
-                    int alt8=2;
-                    int LA8_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:122:40: ( expression_chain )?
+                    int alt28=2;
+                    int LA28_0 = input.LA(1);
 
-                    if ( (LA8_0==VT_EXPRESSION_CHAIN) ) {
-                        alt8=1;
+                    if ( (LA28_0==VT_EXPRESSION_CHAIN) ) {
+                        alt28=1;
                     }
-                    switch (alt8) {
+                    switch (alt28) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:40: expression_chain
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:122:40: expression_chain
                             {
-                            pushFollow(FOLLOW_expression_chain_in_from_elements201);
+                            pushFollow(FOLLOW_expression_chain_in_from_elements668);
                             expression_chain();
                             _fsp--;
 
@@ -659,39 +2030,39 @@
 
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:47:1: accumulate_init_clause : ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:125:1: accumulate_init_clause : ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) ;
     public final void accumulate_init_clause() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:48:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:48:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:126:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:126:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) )
             {
-            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause215); 
+            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause682); 
 
             match(input, Token.DOWN, null); 
-            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause222); 
+            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause689); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause224); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause691); 
 
             match(input, Token.UP, null); 
-            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause232); 
+            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause699); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause234); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause701); 
 
             match(input, Token.UP, null); 
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:51:4: ( accumulate_init_reverse_clause )?
-            int alt10=2;
-            int LA10_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:129:4: ( accumulate_init_reverse_clause )?
+            int alt30=2;
+            int LA30_0 = input.LA(1);
 
-            if ( (LA10_0==VK_REVERSE) ) {
-                alt10=1;
+            if ( (LA30_0==VK_REVERSE) ) {
+                alt30=1;
             }
-            switch (alt10) {
+            switch (alt30) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:51:4: accumulate_init_reverse_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:129:4: accumulate_init_reverse_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause241);
+                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause708);
                     accumulate_init_reverse_clause();
                     _fsp--;
 
@@ -701,10 +2072,10 @@
 
             }
 
-            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause248); 
+            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause715); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause250); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause717); 
 
             match(input, Token.UP, null); 
 
@@ -725,16 +2096,16 @@
 
 
     // $ANTLR start accumulate_init_reverse_clause
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:55:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:133:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
     public final void accumulate_init_reverse_clause() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:56:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:56:4: ^( VK_REVERSE VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:134:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:134:4: ^( VK_REVERSE VT_PAREN_CHUNK )
             {
-            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause264); 
+            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause731); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause266); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause733); 
 
             match(input, Token.UP, null); 
 
@@ -753,17 +2124,17 @@
 
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:60:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:138:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
     public final void accumulate_id_clause() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:61:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:61:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:139:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:139:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
             {
-            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause280); 
+            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause747); 
 
             match(input, Token.DOWN, null); 
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause282); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause284); 
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause749); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause751); 
 
             match(input, Token.UP, null); 
 
@@ -782,16 +2153,16 @@
 
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:64:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:142:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ;
     public final void lhs_pattern() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:65:2: ( ^( VT_PATTERN fact_expression ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:65:4: ^( VT_PATTERN fact_expression )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:143:2: ( ^( VT_PATTERN fact_expression ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:143:4: ^( VT_PATTERN fact_expression )
             {
-            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern297); 
+            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern764); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_fact_expression_in_lhs_pattern299);
+            pushFollow(FOLLOW_fact_expression_in_lhs_pattern766);
             fact_expression();
             _fsp--;
 
@@ -813,171 +2184,171 @@
 
 
     // $ANTLR start fact_expression
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:68:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accesso!
 r_element )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:146:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression )!
  | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );
     public final void fact_expression() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:69:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element !
 )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK )
-            int alt24=28;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:147:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_F!
 IELD ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK )
+            int alt44=28;
             switch ( input.LA(1) ) {
             case DOUBLE_PIPE:
                 {
-                alt24=1;
+                alt44=1;
                 }
                 break;
             case DOUBLE_AMPER:
                 {
-                alt24=2;
+                alt44=2;
                 }
                 break;
             case VT_FACT_BINDING:
                 {
-                alt24=3;
+                alt44=3;
                 }
                 break;
             case VT_FACT:
                 {
-                alt24=4;
+                alt44=4;
                 }
                 break;
             case VT_FACT_OR:
                 {
-                alt24=5;
+                alt44=5;
                 }
                 break;
             case VK_EVAL:
                 {
-                alt24=6;
+                alt44=6;
                 }
                 break;
             case VK_IN:
                 {
-                alt24=7;
+                alt44=7;
                 }
                 break;
             case EQUAL:
                 {
-                alt24=8;
+                alt44=8;
                 }
                 break;
             case GREATER:
                 {
-                alt24=9;
+                alt44=9;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt24=10;
+                alt44=10;
                 }
                 break;
             case LESS:
                 {
-                alt24=11;
+                alt44=11;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt24=12;
+                alt44=12;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt24=13;
+                alt44=13;
                 }
                 break;
             case VK_CONTAINS:
                 {
-                alt24=14;
+                alt44=14;
                 }
                 break;
             case VK_EXCLUDES:
                 {
-                alt24=15;
+                alt44=15;
                 }
                 break;
             case VK_MATCHES:
                 {
-                alt24=16;
+                alt44=16;
                 }
                 break;
             case VK_SOUNDSLIKE:
                 {
-                alt24=17;
+                alt44=17;
                 }
                 break;
             case VK_MEMBEROF:
                 {
-                alt24=18;
+                alt44=18;
                 }
                 break;
             case ID:
                 {
-                alt24=19;
+                alt44=19;
                 }
                 break;
             case VT_BIND_FIELD:
                 {
-                alt24=20;
+                alt44=20;
                 }
                 break;
             case VT_FIELD:
                 {
-                alt24=21;
+                alt44=21;
                 }
                 break;
             case VT_ACCESSOR_PATH:
                 {
-                alt24=22;
+                alt44=22;
                 }
                 break;
             case STRING:
                 {
-                alt24=23;
+                alt44=23;
                 }
                 break;
             case INT:
                 {
-                alt24=24;
+                alt44=24;
                 }
                 break;
             case FLOAT:
                 {
-                alt24=25;
+                alt44=25;
                 }
                 break;
             case BOOL:
                 {
-                alt24=26;
+                alt44=26;
                 }
                 break;
             case NULL:
                 {
-                alt24=27;
+                alt44=27;
                 }
                 break;
             case VT_PAREN_CHUNK:
                 {
-                alt24=28;
+                alt44=28;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("68:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_ele!
 ment )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );", 24, 0, input);
+                    new NoViableAltException("146:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ( f!
 act_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );", 44, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt24) {
+            switch (alt44) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:69:4: ^( DOUBLE_PIPE fact_expression fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:147:4: ^( DOUBLE_PIPE fact_expression fact_expression )
                     {
-                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression312); 
+                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression779); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression314);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression781);
                     fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression316);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression783);
                     fact_expression();
                     _fsp--;
 
@@ -987,16 +2358,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:70:4: ^( DOUBLE_AMPER fact_expression fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:148:4: ^( DOUBLE_AMPER fact_expression fact_expression )
                     {
-                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression323); 
+                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression790); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression325);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression792);
                     fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression327);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression794);
                     fact_expression();
                     _fsp--;
 
@@ -1006,13 +2377,13 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:71:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:149:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
                     {
-                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression334); 
+                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression801); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression336); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression338);
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression803); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression805);
                     fact_expression();
                     _fsp--;
 
@@ -1022,62 +2393,31 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:4: ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:150:4: ^( VT_FACT data_type ( fact_expression )* )
                     {
-                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression345); 
+                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression812); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_QUALIFIED_ID,FOLLOW_VT_QUALIFIED_ID_in_fact_expression348); 
+                    pushFollow(FOLLOW_data_type_in_fact_expression814);
+                    data_type();
+                    _fsp--;
 
-                    match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:32: ( ID )+
-                    int cnt11=0;
-                    loop11:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:150:24: ( fact_expression )*
+                    loop31:
                     do {
-                        int alt11=2;
-                        int LA11_0 = input.LA(1);
+                        int alt31=2;
+                        int LA31_0 = input.LA(1);
 
-                        if ( (LA11_0==ID) ) {
-                            alt11=1;
+                        if ( (LA31_0==VT_FACT||LA31_0==VT_PAREN_CHUNK||(LA31_0>=VT_FACT_BINDING && LA31_0<=VT_ACCESSOR_PATH)||(LA31_0>=VK_EVAL && LA31_0<=VK_MEMBEROF)||LA31_0==VK_IN||LA31_0==ID||LA31_0==STRING||(LA31_0>=BOOL && LA31_0<=DOUBLE_AMPER)||(LA31_0>=EQUAL && LA31_0<=NULL)) ) {
+                            alt31=1;
                         }
 
 
-                        switch (alt11) {
+                        switch (alt31) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:32: ID
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:150:24: fact_expression
                     	    {
-                    	    match(input,ID,FOLLOW_ID_in_fact_expression350); 
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    if ( cnt11 >= 1 ) break loop11;
-                                EarlyExitException eee =
-                                    new EarlyExitException(11, input);
-                                throw eee;
-                        }
-                        cnt11++;
-                    } while (true);
-
-
-                    match(input, Token.UP, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:37: ( fact_expression )*
-                    loop12:
-                    do {
-                        int alt12=2;
-                        int LA12_0 = input.LA(1);
-
-                        if ( (LA12_0==VT_FACT||LA12_0==VT_PAREN_CHUNK||(LA12_0>=VT_FACT_BINDING && LA12_0<=VT_ACCESSOR_PATH)||(LA12_0>=VK_EVAL && LA12_0<=VK_MEMBEROF)||LA12_0==VK_IN||(LA12_0>=DOUBLE_PIPE && LA12_0<=DOUBLE_AMPER)||LA12_0==ID||(LA12_0>=EQUAL && LA12_0<=NULL)) ) {
-                            alt12=1;
-                        }
-
-
-                        switch (alt12) {
-                    	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:37: fact_expression
-                    	    {
-                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression354);
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression816);
                     	    fact_expression();
                     	    _fsp--;
 
@@ -1086,7 +2426,7 @@
                     	    break;
 
                     	default :
-                    	    break loop12;
+                    	    break loop31;
                         }
                     } while (true);
 
@@ -1096,16 +2436,16 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:73:4: ^( VT_FACT_OR fact_expression fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:151:4: ^( VT_FACT_OR fact_expression fact_expression )
                     {
-                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression362); 
+                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression824); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression364);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression826);
                     fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression366);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression828);
                     fact_expression();
                     _fsp--;
 
@@ -1115,58 +2455,58 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:74:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:152:4: ^( VK_EVAL VT_PAREN_CHUNK )
                     {
-                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression373); 
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression835); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression375); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression837); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:153:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
                     {
-                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression382); 
+                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression844); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:12: ( VK_NOT )?
-                    int alt13=2;
-                    int LA13_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:153:12: ( VK_NOT )?
+                    int alt32=2;
+                    int LA32_0 = input.LA(1);
 
-                    if ( (LA13_0==VK_NOT) ) {
-                        alt13=1;
+                    if ( (LA32_0==VK_NOT) ) {
+                        alt32=1;
                     }
-                    switch (alt13) {
+                    switch (alt32) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:12: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:153:12: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression384); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression846); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:20: ( fact_expression )+
-                    int cnt14=0;
-                    loop14:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:153:20: ( fact_expression )+
+                    int cnt33=0;
+                    loop33:
                     do {
-                        int alt14=2;
-                        int LA14_0 = input.LA(1);
+                        int alt33=2;
+                        int LA33_0 = input.LA(1);
 
-                        if ( (LA14_0==VT_FACT||LA14_0==VT_PAREN_CHUNK||(LA14_0>=VT_FACT_BINDING && LA14_0<=VT_ACCESSOR_PATH)||(LA14_0>=VK_EVAL && LA14_0<=VK_MEMBEROF)||LA14_0==VK_IN||(LA14_0>=DOUBLE_PIPE && LA14_0<=DOUBLE_AMPER)||LA14_0==ID||(LA14_0>=EQUAL && LA14_0<=NULL)) ) {
-                            alt14=1;
+                        if ( (LA33_0==VT_FACT||LA33_0==VT_PAREN_CHUNK||(LA33_0>=VT_FACT_BINDING && LA33_0<=VT_ACCESSOR_PATH)||(LA33_0>=VK_EVAL && LA33_0<=VK_MEMBEROF)||LA33_0==VK_IN||LA33_0==ID||LA33_0==STRING||(LA33_0>=BOOL && LA33_0<=DOUBLE_AMPER)||(LA33_0>=EQUAL && LA33_0<=NULL)) ) {
+                            alt33=1;
                         }
 
 
-                        switch (alt14) {
+                        switch (alt33) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:20: fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:153:20: fact_expression
                     	    {
-                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression387);
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression849);
                     	    fact_expression();
                     	    _fsp--;
 
@@ -1175,12 +2515,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt14 >= 1 ) break loop14;
+                    	    if ( cnt33 >= 1 ) break loop33;
                                 EarlyExitException eee =
-                                    new EarlyExitException(14, input);
+                                    new EarlyExitException(33, input);
                                 throw eee;
                         }
-                        cnt14++;
+                        cnt33++;
                     } while (true);
 
 
@@ -1189,12 +2529,12 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:76:4: ^( EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:154:4: ^( EQUAL fact_expression )
                     {
-                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression395); 
+                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression857); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression397);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression859);
                     fact_expression();
                     _fsp--;
 
@@ -1204,12 +2544,12 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:77:4: ^( GREATER fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:155:4: ^( GREATER fact_expression )
                     {
-                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression404); 
+                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression866); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression406);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression868);
                     fact_expression();
                     _fsp--;
 
@@ -1219,12 +2559,12 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:78:4: ^( GREATER_EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:156:4: ^( GREATER_EQUAL fact_expression )
                     {
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression413); 
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression875); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression415);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression877);
                     fact_expression();
                     _fsp--;
 
@@ -1234,12 +2574,12 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:79:4: ^( LESS fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:157:4: ^( LESS fact_expression )
                     {
-                    match(input,LESS,FOLLOW_LESS_in_fact_expression422); 
+                    match(input,LESS,FOLLOW_LESS_in_fact_expression884); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression424);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression886);
                     fact_expression();
                     _fsp--;
 
@@ -1249,12 +2589,12 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:80:4: ^( LESS_EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:158:4: ^( LESS_EQUAL fact_expression )
                     {
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression431); 
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression893); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression433);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression895);
                     fact_expression();
                     _fsp--;
 
@@ -1264,12 +2604,12 @@
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:81:4: ^( NOT_EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:159:4: ^( NOT_EQUAL fact_expression )
                     {
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression440); 
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression902); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression442);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression904);
                     fact_expression();
                     _fsp--;
 
@@ -1279,30 +2619,30 @@
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:82:4: ^( VK_CONTAINS ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:160:4: ^( VK_CONTAINS ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression449); 
+                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression911); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:82:18: ( VK_NOT )?
-                    int alt15=2;
-                    int LA15_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:160:18: ( VK_NOT )?
+                    int alt34=2;
+                    int LA34_0 = input.LA(1);
 
-                    if ( (LA15_0==VK_NOT) ) {
-                        alt15=1;
+                    if ( (LA34_0==VK_NOT) ) {
+                        alt34=1;
                     }
-                    switch (alt15) {
+                    switch (alt34) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:82:18: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:160:18: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression451); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression913); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression454);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression916);
                     fact_expression();
                     _fsp--;
 
@@ -1312,30 +2652,30 @@
                     }
                     break;
                 case 15 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:83:4: ^( VK_EXCLUDES ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:161:4: ^( VK_EXCLUDES ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression461); 
+                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression923); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:83:18: ( VK_NOT )?
-                    int alt16=2;
-                    int LA16_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:161:18: ( VK_NOT )?
+                    int alt35=2;
+                    int LA35_0 = input.LA(1);
 
-                    if ( (LA16_0==VK_NOT) ) {
-                        alt16=1;
+                    if ( (LA35_0==VK_NOT) ) {
+                        alt35=1;
                     }
-                    switch (alt16) {
+                    switch (alt35) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:83:18: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:161:18: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression463); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression925); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression466);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression928);
                     fact_expression();
                     _fsp--;
 
@@ -1345,30 +2685,30 @@
                     }
                     break;
                 case 16 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:84:4: ^( VK_MATCHES ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:162:4: ^( VK_MATCHES ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression473); 
+                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression935); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:84:17: ( VK_NOT )?
-                    int alt17=2;
-                    int LA17_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:162:17: ( VK_NOT )?
+                    int alt36=2;
+                    int LA36_0 = input.LA(1);
 
-                    if ( (LA17_0==VK_NOT) ) {
-                        alt17=1;
+                    if ( (LA36_0==VK_NOT) ) {
+                        alt36=1;
                     }
-                    switch (alt17) {
+                    switch (alt36) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:84:17: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:162:17: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression475); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression937); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression478);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression940);
                     fact_expression();
                     _fsp--;
 
@@ -1378,30 +2718,30 @@
                     }
                     break;
                 case 17 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:85:4: ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:163:4: ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression485); 
+                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression947); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:85:20: ( VK_NOT )?
-                    int alt18=2;
-                    int LA18_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:163:20: ( VK_NOT )?
+                    int alt37=2;
+                    int LA37_0 = input.LA(1);
 
-                    if ( (LA18_0==VK_NOT) ) {
-                        alt18=1;
+                    if ( (LA37_0==VK_NOT) ) {
+                        alt37=1;
                     }
-                    switch (alt18) {
+                    switch (alt37) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:85:20: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:163:20: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression487); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression949); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression490);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression952);
                     fact_expression();
                     _fsp--;
 
@@ -1411,30 +2751,30 @@
                     }
                     break;
                 case 18 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:86:4: ^( VK_MEMBEROF ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:164:4: ^( VK_MEMBEROF ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression497); 
+                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression959); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:86:18: ( VK_NOT )?
-                    int alt19=2;
-                    int LA19_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:164:18: ( VK_NOT )?
+                    int alt38=2;
+                    int LA38_0 = input.LA(1);
 
-                    if ( (LA19_0==VK_NOT) ) {
-                        alt19=1;
+                    if ( (LA38_0==VK_NOT) ) {
+                        alt38=1;
                     }
-                    switch (alt19) {
+                    switch (alt38) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:86:18: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:164:18: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression499); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression961); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression502);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression964);
                     fact_expression();
                     _fsp--;
 
@@ -1444,31 +2784,48 @@
                     }
                     break;
                 case 19 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:87:4: ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:165:4: ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression )
                     {
-                    match(input,ID,FOLLOW_ID_in_fact_expression509); 
+                    match(input,ID,FOLLOW_ID_in_fact_expression971); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:87:9: ( VK_NOT )?
-                    int alt20=2;
-                    int LA20_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:165:9: ( VK_NOT )?
+                    int alt39=2;
+                    int LA39_0 = input.LA(1);
 
-                    if ( (LA20_0==VK_NOT) ) {
-                        alt20=1;
+                    if ( (LA39_0==VK_NOT) ) {
+                        alt39=1;
                     }
-                    switch (alt20) {
+                    switch (alt39) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:87:9: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:165:9: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression511); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression973); 
 
                             }
                             break;
 
                     }
 
-                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression514); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression516);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:165:17: ( VT_SQUARE_CHUNK )?
+                    int alt40=2;
+                    int LA40_0 = input.LA(1);
+
+                    if ( (LA40_0==VT_SQUARE_CHUNK) ) {
+                        alt40=1;
+                    }
+                    switch (alt40) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:165:17: VT_SQUARE_CHUNK
+                            {
+                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression976); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression979);
                     fact_expression();
                     _fsp--;
 
@@ -1478,13 +2835,13 @@
                     }
                     break;
                 case 20 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:88:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:166:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
                     {
-                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression523); 
+                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression986); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression525); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression527);
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression988); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression990);
                     fact_expression();
                     _fsp--;
 
@@ -1494,31 +2851,31 @@
                     }
                     break;
                 case 21 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:4: ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ( fact_expression )? )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:167:4: ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ( fact_expression )? )
                     {
-                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression534); 
+                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression997); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression537); 
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1000); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:34: ( accessor_element )+
-                    int cnt21=0;
-                    loop21:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:167:34: ( accessor_element )+
+                    int cnt41=0;
+                    loop41:
                     do {
-                        int alt21=2;
-                        int LA21_0 = input.LA(1);
+                        int alt41=2;
+                        int LA41_0 = input.LA(1);
 
-                        if ( (LA21_0==VT_ACCESSOR_ELEMENT) ) {
-                            alt21=1;
+                        if ( (LA41_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt41=1;
                         }
 
 
-                        switch (alt21) {
+                        switch (alt41) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:34: accessor_element
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:167:34: accessor_element
                     	    {
-                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression539);
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression1002);
                     	    accessor_element();
                     	    _fsp--;
 
@@ -1527,28 +2884,28 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt21 >= 1 ) break loop21;
+                    	    if ( cnt41 >= 1 ) break loop41;
                                 EarlyExitException eee =
-                                    new EarlyExitException(21, input);
+                                    new EarlyExitException(41, input);
                                 throw eee;
                         }
-                        cnt21++;
+                        cnt41++;
                     } while (true);
 
 
                     match(input, Token.UP, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:53: ( fact_expression )?
-                    int alt22=2;
-                    int LA22_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:167:53: ( fact_expression )?
+                    int alt42=2;
+                    int LA42_0 = input.LA(1);
 
-                    if ( (LA22_0==VT_FACT||LA22_0==VT_PAREN_CHUNK||(LA22_0>=VT_FACT_BINDING && LA22_0<=VT_ACCESSOR_PATH)||(LA22_0>=VK_EVAL && LA22_0<=VK_MEMBEROF)||LA22_0==VK_IN||(LA22_0>=DOUBLE_PIPE && LA22_0<=DOUBLE_AMPER)||LA22_0==ID||(LA22_0>=EQUAL && LA22_0<=NULL)) ) {
-                        alt22=1;
+                    if ( (LA42_0==VT_FACT||LA42_0==VT_PAREN_CHUNK||(LA42_0>=VT_FACT_BINDING && LA42_0<=VT_ACCESSOR_PATH)||(LA42_0>=VK_EVAL && LA42_0<=VK_MEMBEROF)||LA42_0==VK_IN||LA42_0==ID||LA42_0==STRING||(LA42_0>=BOOL && LA42_0<=DOUBLE_AMPER)||(LA42_0>=EQUAL && LA42_0<=NULL)) ) {
+                        alt42=1;
                     }
-                    switch (alt22) {
+                    switch (alt42) {
                         case 1 :
-                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:53: fact_expression
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:167:53: fact_expression
                             {
-                            pushFollow(FOLLOW_fact_expression_in_fact_expression543);
+                            pushFollow(FOLLOW_fact_expression_in_fact_expression1006);
                             fact_expression();
                             _fsp--;
 
@@ -1564,28 +2921,28 @@
                     }
                     break;
                 case 22 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:90:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:168:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
                     {
-                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression551); 
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1014); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:90:23: ( accessor_element )+
-                    int cnt23=0;
-                    loop23:
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:168:23: ( accessor_element )+
+                    int cnt43=0;
+                    loop43:
                     do {
-                        int alt23=2;
-                        int LA23_0 = input.LA(1);
+                        int alt43=2;
+                        int LA43_0 = input.LA(1);
 
-                        if ( (LA23_0==VT_ACCESSOR_ELEMENT) ) {
-                            alt23=1;
+                        if ( (LA43_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt43=1;
                         }
 
 
-                        switch (alt23) {
+                        switch (alt43) {
                     	case 1 :
-                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:90:23: accessor_element
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:168:23: accessor_element
                     	    {
-                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression553);
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression1016);
                     	    accessor_element();
                     	    _fsp--;
 
@@ -1594,12 +2951,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt23 >= 1 ) break loop23;
+                    	    if ( cnt43 >= 1 ) break loop43;
                                 EarlyExitException eee =
-                                    new EarlyExitException(23, input);
+                                    new EarlyExitException(43, input);
                                 throw eee;
                         }
-                        cnt23++;
+                        cnt43++;
                     } while (true);
 
 
@@ -1608,44 +2965,44 @@
                     }
                     break;
                 case 23 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:91:4: STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:169:4: STRING
                     {
-                    match(input,STRING,FOLLOW_STRING_in_fact_expression560); 
+                    match(input,STRING,FOLLOW_STRING_in_fact_expression1023); 
 
                     }
                     break;
                 case 24 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:92:4: INT
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:170:4: INT
                     {
-                    match(input,INT,FOLLOW_INT_in_fact_expression565); 
+                    match(input,INT,FOLLOW_INT_in_fact_expression1028); 
 
                     }
                     break;
                 case 25 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:93:4: FLOAT
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:171:4: FLOAT
                     {
-                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression570); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression1033); 
 
                     }
                     break;
                 case 26 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:94:4: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:172:4: BOOL
                     {
-                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression575); 
+                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression1038); 
 
                     }
                     break;
                 case 27 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:95:4: NULL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:173:4: NULL
                     {
-                    match(input,NULL,FOLLOW_NULL_in_fact_expression580); 
+                    match(input,NULL,FOLLOW_NULL_in_fact_expression1043); 
 
                     }
                     break;
                 case 28 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:96:4: VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:174:4: VT_PAREN_CHUNK
                     {
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression585); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1048); 
 
                     }
                     break;
@@ -1663,39 +3020,148 @@
     // $ANTLR end fact_expression
 
 
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:177:1: data_type : ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final void data_type() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:178:2: ( ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:178:4: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            {
+            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1060); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:178:19: ( ID )+
+            int cnt45=0;
+            loop45:
+            do {
+                int alt45=2;
+                int LA45_0 = input.LA(1);
+
+                if ( (LA45_0==ID) ) {
+                    alt45=1;
+                }
+
+
+                switch (alt45) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:178:19: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_data_type1062); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt45 >= 1 ) break loop45;
+                        EarlyExitException eee =
+                            new EarlyExitException(45, input);
+                        throw eee;
+                }
+                cnt45++;
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:178:23: ( dimension_definition )*
+            loop46:
+            do {
+                int alt46=2;
+                int LA46_0 = input.LA(1);
+
+                if ( (LA46_0==LEFT_SQUARE) ) {
+                    alt46=1;
+                }
+
+
+                switch (alt46) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:178:23: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type1065);
+            	    dimension_definition();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop46;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end data_type
+
+
+    // $ANTLR start dimension_definition
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:181:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    public final void dimension_definition() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:182:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:182:4: LEFT_SQUARE RIGHT_SQUARE
+            {
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1078); 
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1080); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end dimension_definition
+
+
     // $ANTLR start accessor_element
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:100:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:185:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
     public final void accessor_element() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:186:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:186:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
             {
-            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element598); 
+            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1092); 
 
             match(input, Token.DOWN, null); 
-            match(input,ID,FOLLOW_ID_in_accessor_element600); 
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:29: ( VT_SQUARE_CHUNK )*
-            loop25:
+            match(input,ID,FOLLOW_ID_in_accessor_element1094); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:186:29: ( VT_SQUARE_CHUNK )*
+            loop47:
             do {
-                int alt25=2;
-                int LA25_0 = input.LA(1);
+                int alt47=2;
+                int LA47_0 = input.LA(1);
 
-                if ( (LA25_0==VT_SQUARE_CHUNK) ) {
-                    alt25=1;
+                if ( (LA47_0==VT_SQUARE_CHUNK) ) {
+                    alt47=1;
                 }
 
 
-                switch (alt25) {
+                switch (alt47) {
             	case 1 :
-            	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:29: VT_SQUARE_CHUNK
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:186:29: VT_SQUARE_CHUNK
             	    {
-            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element602); 
+            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1096); 
 
             	    }
             	    break;
 
             	default :
-            	    break loop25;
+            	    break loop47;
                 }
             } while (true);
 
@@ -1717,64 +3183,64 @@
 
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:104:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:189:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
     public final void expression_chain() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
             {
-            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain616); 
+            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1110); 
 
             match(input, Token.DOWN, null); 
-            match(input,ID,FOLLOW_ID_in_expression_chain618); 
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:29: ( VT_SQUARE_CHUNK )?
-            int alt26=2;
-            int LA26_0 = input.LA(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain1112); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:29: ( VT_SQUARE_CHUNK )?
+            int alt48=2;
+            int LA48_0 = input.LA(1);
 
-            if ( (LA26_0==VT_SQUARE_CHUNK) ) {
-                alt26=1;
+            if ( (LA48_0==VT_SQUARE_CHUNK) ) {
+                alt48=1;
             }
-            switch (alt26) {
+            switch (alt48) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:29: VT_SQUARE_CHUNK
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:29: VT_SQUARE_CHUNK
                     {
-                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain620); 
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1114); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:46: ( VT_PAREN_CHUNK )?
-            int alt27=2;
-            int LA27_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:46: ( VT_PAREN_CHUNK )?
+            int alt49=2;
+            int LA49_0 = input.LA(1);
 
-            if ( (LA27_0==VT_PAREN_CHUNK) ) {
-                alt27=1;
+            if ( (LA49_0==VT_PAREN_CHUNK) ) {
+                alt49=1;
             }
-            switch (alt27) {
+            switch (alt49) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:46: VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:46: VT_PAREN_CHUNK
                     {
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain623); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1117); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:62: ( expression_chain )?
-            int alt28=2;
-            int LA28_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:62: ( expression_chain )?
+            int alt50=2;
+            int LA50_0 = input.LA(1);
 
-            if ( (LA28_0==VT_EXPRESSION_CHAIN) ) {
-                alt28=1;
+            if ( (LA50_0==VT_EXPRESSION_CHAIN) ) {
+                alt50=1;
             }
-            switch (alt28) {
+            switch (alt50) {
                 case 1 :
-                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:62: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:190:62: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain626);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain1120);
                     expression_chain();
                     _fsp--;
 
@@ -1802,13 +3268,13 @@
 
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:108:1: curly_chunk : VT_CURLY_CHUNK ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:193:1: curly_chunk : VT_CURLY_CHUNK ;
     public final void curly_chunk() throws RecognitionException {
         try {
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:109:2: ( VT_CURLY_CHUNK )
-            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:109:4: VT_CURLY_CHUNK
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:194:2: ( VT_CURLY_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g:194:4: VT_CURLY_CHUNK
             {
-            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk640); 
+            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1134); 
 
             }
 
@@ -1826,132 +3292,217 @@
 
  
 
-    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block43 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs_block45 = new BitSet(new long[]{0x000003881021E008L});
-    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs59 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs61 = new BitSet(new long[]{0x000003881021E008L});
-    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs69 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs71 = new BitSet(new long[]{0x000003881021E000L});
-    public static final BitSet FOLLOW_lhs_in_lhs73 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs80 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs82 = new BitSet(new long[]{0x000003881021E008L});
-    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs90 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs92 = new BitSet(new long[]{0x000003881021E000L});
-    public static final BitSet FOLLOW_lhs_in_lhs94 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_EXISTS_in_lhs101 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs103 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_NOT_in_lhs110 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs112 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_EVAL_in_lhs120 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs122 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_FORALL_in_lhs129 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs131 = new BitSet(new long[]{0x000003881021E008L});
-    public static final BitSet FOLLOW_VK_FROM_in_lhs139 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs141 = new BitSet(new long[]{0x0000840400080000L});
-    public static final BitSet FOLLOW_from_elements_in_lhs143 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs149 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements161 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_from_elements163 = new BitSet(new long[]{0x0000000000060000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements166 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements168 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements176 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_from_elements178 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements185 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_NAME_in_from_elements187 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements194 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_from_elements196 = new BitSet(new long[]{0x0000000000100808L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements198 = new BitSet(new long[]{0x0000000000100008L});
-    public static final BitSet FOLLOW_expression_chain_in_from_elements201 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause215 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause222 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause224 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause232 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause234 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause241 = new BitSet(new long[]{0x0000400000000000L});
-    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause248 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause250 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause264 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause266 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause280 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause282 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause284 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern297 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern299 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression312 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression314 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression316 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression323 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression325 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression327 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression334 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression336 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression338 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_FACT_in_fact_expression345 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_QUALIFIED_ID_in_fact_expression348 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_fact_expression350 = new BitSet(new long[]{0x0040000000000008L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression354 = new BitSet(new long[]{0xFC4C0013F7C00818L,0x000000000000001FL});
-    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression362 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression364 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression366 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression373 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression375 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_IN_in_fact_expression382 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression384 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression387 = new BitSet(new long[]{0xFC4C0013F7C00818L,0x000000000000001FL});
-    public static final BitSet FOLLOW_EQUAL_in_fact_expression395 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression397 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_GREATER_in_fact_expression404 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression406 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression413 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression415 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_LESS_in_fact_expression422 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression424 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression431 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression433 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression440 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression442 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression449 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression451 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression454 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression461 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression463 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression466 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression473 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression475 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression478 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression485 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression487 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression490 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression497 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression499 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression502 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_ID_in_fact_expression509 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression511 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression514 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression516 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression523 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression525 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression527 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression534 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression537 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_accessor_element_in_fact_expression539 = new BitSet(new long[]{0x0000000008000008L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression543 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression551 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_accessor_element_in_fact_expression553 = new BitSet(new long[]{0x0000000008000008L});
-    public static final BitSet FOLLOW_STRING_in_fact_expression560 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_fact_expression565 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_fact_expression570 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_fact_expression575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_fact_expression580 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression585 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element598 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_accessor_element600 = new BitSet(new long[]{0x0000000000000408L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element602 = new BitSet(new long[]{0x0000000000000408L});
-    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain616 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_expression_chain618 = new BitSet(new long[]{0x0000000000100C08L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain620 = new BitSet(new long[]{0x0000000000100808L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain623 = new BitSet(new long[]{0x0000000000100008L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain626 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk640 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit30 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit32 = new BitSet(new long[]{0xDB3FFC0000000028L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit35 = new BitSet(new long[]{0xDB3FFC0000000028L});
+    public static final BitSet FOLLOW_VK_PACKAGE_in_package_statement50 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_package_id_in_package_statement52 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PACKAGE_ID_in_package_id65 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_package_id67 = new BitSet(new long[]{0x0000000000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement80 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement91 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement97 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement118 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_IMPORT_in_import_statement130 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_import_name_in_import_statement132 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement145 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement147 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement149 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name162 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_import_name164 = new BitSet(new long[]{0x0000000000000008L,0x0000000000A00000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name167 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_GLOBAL_in_global181 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_global183 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global185 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function198 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_function200 = new BitSet(new long[]{0x0000010000000000L});
+    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function203 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_parameters_in_function205 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function207 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_QUERY_in_query220 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_QUERY_ID_in_query222 = new BitSet(new long[]{0x0000020000100000L});
+    public static final BitSet FOLLOW_parameters_in_query224 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_block_in_query227 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters240 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_param_definition_in_parameters242 = new BitSet(new long[]{0x0000001000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition255 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_argument_in_param_definition258 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument269 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument271 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_VK_TEMPLATE_in_template285 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template287 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_template_slot_in_template289 = new BitSet(new long[]{0x0000000000004008L});
+    public static final BitSet FOLLOW_VT_SLOT_in_template_slot303 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_template_slot305 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot307 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULE_in_rule320 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule322 = new BitSet(new long[]{0x0080000000018000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule324 = new BitSet(new long[]{0x0080000000010000L});
+    public static final BitSet FOLLOW_when_part_in_rule327 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule330 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_WHEN_in_when_part342 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_block_in_when_part344 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes356 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes358 = new BitSet(new long[]{0x003FFC0000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes361 = new BitSet(new long[]{0x003FFC0000000008L});
+    public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute375 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_set_in_rule_attribute377 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute389 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute391 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute401 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute403 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute412 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_INT_in_rule_attribute414 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute424 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute426 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute434 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute436 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute445 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute447 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute455 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute457 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute465 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute467 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute475 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute477 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute485 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute487 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute495 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute497 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block511 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block513 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs526 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs528 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs536 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs538 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs540 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs547 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs549 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs557 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs559 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs561 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXISTS_in_lhs568 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs570 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NOT_in_lhs577 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs579 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_lhs587 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs589 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FORALL_in_lhs596 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs598 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VK_FROM_in_lhs606 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs608 = new BitSet(new long[]{0x0000000008000000L,0x0000000000084040L});
+    public static final BitSet FOLLOW_from_elements_in_lhs610 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs616 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements628 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements630 = new BitSet(new long[]{0x0000000006000000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements633 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements635 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements643 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements645 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements652 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements654 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements661 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_from_elements663 = new BitSet(new long[]{0x0000000010080008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements665 = new BitSet(new long[]{0x0000000010000008L});
+    public static final BitSet FOLLOW_expression_chain_in_from_elements668 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause682 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause689 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause691 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause699 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause701 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause708 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
+    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause715 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause717 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause731 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause733 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause747 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause749 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause751 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern764 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern766 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression779 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression781 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression783 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression790 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression792 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression794 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression801 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression803 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression805 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_in_fact_expression812 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_fact_expression814 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression816 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression824 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression826 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression828 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression835 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression837 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_IN_in_fact_expression844 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression846 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression849 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_EQUAL_in_fact_expression857 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression859 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_in_fact_expression866 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression868 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression875 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression877 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_in_fact_expression884 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression886 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression893 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression895 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression902 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression904 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression911 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression913 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression916 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression923 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression925 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression928 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression935 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression937 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression940 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression947 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression949 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression952 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression959 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression961 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression964 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fact_expression971 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression973 = new BitSet(new long[]{0x00000007C00C0040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression976 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression979 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression986 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression988 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression990 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression997 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1000 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression1002 = new BitSet(new long[]{0x0000000800000008L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1006 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1014 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression1016 = new BitSet(new long[]{0x0000000800000008L});
+    public static final BitSet FOLLOW_STRING_in_fact_expression1023 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_fact_expression1028 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_fact_expression1033 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_fact_expression1038 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_fact_expression1043 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1048 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1060 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_data_type1062 = new BitSet(new long[]{0x0000000000000008L,0x0000080000200000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type1065 = new BitSet(new long[]{0x0000000000000008L,0x0000080000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1078 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition1080 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1092 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accessor_element1094 = new BitSet(new long[]{0x0000000000040008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1096 = new BitSet(new long[]{0x0000000000040008L});
+    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1110 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_expression_chain1112 = new BitSet(new long[]{0x00000000100C0008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1114 = new BitSet(new long[]{0x0000000010080008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1117 = new BitSet(new long[]{0x0000000010000008L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain1120 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1134 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g	2008-05-08 18:46:10 UTC (rev 19913)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g	2008-05-08 21:16:04 UTC (rev 19914)
@@ -5,12 +5,23 @@
 }
 
 tokens {
+	VT_COMPILATION_UNIT;
+	VT_FUNCTION_IMPORT;
+
 	VT_FACT;
 	VT_CONSTRAINTS;
-	VT_QUALIFIED_ID;
 	VT_LABEL;
-	VT_NAME;
 
+	VT_QUERY_ID;
+	VT_TEMPLATE_ID;
+	VT_RULE_ID;
+	VT_ENTRYPOINT_ID;
+	VT_SLOT_ID;
+	
+	VT_SLOT;
+	VT_RULE_ATTRIBUTES;
+
+	VT_RHS_CHUNK;
 	VT_CURLY_CHUNK;
 	VT_SQUARE_CHUNK;
 	VT_PAREN_CHUNK;
@@ -20,12 +31,12 @@
 	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;
@@ -34,7 +45,36 @@
 
 	VT_ACCESSOR_PATH;
 	VT_ACCESSOR_ELEMENT;
+	
+	VT_DATA_TYPE;
+	VT_PACKAGE_ID;
+	VT_IMPORT_ID;
+	VT_GLOBAL_ID;
+	VT_FUNCTION_ID;
+	VT_PARAM_LIST;
 
+	VK_DATE_EFFECTIVE;
+	VK_DATE_EXPIRES;
+	VK_LOCK_ON_ACTIVE;
+	VK_NO_LOOP;
+	VK_AUTO_FOCUS;
+	VK_ACTIVATION_GROUP;
+	VK_AGENDA_GROUP;
+	VK_RULEFLOW_GROUP;
+	VK_DURATION;
+	VK_DIALECT;
+	VK_SALIENCE;
+	VK_ENABLED;
+	VK_ATTRIBUTES;
+	VK_WHEN;
+	VK_RULE;
+	VK_IMPORT;
+	VK_PACKAGE;
+	VK_TEMPLATE;
+	VK_QUERY;
+	VK_DECLARE;
+	VK_FUNCTION;
+	VK_GLOBAL;
 	VK_EVAL;
 	VK_CONTAINS;
 	VK_MATCHES;
@@ -72,6 +112,200 @@
 	}
 }
 
+compilation_unit
+	:	package_statement?
+		statement*
+		-> ^(VT_COMPILATION_UNIT package_statement? statement*) 
+	;
+
+package_statement
+	:	package_key package_id SEMICOLON?
+		-> ^(package_key package_id)
+	;
+
+package_id
+	:	ID ( DOT ID )*
+		-> ^(VT_PACKAGE_ID ID+)
+	;
+
+statement
+	:	rule_attribute
+	|{(validateLT(1, "import") && validateLT(2, "function") )}?=> function_import_statement 
+	|	import_statement 
+	|	global 
+	|	function
+	|	template
+	|	rule
+	|	query
+	;
+
+import_statement
+	:	import_key import_name SEMICOLON?
+		-> ^(import_key import_name)
+	;
+
+function_import_statement
+	:	import_key function_key import_name SEMICOLON?
+		-> ^(VT_FUNCTION_IMPORT function_key import_name)
+	;
+
+import_name
+	:	ID ( DOT ID )* DOT_STAR?
+		-> ^(VT_IMPORT_ID ID+ DOT_STAR?)
+	;
+
+global
+	:	global_key data_type global_id SEMICOLON?
+		-> ^(global_key data_type global_id)
+	;
+
+global_id
+	:	id=ID
+		-> VT_GLOBAL_ID[$id]
+	;
+
+function
+	:	function_key data_type? function_id parameters curly_chunk
+		-> ^(function_key data_type? function_id parameters curly_chunk)
+	;
+
+function_id
+	:	id=ID
+		-> VT_FUNCTION_ID[$id]
+	;
+
+query	:	query_key query_id parameters? normal_lhs_block END SEMICOLON?
+		-> ^(query_key query_id parameters? normal_lhs_block)
+	;
+
+query_id
+	: 	value=ID	-> VT_QUERY_ID[$value]
+	| 	value=STRING	-> VT_QUERY_ID[$value]
+	;
+
+parameters
+	:	LEFT_PAREN
+			( param_definition (COMMA param_definition)* )?
+		RIGHT_PAREN
+		-> ^(VT_PARAM_LIST param_definition*)
+	;
+
+param_definition
+	:	data_type? argument
+	;
+
+argument
+	:	ID dimension_definition*
+	;
+
+
+template
+	:	template_key template_id SEMICOLON?
+		template_slot+
+		END SEMICOLON?
+		-> ^(template_key template_id template_slot+)
+	;
+
+template_id
+	: 	value=ID	-> VT_TEMPLATE_ID[$value]
+	| 	value=STRING	-> VT_TEMPLATE_ID[$value]
+	;
+
+template_slot
+	:	 data_type slot_id SEMICOLON?
+		-> ^(VT_SLOT data_type slot_id)
+	;
+
+slot_id	:	id=ID
+		-> VT_SLOT_ID[$id]
+	;
+
+rule
+	:	rule_key rule_id rule_attributes? when_part? rhs_chunk
+		-> ^(rule_key rule_id rule_attributes? when_part? rhs_chunk)
+	;
+
+when_part
+	:	when_key COLON? normal_lhs_block
+	->	when_key normal_lhs_block
+	;
+
+rule_id
+	: 	value=ID	-> VT_RULE_ID[$value]
+	| 	value=STRING	-> VT_RULE_ID[$value]
+	;
+
+rule_attributes
+	:	( attributes_key COLON )? rule_attribute ( COMMA? attr=rule_attribute )*
+		-> ^(VT_RULE_ATTRIBUTES attributes_key? rule_attribute+)
+	;
+
+rule_attribute
+	:	salience 
+	|	no_loop  
+	|	agenda_group  
+	|	duration  
+	|	activation_group 
+	|	auto_focus 
+	|	date_effective 
+	|	date_expires 
+	|	enabled 
+	|	ruleflow_group 
+	|	lock_on_active
+	|	dialect 
+	;
+
+date_effective
+	:	date_effective_key^ STRING
+	;
+
+date_expires
+	:	date_expires_key^ STRING  
+	;
+	
+enabled
+	:	enabled_key^ BOOL
+	;	
+
+salience
+	:	salience_key^
+		( INT   
+		| paren_chunk
+		)
+	;
+	
+no_loop
+	:	no_loop_key^ BOOL?
+	;
+
+auto_focus
+	:	auto_focus_key^ BOOL?
+	;	
+	
+activation_group
+	:	activation_group_key^ STRING
+	;
+
+ruleflow_group
+	:	ruleflow_group_key^ STRING
+	;
+
+agenda_group
+	:	agenda_group_key^ STRING
+	;
+
+duration
+	:	duration_key^ INT 
+	;	
+	
+dialect
+	:	dialect_key^ STRING   
+	;			
+	
+lock_on_active
+	:	lock_on_active_key^ BOOL?
+	;
+
 normal_lhs_block
 	:	lhs*
 	->	^(VT_AND_IMPLICIT lhs*)
@@ -101,7 +335,7 @@
 	;
 
 lhs_unary
-options{k=2;}
+options{backtrack=true;}
 	:	(	lhs_exist
 		|	lhs_not
 		|	lhs_eval
@@ -182,10 +416,15 @@
 	;
 
 entrypoint_statement
-	:	entry_point_key name
-	-> ^(entry_point_key name)
+	:	entry_point_key entrypoint_id
+	-> ^(entry_point_key entrypoint_id)
 	;
 
+entrypoint_id
+	: 	value=ID	-> VT_ENTRYPOINT_ID[$value]
+	| 	value=STRING	-> VT_ENTRYPOINT_ID[$value]
+	;
+
 from_source
 	:	ID
 		( (LEFT_PAREN)=> args=paren_chunk )?
@@ -226,8 +465,8 @@
 	;
 
 fact
-	:	qualified_id LEFT_PAREN constraints? RIGHT_PAREN
-	->	^(VT_FACT qualified_id constraints?)
+	:	data_type LEFT_PAREN constraints? RIGHT_PAREN
+	->	^(VT_FACT data_type constraints?)
 	;
 
 constraints
@@ -253,7 +492,6 @@
 	|	LEFT_PAREN or_constr RIGHT_PAREN -> or_constr
 	;
 
-//STOPED HERE
 field_constraint
 @init{
 	boolean isArrow = false;
@@ -319,11 +557,15 @@
 	|	NULL
 	;
 
-qualified_id
-	:	ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )* 
-	-> ^(VT_QUALIFIED_ID ID+)
+data_type
+	:	ID ( DOT ID )* dimension_definition*
+		-> ^(VT_DATA_TYPE  ID+ dimension_definition*)
 	;
 
+dimension_definition
+	:	LEFT_SQUARE RIGHT_SQUARE
+	;
+
 accessor_path
 	:	accessor_element ( DOT accessor_element )*
 	-> ^(VT_ACCESSOR_PATH accessor_element+)
@@ -334,11 +576,17 @@
 	-> ^(VT_ACCESSOR_ELEMENT ID square_chunk*)
 	;
 
-name
-	: 	value=ID	-> VT_NAME[$value]
-	| 	value=STRING	-> VT_NAME[$value]
+rhs_chunk
+ at init{
+	String text = "";
+}	:	rc=rhs_chunk_data {text = $rc.text;}
+	-> VT_RHS_CHUNK[$rc.start,text]
 	;
 
+rhs_chunk_data
+	:	THEN ( ~END )* END SEMICOLON?
+	;
+
 curly_chunk
 @init{
 	String text = "";
@@ -349,7 +597,7 @@
 curly_chunk_data
 	:	LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
 	;
-	
+
 paren_chunk
 @init{
 	String text = "";
@@ -358,7 +606,7 @@
 	;
 
 paren_chunk_data
-	:	value=LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN 
+	:	LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN 
 	;
 
 square_chunk
@@ -369,9 +617,122 @@
 	;
 
 square_chunk_data
-	:	value=LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+	:	LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
 	;
 
+
+date_effective_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))}?=>  ID MISC ID {text = $text;}
+	->	VK_DATE_EFFECTIVE[$start, text]
+	;
+
+date_expires_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))}?=>  ID MISC ID {text = $text;}
+	->	VK_DATE_EXPIRES[$start, text]
+	;
+
+lock_on_active_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))}?=>  ID MISC ID MISC ID {text = $text;}
+	->	VK_LOCK_ON_ACTIVE[$start, text]
+	;
+
+no_loop_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))}?=>  ID MISC ID {text = $text;}
+	->	VK_NO_LOOP[$start, text]
+	;
+
+auto_focus_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))}?=>  ID MISC ID {text = $text;}
+	->	VK_AUTO_FOCUS[$start, text]
+	;
+
+activation_group_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))}?=>  ID MISC ID {text = $text;}
+	->	VK_ACTIVATION_GROUP[$start, text]
+	;
+
+agenda_group_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))}?=>  ID MISC ID {text = $text;}
+	->	VK_AGENDA_GROUP[$start, text]
+	;
+
+ruleflow_group_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))}?=>  ID MISC ID {text = $text;}
+	->	VK_RULEFLOW_GROUP[$start, text]
+	;
+
+duration_key
+	:	{(validateIdentifierKey("duration"))}?=>  id=ID	->	VK_DURATION[$id]
+	;
+
+package_key
+	:	{(validateIdentifierKey("package"))}?=>  id=ID	->	VK_PACKAGE[$id]
+	;
+
+import_key
+	:	{(validateIdentifierKey("import"))}?=>  id=ID	->	VK_IMPORT[$id]
+	;
+
+dialect_key
+	:	{(validateIdentifierKey("dialect"))}?=>  id=ID	->	VK_DIALECT[$id]
+	;
+
+salience_key
+	:	{(validateIdentifierKey("salience"))}?=>  id=ID	->	VK_SALIENCE[$id]
+	;
+
+enabled_key
+	:	{(validateIdentifierKey("enabled"))}?=>  id=ID	->	VK_ENABLED[$id]
+	;
+
+attributes_key
+	:	{(validateIdentifierKey("attributes"))}?=>  id=ID	->	VK_ATTRIBUTES[$id]
+	;
+
+when_key
+	:	{(validateIdentifierKey("when"))}?=>  id=ID	->	VK_WHEN[$id]
+	;
+
+rule_key
+	:	{(validateIdentifierKey("rule"))}?=>  id=ID	->	VK_RULE[$id]
+	;
+
+template_key
+	:	{(validateIdentifierKey("template"))}?=>  id=ID	->	VK_TEMPLATE[$id]
+	;
+
+query_key
+	:	{(validateIdentifierKey("query"))}?=>  id=ID	->	VK_QUERY[$id]
+	;
+
+declare_key
+	:	{(validateIdentifierKey("declare"))}?=>  id=ID	->	VK_DECLARE[$id]
+	;
+
+function_key
+	:	{(validateIdentifierKey("function"))}?=>  id=ID	->	VK_FUNCTION[$id]
+	;
+
+global_key
+	:	{(validateIdentifierKey("global"))}?=>  id=ID	->	VK_GLOBAL[$id]
+	;
+
 eval_key
 	:	{(validateIdentifierKey("eval"))}?=>  id=ID	->	VK_EVAL[$id]
 	;
@@ -515,10 +876,22 @@
 
 NULL	:	'null';
 
+
+THEN
+	:	'then'
+	;
+
+END	:	'end'
+	;
+
 SEMICOLON
 	:	';'
 	;
 
+DOT_STAR
+	:	'.*'
+	;
+
 COLON
 	:	':'
 	;
@@ -592,9 +965,7 @@
 	
 DOUBLE_PIPE
 	:	'||'
-	;				
-	
-TILDE	:	'~';	
+	;
 
 SH_STYLE_SINGLE_LINE_COMMENT	
 	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g	2008-05-08 18:46:10 UTC (rev 19913)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g	2008-05-08 21:16:04 UTC (rev 19914)
@@ -4,7 +4,101 @@
 	tokenVocab=NewDRL;
 	ASTLabelType=CommonTree;
 }
+compilation_unit
+	:	^(VT_COMPILATION_UNIT package_statement? statement*) 
+	;
 
+package_statement
+	:	^(VK_PACKAGE package_id)
+	;
+
+package_id
+	:	^(VT_PACKAGE_ID ID+)
+	;
+
+statement
+	:	rule_attribute
+	|	function_import_statement 
+	|	import_statement 
+	|	global 
+	|	function
+	|	template
+	|	rule
+	|	query
+	;
+
+import_statement
+	:	^(VK_IMPORT import_name)
+	;
+
+function_import_statement
+	:	^(VT_FUNCTION_IMPORT VK_FUNCTION import_name)
+	;
+
+import_name
+	:	^(VT_IMPORT_ID ID+ DOT_STAR?)
+	;
+
+global
+	:	^(VK_GLOBAL data_type VT_GLOBAL_ID)
+	;
+
+function
+	:	^(VK_FUNCTION data_type? VT_FUNCTION_ID parameters curly_chunk)
+	;
+
+query
+	:	^(VK_QUERY VT_QUERY_ID parameters? lhs_block)
+	;
+
+parameters
+	:	^(VT_PARAM_LIST param_definition*)
+	;
+
+param_definition
+	:	data_type? argument
+	;
+
+argument
+	:	ID dimension_definition*
+	;
+
+
+template
+	:	^(VK_TEMPLATE VT_TEMPLATE_ID template_slot+)
+	;
+
+template_slot
+	:	^(VT_SLOT data_type VT_SLOT_ID)
+	;
+
+rule
+	:	^(VK_RULE VT_RULE_ID rule_attributes? when_part? VT_RHS_CHUNK)
+	;
+
+when_part
+	:	VK_WHEN lhs_block
+	;
+
+rule_attributes
+	:	^(VT_RULE_ATTRIBUTES VK_ATTRIBUTES? rule_attribute+)
+	;
+
+rule_attribute
+	:	^(VK_SALIENCE (INT|VT_PAREN_CHUNK)) 
+	|	^(VK_NO_LOOP BOOL?)  
+	|	^(VK_AGENDA_GROUP STRING)  
+	|	^(VK_DURATION INT)   
+	|	^(VK_ACTIVATION_GROUP STRING) 
+	|	^(VK_AUTO_FOCUS BOOL?) 
+	|	^(VK_DATE_EFFECTIVE STRING) 
+	|	^(VK_DATE_EXPIRES STRING) 
+	|	^(VK_ENABLED BOOL) 
+	|	^(VK_RULEFLOW_GROUP STRING) 
+	|	^(VK_LOCK_ON_ACTIVE BOOL?)
+	|	^(VK_DIALECT STRING)
+	;
+	
 lhs_block
 	:	^(VT_AND_IMPLICIT lhs*)
 	;
@@ -24,7 +118,7 @@
 from_elements
 	:	^(VK_ACCUMULATE lhs (accumulate_init_clause|accumulate_id_clause))
 	|	^(VK_COLLECT lhs)
-	|	^(VK_ENTRY_POINT VT_NAME)
+	|	^(VK_ENTRY_POINT VT_ENTRYPOINT_ID)
 	|	^(VT_FROM_SOURCE ID VT_PAREN_CHUNK? expression_chain?)
 	;
 
@@ -53,7 +147,7 @@
 	:	^(DOUBLE_PIPE fact_expression fact_expression)
 	|	^(DOUBLE_AMPER fact_expression fact_expression)
 	|	^(VT_FACT_BINDING VT_LABEL fact_expression)
-	|	^(VT_FACT ^(VT_QUALIFIED_ID ID+) fact_expression*)
+	|	^(VT_FACT data_type fact_expression*)
 	|	^(VT_FACT_OR fact_expression fact_expression)
 	|	^(VK_EVAL VT_PAREN_CHUNK)
 	|	^(VK_IN VK_NOT? fact_expression+)
@@ -68,7 +162,7 @@
 	|	^(VK_MATCHES VK_NOT? fact_expression)
 	|	^(VK_SOUNDSLIKE VK_NOT? fact_expression)
 	|	^(VK_MEMBEROF VK_NOT? fact_expression)
-	|	^(ID VK_NOT? VT_SQUARE_CHUNK fact_expression)
+	|	^(ID VK_NOT? VT_SQUARE_CHUNK? fact_expression)
 	|	^(VT_BIND_FIELD VT_LABEL fact_expression)
 	|	^(VT_FIELD ^(VT_ACCESSOR_PATH accessor_element+) fact_expression?)
 	|	^(VT_ACCESSOR_PATH accessor_element+)
@@ -80,7 +174,14 @@
 	|	VT_PAREN_CHUNK
 	;
 
+data_type
+	:	^(VT_DATA_TYPE ID+ dimension_definition*)
+	;
 
+dimension_definition
+	:	LEFT_SQUARE RIGHT_SQUARE
+	;
+
 accessor_element
 	:	^(VT_ACCESSOR_ELEMENT ID VT_SQUARE_CHUNK*)
 	;




More information about the jboss-svn-commits mailing list