[jboss-svn-commits] JBL Code SVN: r20043 - labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 19 13:40:23 EDT 2008


Author: porcelli
Date: 2008-05-19 13:40:22 -0400 (Mon, 19 May 2008)
New Revision: 20043

Added:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
Removed:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
Log:
New parser

Deleted: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-05-19 17:39:55 UTC (rev 20042)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-05-19 17:40:22 UTC (rev 20043)
@@ -1,3513 +0,0 @@
-// $ANTLR 3.0.1 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-03-10 18:35:54
-
-	package org.drools.lang;
-
-
-import java.util.HashMap;
-
-import org.antlr.runtime.BaseRecognizer;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.DFA;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.Lexer;
-import org.antlr.runtime.MismatchedSetException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.RecognitionException;
-public class DRLLexer extends Lexer {
-    public static final int ACCUMULATE=46;
-    public static final int PACKAGE=4;
-    public static final int FUNCTION=6;
-    public static final int T76=76;
-    public static final int RIGHT_SQUARE=63;
-    public static final int T79=79;
-    public static final int ACTIVATION_GROUP=31;
-    public static final int T77=77;
-    public static final int ATTRIBUTES=22;
-    public static final int RIGHT_CURLY=15;
-    public static final int T78=78;
-    public static final int DIALECT=35;
-    public static final int CONTAINS=53;
-    public static final int NO_LOOP=29;
-    public static final int LOCK_ON_ACTIVE=36;
-    public static final int MEMBEROF=57;
-    public static final int AGENDA_GROUP=33;
-    public static final int FLOAT=60;
-    public static final int NOT=43;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=72;
-    public static final int ID=7;
-    public static final int AND=39;
-    public static final int EOF=-1;
-    public static final int HexDigit=69;
-    public static final int DATE_EFFECTIVE=23;
-    public static final int ACTION=48;
-    public static final int DOUBLE_PIPE=38;
-    public static final int RIGHT_PAREN=12;
-    public static final int IMPORT=5;
-    public static final int EOL=66;
-    public static final int DOUBLE_AMPER=40;
-    public static final int THEN=64;
-    public static final int IN=59;
-    public static final int MATCHES=55;
-    public static final int COMMA=11;
-    public static final int TILDE=58;
-    public static final int ENABLED=25;
-    public static final int EXISTS=42;
-    public static final int DOT=8;
-    public static final int RULE=20;
-    public static final int EXCLUDES=54;
-    public static final int AUTO_FOCUS=30;
-    public static final int NULL=61;
-    public static final int SOUNDSLIKE=56;
-    public static final int BOOL=26;
-    public static final int FORALL=45;
-    public static final int RULEFLOW_GROUP=32;
-    public static final int SALIENCE=27;
-    public static final int RESULT=50;
-    public static final int INT=28;
-    public static final int EVENT=65;
-    public static final int Tokens=86;
-    public static final int MULTI_LINE_COMMENT=74;
-    public static final int DURATION=34;
-    public static final int T84=84;
-    public static final int WS=67;
-    public static final int T85=85;
-    public static final int TEMPLATE=19;
-    public static final int EVAL=44;
-    public static final int WHEN=21;
-    public static final int ENTRY_POINT=52;
-    public static final int UnicodeEscape=70;
-    public static final int LEFT_CURLY=14;
-    public static final int OR=37;
-    public static final int LEFT_PAREN=10;
-    public static final int DECLARE=13;
-    public static final int QUERY=17;
-    public static final int T81=81;
-    public static final int FROM=41;
-    public static final int GLOBAL=9;
-    public static final int END=18;
-    public static final int REVERSE=49;
-    public static final int MISC=75;
-    public static final int T80=80;
-    public static final int COLLECT=51;
-    public static final int T83=83;
-    public static final int INIT=47;
-    public static final int LEFT_SQUARE=62;
-    public static final int T82=82;
-    public static final int EscapeSequence=68;
-    public static final int OctalEscape=71;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=73;
-    public static final int DATE_EXPIRES=24;
-    public static final int STRING=16;
-    public DRLLexer() {;} 
-    public DRLLexer(CharStream input) {
-        super(input);
-        ruleMemo = new HashMap[84+1];
-     }
-    public String getGrammarFileName() { return "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
-
-    // $ANTLR start T76
-    public final void mT76() throws RecognitionException {
-        try {
-            int _type = T76;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:6:5: ( ';' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:6:7: ';'
-            {
-            match(';'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T76
-
-    // $ANTLR start T77
-    public final void mT77() throws RecognitionException {
-        try {
-            int _type = T77;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:7:5: ( '.*' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:7:7: '.*'
-            {
-            match(".*"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T77
-
-    // $ANTLR start T78
-    public final void mT78() throws RecognitionException {
-        try {
-            int _type = T78;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:8:5: ( ':' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:8:7: ':'
-            {
-            match(':'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T78
-
-    // $ANTLR start T79
-    public final void mT79() throws RecognitionException {
-        try {
-            int _type = T79;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:9:5: ( '->' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:9:7: '->'
-            {
-            match("->"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T79
-
-    // $ANTLR start T80
-    public final void mT80() throws RecognitionException {
-        try {
-            int _type = T80;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:10:5: ( '==' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:10:7: '=='
-            {
-            match("=="); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T80
-
-    // $ANTLR start T81
-    public final void mT81() throws RecognitionException {
-        try {
-            int _type = T81;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:11:5: ( '>' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:11:7: '>'
-            {
-            match('>'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T81
-
-    // $ANTLR start T82
-    public final void mT82() throws RecognitionException {
-        try {
-            int _type = T82;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:12:5: ( '>=' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:12:7: '>='
-            {
-            match(">="); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T82
-
-    // $ANTLR start T83
-    public final void mT83() throws RecognitionException {
-        try {
-            int _type = T83;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:13:5: ( '<' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:13:7: '<'
-            {
-            match('<'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T83
-
-    // $ANTLR start T84
-    public final void mT84() throws RecognitionException {
-        try {
-            int _type = T84;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:14:5: ( '<=' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:14:7: '<='
-            {
-            match("<="); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T84
-
-    // $ANTLR start T85
-    public final void mT85() throws RecognitionException {
-        try {
-            int _type = T85;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:15:5: ( '!=' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:15:7: '!='
-            {
-            match("!="); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T85
-
-    // $ANTLR start WS
-    public final void mWS() throws RecognitionException {
-        try {
-            int _type = WS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:17: ( ' ' | '\\t' | '\\f' | EOL )+
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:17: ( ' ' | '\\t' | '\\f' | EOL )+
-            int cnt1=0;
-            loop1:
-            do {
-                int alt1=5;
-                switch ( input.LA(1) ) {
-                case ' ':
-                    {
-                    alt1=1;
-                    }
-                    break;
-                case '\t':
-                    {
-                    alt1=2;
-                    }
-                    break;
-                case '\f':
-                    {
-                    alt1=3;
-                    }
-                    break;
-                case '\n':
-                case '\r':
-                    {
-                    alt1=4;
-                    }
-                    break;
-
-                }
-
-                switch (alt1) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:19: ' '
-            	    {
-            	    match(' '); if (failed) return ;
-
-            	    }
-            	    break;
-            	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:19: '\\t'
-            	    {
-            	    match('\t'); if (failed) return ;
-
-            	    }
-            	    break;
-            	case 3 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1737:19: '\\f'
-            	    {
-            	    match('\f'); if (failed) return ;
-
-            	    }
-            	    break;
-            	case 4 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:19: EOL
-            	    {
-            	    mEOL(); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt1 >= 1 ) break loop1;
-            	    if (backtracking>0) {failed=true; return ;}
-                        EarlyExitException eee =
-                            new EarlyExitException(1, input);
-                        throw eee;
-                }
-                cnt1++;
-            } while (true);
-
-            if ( backtracking==0 ) {
-               channel=HIDDEN; 
-            }
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end WS
-
-    // $ANTLR start EOL
-    public final void mEOL() throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1744:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
-            int alt2=3;
-            int LA2_0 = input.LA(1);
-
-            if ( (LA2_0=='\r') ) {
-                int LA2_1 = input.LA(2);
-
-                if ( (LA2_1=='\n') && (synpred1())) {
-                    alt2=1;
-                }
-                else {
-                    alt2=2;}
-            }
-            else if ( (LA2_0=='\n') ) {
-                alt2=3;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1745:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
-
-                throw nvae;
-            }
-            switch (alt2) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:14: ( '\\r\\n' )=> '\\r\\n'
-                    {
-                    match("\r\n"); if (failed) return ;
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1746:25: '\\r'
-                    {
-                    match('\r'); if (failed) return ;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:25: '\\n'
-                    {
-                    match('\n'); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        finally {
-        }
-    }
-    // $ANTLR end EOL
-
-    // $ANTLR start INT
-    public final void mINT() throws RecognitionException {
-        try {
-            int _type = INT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:4: ( '-' )? ( '0' .. '9' )+
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:4: ( '-' )?
-            int alt3=2;
-            int LA3_0 = input.LA(1);
-
-            if ( (LA3_0=='-') ) {
-                alt3=1;
-            }
-            switch (alt3) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:5: '-'
-                    {
-                    match('-'); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:10: ( '0' .. '9' )+
-            int cnt4=0;
-            loop4:
-            do {
-                int alt4=2;
-                int LA4_0 = input.LA(1);
-
-                if ( ((LA4_0>='0' && LA4_0<='9')) ) {
-                    alt4=1;
-                }
-
-
-                switch (alt4) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:11: '0' .. '9'
-            	    {
-            	    matchRange('0','9'); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt4 >= 1 ) break loop4;
-            	    if (backtracking>0) {failed=true; return ;}
-                        EarlyExitException eee =
-                            new EarlyExitException(4, input);
-                        throw eee;
-                }
-                cnt4++;
-            } while (true);
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end INT
-
-    // $ANTLR start FLOAT
-    public final void mFLOAT() throws RecognitionException {
-        try {
-            int _type = FLOAT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:4: ( '-' )?
-            int alt5=2;
-            int LA5_0 = input.LA(1);
-
-            if ( (LA5_0=='-') ) {
-                alt5=1;
-            }
-            switch (alt5) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:5: '-'
-                    {
-                    match('-'); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:10: ( '0' .. '9' )+
-            int cnt6=0;
-            loop6:
-            do {
-                int alt6=2;
-                int LA6_0 = input.LA(1);
-
-                if ( ((LA6_0>='0' && LA6_0<='9')) ) {
-                    alt6=1;
-                }
-
-
-                switch (alt6) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:11: '0' .. '9'
-            	    {
-            	    matchRange('0','9'); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt6 >= 1 ) break loop6;
-            	    if (backtracking>0) {failed=true; return ;}
-                        EarlyExitException eee =
-                            new EarlyExitException(6, input);
-                        throw eee;
-                }
-                cnt6++;
-            } while (true);
-
-            match('.'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:26: ( '0' .. '9' )+
-            int cnt7=0;
-            loop7:
-            do {
-                int alt7=2;
-                int LA7_0 = input.LA(1);
-
-                if ( ((LA7_0>='0' && LA7_0<='9')) ) {
-                    alt7=1;
-                }
-
-
-                switch (alt7) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1756:27: '0' .. '9'
-            	    {
-            	    matchRange('0','9'); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt7 >= 1 ) break loop7;
-            	    if (backtracking>0) {failed=true; return ;}
-                        EarlyExitException eee =
-                            new EarlyExitException(7, input);
-                        throw eee;
-                }
-                cnt7++;
-            } while (true);
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end FLOAT
-
-    // $ANTLR start STRING
-    public final void mSTRING() throws RecognitionException {
-        try {
-            int _type = STRING;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
-            int alt10=2;
-            int LA10_0 = input.LA(1);
-
-            if ( (LA10_0=='\"') ) {
-                alt10=1;
-            }
-            else if ( (LA10_0=='\'') ) {
-                alt10=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1759:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
-
-                throw nvae;
-            }
-            switch (alt10) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
-                    {
-                    match('\"'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
-                    loop8:
-                    do {
-                        int alt8=3;
-                        int LA8_0 = input.LA(1);
-
-                        if ( (LA8_0=='\\') ) {
-                            alt8=1;
-                        }
-                        else if ( ((LA8_0>='\u0000' && LA8_0<='!')||(LA8_0>='#' && LA8_0<='[')||(LA8_0>=']' && LA8_0<='\uFFFE')) ) {
-                            alt8=2;
-                        }
-
-
-                        switch (alt8) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:15: EscapeSequence
-                    	    {
-                    	    mEscapeSequence(); if (failed) return ;
-
-                    	    }
-                    	    break;
-                    	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1760:32: ~ ( '\\\\' | '\"' )
-                    	    {
-                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
-                    	        input.consume();
-                    	    failed=false;
-                    	    }
-                    	    else {
-                    	        if (backtracking>0) {failed=true; return ;}
-                    	        MismatchedSetException mse =
-                    	            new MismatchedSetException(null,input);
-                    	        recover(mse);    throw mse;
-                    	    }
-
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop8;
-                        }
-                    } while (true);
-
-                    match('\"'); if (failed) return ;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
-                    {
-                    match('\''); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
-                    loop9:
-                    do {
-                        int alt9=3;
-                        int LA9_0 = input.LA(1);
-
-                        if ( (LA9_0=='\\') ) {
-                            alt9=1;
-                        }
-                        else if ( ((LA9_0>='\u0000' && LA9_0<='&')||(LA9_0>='(' && LA9_0<='[')||(LA9_0>=']' && LA9_0<='\uFFFE')) ) {
-                            alt9=2;
-                        }
-
-
-                        switch (alt9) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:16: EscapeSequence
-                    	    {
-                    	    mEscapeSequence(); if (failed) return ;
-
-                    	    }
-                    	    break;
-                    	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:33: ~ ( '\\\\' | '\\'' )
-                    	    {
-                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
-                    	        input.consume();
-                    	    failed=false;
-                    	    }
-                    	    else {
-                    	        if (backtracking>0) {failed=true; return ;}
-                    	        MismatchedSetException mse =
-                    	            new MismatchedSetException(null,input);
-                    	        recover(mse);    throw mse;
-                    	    }
-
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop9;
-                        }
-                    } while (true);
-
-                    match('\''); if (failed) return ;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end STRING
-
-    // $ANTLR start HexDigit
-    public final void mHexDigit() throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765: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();
-            failed=false;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                MismatchedSetException mse =
-                    new MismatchedSetException(null,input);
-                recover(mse);    throw mse;
-            }
-
-
-            }
-
-        }
-        finally {
-        }
-    }
-    // $ANTLR end HexDigit
-
-    // $ANTLR start EscapeSequence
-    public final void mEscapeSequence() throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
-            int alt11=3;
-            int LA11_0 = input.LA(1);
-
-            if ( (LA11_0=='\\') ) {
-                switch ( input.LA(2) ) {
-                case '\"':
-                case '$':
-                case '&':
-                case '\'':
-                case '(':
-                case ')':
-                case '*':
-                case '+':
-                case '-':
-                case '.':
-                case '?':
-                case 'A':
-                case 'B':
-                case 'D':
-                case 'E':
-                case 'G':
-                case 'Q':
-                case 'S':
-                case 'W':
-                case 'Z':
-                case '[':
-                case '\\':
-                case ']':
-                case '^':
-                case 'a':
-                case 'b':
-                case 'c':
-                case 'd':
-                case 'e':
-                case 'f':
-                case 'n':
-                case 'o':
-                case 'p':
-                case 'r':
-                case 's':
-                case 't':
-                case 'w':
-                case 'x':
-                case 'z':
-                case '{':
-                case '|':
-                case '}':
-                    {
-                    alt11=1;
-                    }
-                    break;
-                case 'u':
-                    {
-                    alt11=2;
-                    }
-                    break;
-                case '0':
-                case '1':
-                case '2':
-                case '3':
-                case '4':
-                case '5':
-                case '6':
-                case '7':
-                    {
-                    alt11=3;
-                    }
-                    break;
-                default:
-                    if (backtracking>0) {failed=true; return ;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("1767: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;
-                }
-
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1767: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 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769: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)<='}') ) {
-                        input.consume();
-                    failed=false;
-                    }
-                    else {
-                        if (backtracking>0) {failed=true; return ;}
-                        MismatchedSetException mse =
-                            new MismatchedSetException(null,input);
-                        recover(mse);    throw mse;
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:9: UnicodeEscape
-                    {
-                    mUnicodeEscape(); if (failed) return ;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1774:9: OctalEscape
-                    {
-                    mOctalEscape(); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-        }
-        finally {
-        }
-    }
-    // $ANTLR end EscapeSequence
-
-    // $ANTLR start OctalEscape
-    public final void mOctalEscape() throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
-            int alt12=3;
-            int LA12_0 = input.LA(1);
-
-            if ( (LA12_0=='\\') ) {
-                int LA12_1 = input.LA(2);
-
-                if ( ((LA12_1>='0' && LA12_1<='3')) ) {
-                    int LA12_2 = input.LA(3);
-
-                    if ( ((LA12_2>='0' && LA12_2<='7')) ) {
-                        int LA12_5 = input.LA(4);
-
-                        if ( ((LA12_5>='0' && LA12_5<='7')) ) {
-                            alt12=1;
-                        }
-                        else {
-                            alt12=2;}
-                    }
-                    else {
-                        alt12=3;}
-                }
-                else if ( ((LA12_1>='4' && LA12_1<='7')) ) {
-                    int LA12_3 = input.LA(3);
-
-                    if ( ((LA12_3>='0' && LA12_3<='7')) ) {
-                        alt12=2;
-                    }
-                    else {
-                        alt12=3;}
-                }
-                else {
-                    if (backtracking>0) {failed=true; return ;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("1777:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1777:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
-
-                throw nvae;
-            }
-            switch (alt12) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
-                    {
-                    match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:14: ( '0' .. '3' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:15: '0' .. '3'
-                    {
-                    matchRange('0','3'); if (failed) return ;
-
-                    }
-
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:26: '0' .. '7'
-                    {
-                    matchRange('0','7'); if (failed) return ;
-
-                    }
-
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:36: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1779:37: '0' .. '7'
-                    {
-                    matchRange('0','7'); if (failed) return ;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
-                    {
-                    match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:15: '0' .. '7'
-                    {
-                    matchRange('0','7'); if (failed) return ;
-
-                    }
-
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1780:26: '0' .. '7'
-                    {
-                    matchRange('0','7'); if (failed) return ;
-
-                    }
-
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:9: '\\\\' ( '0' .. '7' )
-                    {
-                    match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:15: '0' .. '7'
-                    {
-                    matchRange('0','7'); if (failed) return ;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-        }
-        finally {
-        }
-    }
-    // $ANTLR end OctalEscape
-
-    // $ANTLR start UnicodeEscape
-    public final void mUnicodeEscape() throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1786:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1786:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
-            {
-            match('\\'); if (failed) return ;
-            match('u'); if (failed) return ;
-            mHexDigit(); if (failed) return ;
-            mHexDigit(); if (failed) return ;
-            mHexDigit(); if (failed) return ;
-            mHexDigit(); if (failed) return ;
-
-            }
-
-        }
-        finally {
-        }
-    }
-    // $ANTLR end UnicodeEscape
-
-    // $ANTLR start BOOL
-    public final void mBOOL() throws RecognitionException {
-        try {
-            int _type = BOOL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:2: ( ( 'true' | 'false' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:4: ( 'true' | 'false' )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:4: ( 'true' | 'false' )
-            int alt13=2;
-            int LA13_0 = input.LA(1);
-
-            if ( (LA13_0=='t') ) {
-                alt13=1;
-            }
-            else if ( (LA13_0=='f') ) {
-                alt13=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1790:4: ( 'true' | 'false' )", 13, 0, input);
-
-                throw nvae;
-            }
-            switch (alt13) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:5: 'true'
-                    {
-                    match("true"); if (failed) return ;
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:12: 'false'
-                    {
-                    match("false"); if (failed) return ;
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end BOOL
-
-    // $ANTLR start PACKAGE
-    public final void mPACKAGE() throws RecognitionException {
-        try {
-            int _type = PACKAGE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1793:9: ( 'package' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1793:11: 'package'
-            {
-            match("package"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end PACKAGE
-
-    // $ANTLR start IMPORT
-    public final void mIMPORT() throws RecognitionException {
-        try {
-            int _type = IMPORT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1795:8: ( 'import' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1795:10: 'import'
-            {
-            match("import"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end IMPORT
-
-    // $ANTLR start FUNCTION
-    public final void mFUNCTION() throws RecognitionException {
-        try {
-            int _type = FUNCTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1797:10: ( 'function' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1797:12: 'function'
-            {
-            match("function"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end FUNCTION
-
-    // $ANTLR start EVENT
-    public final void mEVENT() throws RecognitionException {
-        try {
-            int _type = EVENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1799:7: ( 'event' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1799:10: 'event'
-            {
-            match("event"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end EVENT
-
-    // $ANTLR start GLOBAL
-    public final void mGLOBAL() throws RecognitionException {
-        try {
-            int _type = GLOBAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1801:8: ( 'global' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1801:10: 'global'
-            {
-            match("global"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end GLOBAL
-
-    // $ANTLR start DECLARE
-    public final void mDECLARE() throws RecognitionException {
-        try {
-            int _type = DECLARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1803:9: ( 'declare' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1803:11: 'declare'
-            {
-            match("declare"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DECLARE
-
-    // $ANTLR start RULE
-    public final void mRULE() throws RecognitionException {
-        try {
-            int _type = RULE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1805:9: ( 'rule' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1805:11: 'rule'
-            {
-            match("rule"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RULE
-
-    // $ANTLR start QUERY
-    public final void mQUERY() throws RecognitionException {
-        try {
-            int _type = QUERY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1807:7: ( 'query' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1807:9: 'query'
-            {
-            match("query"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end QUERY
-
-    // $ANTLR start TEMPLATE
-    public final void mTEMPLATE() throws RecognitionException {
-        try {
-            int _type = TEMPLATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1809:10: ( 'template' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1809:12: 'template'
-            {
-            match("template"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end TEMPLATE
-
-    // $ANTLR start ATTRIBUTES
-    public final void mATTRIBUTES() throws RecognitionException {
-        try {
-            int _type = ATTRIBUTES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:12: ( 'attributes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:14: 'attributes'
-            {
-            match("attributes"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ATTRIBUTES
-
-    // $ANTLR start DATE_EFFECTIVE
-    public final void mDATE_EFFECTIVE() throws RecognitionException {
-        try {
-            int _type = DATE_EFFECTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1814:2: ( 'date-effective' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1814:4: 'date-effective'
-            {
-            match("date-effective"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DATE_EFFECTIVE
-
-    // $ANTLR start DATE_EXPIRES
-    public final void mDATE_EXPIRES() throws RecognitionException {
-        try {
-            int _type = DATE_EXPIRES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:2: ( 'date-expires' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:4: 'date-expires'
-            {
-            match("date-expires"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DATE_EXPIRES
-
-    // $ANTLR start ENABLED
-    public final void mENABLED() throws RecognitionException {
-        try {
-            int _type = ENABLED;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1819:9: ( 'enabled' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1819:11: 'enabled'
-            {
-            match("enabled"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ENABLED
-
-    // $ANTLR start SALIENCE
-    public final void mSALIENCE() throws RecognitionException {
-        try {
-            int _type = SALIENCE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1822:2: ( 'salience' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1822:4: 'salience'
-            {
-            match("salience"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end SALIENCE
-
-    // $ANTLR start NO_LOOP
-    public final void mNO_LOOP() throws RecognitionException {
-        try {
-            int _type = NO_LOOP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1824:9: ( 'no-loop' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1824:11: 'no-loop'
-            {
-            match("no-loop"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end NO_LOOP
-
-    // $ANTLR start AUTO_FOCUS
-    public final void mAUTO_FOCUS() throws RecognitionException {
-        try {
-            int _type = AUTO_FOCUS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1827:2: ( 'auto-focus' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1827:4: 'auto-focus'
-            {
-            match("auto-focus"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end AUTO_FOCUS
-
-    // $ANTLR start ACTIVATION_GROUP
-    public final void mACTIVATION_GROUP() throws RecognitionException {
-        try {
-            int _type = ACTIVATION_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1830:2: ( 'activation-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1830:4: 'activation-group'
-            {
-            match("activation-group"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ACTIVATION_GROUP
-
-    // $ANTLR start AGENDA_GROUP
-    public final void mAGENDA_GROUP() throws RecognitionException {
-        try {
-            int _type = AGENDA_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1833:2: ( 'agenda-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1833:4: 'agenda-group'
-            {
-            match("agenda-group"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end AGENDA_GROUP
-
-    // $ANTLR start DIALECT
-    public final void mDIALECT() throws RecognitionException {
-        try {
-            int _type = DIALECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1836:2: ( 'dialect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1836:4: 'dialect'
-            {
-            match("dialect"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DIALECT
-
-    // $ANTLR start RULEFLOW_GROUP
-    public final void mRULEFLOW_GROUP() throws RecognitionException {
-        try {
-            int _type = RULEFLOW_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1839:2: ( 'ruleflow-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1839:4: 'ruleflow-group'
-            {
-            match("ruleflow-group"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RULEFLOW_GROUP
-
-    // $ANTLR start DURATION
-    public final void mDURATION() throws RecognitionException {
-        try {
-            int _type = DURATION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1842:2: ( 'duration' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1842:4: 'duration'
-            {
-            match("duration"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DURATION
-
-    // $ANTLR start LOCK_ON_ACTIVE
-    public final void mLOCK_ON_ACTIVE() throws RecognitionException {
-        try {
-            int _type = LOCK_ON_ACTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1845:2: ( 'lock-on-active' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1845:4: 'lock-on-active'
-            {
-            match("lock-on-active"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LOCK_ON_ACTIVE
-
-    // $ANTLR start FROM
-    public final void mFROM() throws RecognitionException {
-        try {
-            int _type = FROM;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1847:6: ( 'from' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1847:8: 'from'
-            {
-            match("from"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end FROM
-
-    // $ANTLR start ACCUMULATE
-    public final void mACCUMULATE() throws RecognitionException {
-        try {
-            int _type = ACCUMULATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1850:2: ( 'accumulate' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1850:4: 'accumulate'
-            {
-            match("accumulate"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ACCUMULATE
-
-    // $ANTLR start INIT
-    public final void mINIT() throws RecognitionException {
-        try {
-            int _type = INIT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1852:6: ( 'init' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1852:8: 'init'
-            {
-            match("init"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end INIT
-
-    // $ANTLR start ACTION
-    public final void mACTION() throws RecognitionException {
-        try {
-            int _type = ACTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1854:8: ( 'action' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1854:10: 'action'
-            {
-            match("action"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ACTION
-
-    // $ANTLR start REVERSE
-    public final void mREVERSE() throws RecognitionException {
-        try {
-            int _type = REVERSE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1856:9: ( 'reverse' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1856:11: 'reverse'
-            {
-            match("reverse"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end REVERSE
-
-    // $ANTLR start RESULT
-    public final void mRESULT() throws RecognitionException {
-        try {
-            int _type = RESULT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1858:8: ( 'result' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1858:10: 'result'
-            {
-            match("result"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RESULT
-
-    // $ANTLR start COLLECT
-    public final void mCOLLECT() throws RecognitionException {
-        try {
-            int _type = COLLECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1860:9: ( 'collect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1860:11: 'collect'
-            {
-            match("collect"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end COLLECT
-
-    // $ANTLR start ENTRY_POINT
-    public final void mENTRY_POINT() throws RecognitionException {
-        try {
-            int _type = ENTRY_POINT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1862:13: ( 'entry-point' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1862:15: 'entry-point'
-            {
-            match("entry-point"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ENTRY_POINT
-
-    // $ANTLR start OR
-    public final void mOR() throws RecognitionException {
-        try {
-            int _type = OR;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1864:4: ( 'or' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1864:6: 'or'
-            {
-            match("or"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end OR
-
-    // $ANTLR start AND
-    public final void mAND() throws RecognitionException {
-        try {
-            int _type = AND;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1866:5: ( 'and' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1866:7: 'and'
-            {
-            match("and"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end AND
-
-    // $ANTLR start CONTAINS
-    public final void mCONTAINS() throws RecognitionException {
-        try {
-            int _type = CONTAINS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1869:8: ( 'contains' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1869:16: 'contains'
-            {
-            match("contains"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end CONTAINS
-
-    // $ANTLR start EXCLUDES
-    public final void mEXCLUDES() throws RecognitionException {
-        try {
-            int _type = EXCLUDES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1872:8: ( 'excludes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1872:16: 'excludes'
-            {
-            match("excludes"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end EXCLUDES
-
-    // $ANTLR start MEMBEROF
-    public final void mMEMBEROF() throws RecognitionException {
-        try {
-            int _type = MEMBEROF;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1875:8: ( 'memberOf' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1875:16: 'memberOf'
-            {
-            match("memberOf"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end MEMBEROF
-
-    // $ANTLR start MATCHES
-    public final void mMATCHES() throws RecognitionException {
-        try {
-            int _type = MATCHES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1877:9: ( 'matches' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1877:16: 'matches'
-            {
-            match("matches"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end MATCHES
-
-    // $ANTLR start SOUNDSLIKE
-    public final void mSOUNDSLIKE() throws RecognitionException {
-        try {
-            int _type = SOUNDSLIKE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1879:12: ( 'soundslike' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1879:16: 'soundslike'
-            {
-            match("soundslike"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end SOUNDSLIKE
-
-    // $ANTLR start IN
-    public final void mIN() throws RecognitionException {
-        try {
-            int _type = IN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1881:4: ( 'in' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1881:6: 'in'
-            {
-            match("in"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end IN
-
-    // $ANTLR start NULL
-    public final void mNULL() throws RecognitionException {
-        try {
-            int _type = NULL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1883:6: ( 'null' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1883:8: 'null'
-            {
-            match("null"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end NULL
-
-    // $ANTLR start EXISTS
-    public final void mEXISTS() throws RecognitionException {
-        try {
-            int _type = EXISTS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1885:8: ( 'exists' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1885:10: 'exists'
-            {
-            match("exists"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end EXISTS
-
-    // $ANTLR start NOT
-    public final void mNOT() throws RecognitionException {
-        try {
-            int _type = NOT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1887:5: ( 'not' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1887:7: 'not'
-            {
-            match("not"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end NOT
-
-    // $ANTLR start EVAL
-    public final void mEVAL() throws RecognitionException {
-        try {
-            int _type = EVAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1889:6: ( 'eval' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1889:8: 'eval'
-            {
-            match("eval"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end EVAL
-
-    // $ANTLR start FORALL
-    public final void mFORALL() throws RecognitionException {
-        try {
-            int _type = FORALL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1891:8: ( 'forall' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1891:10: 'forall'
-            {
-            match("forall"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end FORALL
-
-    // $ANTLR start WHEN
-    public final void mWHEN() throws RecognitionException {
-        try {
-            int _type = WHEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1893:9: ( 'when' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1893:11: 'when'
-            {
-            match("when"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end WHEN
-
-    // $ANTLR start THEN
-    public final void mTHEN() throws RecognitionException {
-        try {
-            int _type = THEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1895:6: ( 'then' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1895:12: '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;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1897:9: ( 'end' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1897:11: 'end'
-            {
-            match("end"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end END
-
-    // $ANTLR start ID
-    public final void mID() throws RecognitionException {
-        try {
-            int _type = ID;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1900:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1900: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();
-            failed=false;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                MismatchedSetException mse =
-                    new MismatchedSetException(null,input);
-                recover(mse);    throw mse;
-            }
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1900:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
-            loop14:
-            do {
-                int alt14=2;
-                int LA14_0 = input.LA(1);
-
-                if ( ((LA14_0>='0' && LA14_0<='9')||(LA14_0>='A' && LA14_0<='Z')||LA14_0=='_'||(LA14_0>='a' && LA14_0<='z')||(LA14_0>='\u00C0' && LA14_0<='\u00FF')) ) {
-                    alt14=1;
-                }
-
-
-                switch (alt14) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
-            	    {
-            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
-            	        input.consume();
-            	    failed=false;
-            	    }
-            	    else {
-            	        if (backtracking>0) {failed=true; return ;}
-            	        MismatchedSetException mse =
-            	            new MismatchedSetException(null,input);
-            	        recover(mse);    throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop14;
-                }
-            } while (true);
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end ID
-
-    // $ANTLR start LEFT_PAREN
-    public final void mLEFT_PAREN() throws RecognitionException {
-        try {
-            int _type = LEFT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1904:9: ( '(' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1904:11: '('
-            {
-            match('('); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LEFT_PAREN
-
-    // $ANTLR start RIGHT_PAREN
-    public final void mRIGHT_PAREN() throws RecognitionException {
-        try {
-            int _type = RIGHT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1908:9: ( ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1908:11: ')'
-            {
-            match(')'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RIGHT_PAREN
-
-    // $ANTLR start LEFT_SQUARE
-    public final void mLEFT_SQUARE() throws RecognitionException {
-        try {
-            int _type = LEFT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1912:9: ( '[' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1912:11: '['
-            {
-            match('['); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LEFT_SQUARE
-
-    // $ANTLR start RIGHT_SQUARE
-    public final void mRIGHT_SQUARE() throws RecognitionException {
-        try {
-            int _type = RIGHT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1916:9: ( ']' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1916:11: ']'
-            {
-            match(']'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RIGHT_SQUARE
-
-    // $ANTLR start LEFT_CURLY
-    public final void mLEFT_CURLY() throws RecognitionException {
-        try {
-            int _type = LEFT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1920:9: ( '{' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1920:11: '{'
-            {
-            match('{'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LEFT_CURLY
-
-    // $ANTLR start RIGHT_CURLY
-    public final void mRIGHT_CURLY() throws RecognitionException {
-        try {
-            int _type = RIGHT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1924:9: ( '}' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1924:11: '}'
-            {
-            match('}'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RIGHT_CURLY
-
-    // $ANTLR start COMMA
-    public final void mCOMMA() throws RecognitionException {
-        try {
-            int _type = COMMA;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1927:7: ( ',' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1927:9: ','
-            {
-            match(','); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end COMMA
-
-    // $ANTLR start DOT
-    public final void mDOT() throws RecognitionException {
-        try {
-            int _type = DOT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1930:5: ( '.' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1930:7: '.'
-            {
-            match('.'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DOT
-
-    // $ANTLR start DOUBLE_AMPER
-    public final void mDOUBLE_AMPER() throws RecognitionException {
-        try {
-            int _type = DOUBLE_AMPER;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1934:2: ( '&&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1934:4: '&&'
-            {
-            match("&&"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DOUBLE_AMPER
-
-    // $ANTLR start DOUBLE_PIPE
-    public final void mDOUBLE_PIPE() throws RecognitionException {
-        try {
-            int _type = DOUBLE_PIPE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1938:2: ( '||' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1938:4: '||'
-            {
-            match("||"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end DOUBLE_PIPE
-
-    // $ANTLR start TILDE
-    public final void mTILDE() throws RecognitionException {
-        try {
-            int _type = TILDE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1941:7: ( '~' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1941: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;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1944:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1944:4: '#' ( options {greedy=false; } : . )* EOL
-            {
-            match('#'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1944:8: ( options {greedy=false; } : . )*
-            loop15:
-            do {
-                int alt15=2;
-                int LA15_0 = input.LA(1);
-
-                if ( (LA15_0=='\r') ) {
-                    alt15=2;
-                }
-                else if ( (LA15_0=='\n') ) {
-                    alt15=2;
-                }
-                else if ( ((LA15_0>='\u0000' && LA15_0<='\t')||(LA15_0>='\u000B' && LA15_0<='\f')||(LA15_0>='\u000E' && LA15_0<='\uFFFE')) ) {
-                    alt15=1;
-                }
-
-
-                switch (alt15) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1944:35: .
-            	    {
-            	    matchAny(); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop15;
-                }
-            } while (true);
-
-            mEOL(); if (failed) return ;
-            if ( backtracking==0 ) {
-               channel=HIDDEN; setText("//"+getText().substring(1));
-            }
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
-
-    // $ANTLR start C_STYLE_SINGLE_LINE_COMMENT
-    public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
-        try {
-            int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1950:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1950:4: '//' ( options {greedy=false; } : . )* EOL
-            {
-            match("//"); if (failed) return ;
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1950:9: ( options {greedy=false; } : . )*
-            loop16:
-            do {
-                int alt16=2;
-                int LA16_0 = input.LA(1);
-
-                if ( (LA16_0=='\r') ) {
-                    alt16=2;
-                }
-                else if ( (LA16_0=='\n') ) {
-                    alt16=2;
-                }
-                else if ( ((LA16_0>='\u0000' && LA16_0<='\t')||(LA16_0>='\u000B' && LA16_0<='\f')||(LA16_0>='\u000E' && LA16_0<='\uFFFE')) ) {
-                    alt16=1;
-                }
-
-
-                switch (alt16) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1950:36: .
-            	    {
-            	    matchAny(); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop16;
-                }
-            } while (true);
-
-            mEOL(); if (failed) return ;
-            if ( backtracking==0 ) {
-               channel=HIDDEN; 
-            }
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
-
-    // $ANTLR start MULTI_LINE_COMMENT
-    public final void mMULTI_LINE_COMMENT() throws RecognitionException {
-        try {
-            int _type = MULTI_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1955:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1955:4: '/*' ( options {greedy=false; } : . )* '*/'
-            {
-            match("/*"); if (failed) return ;
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1955:9: ( options {greedy=false; } : . )*
-            loop17:
-            do {
-                int alt17=2;
-                int LA17_0 = input.LA(1);
-
-                if ( (LA17_0=='*') ) {
-                    int LA17_1 = input.LA(2);
-
-                    if ( (LA17_1=='/') ) {
-                        alt17=2;
-                    }
-                    else if ( ((LA17_1>='\u0000' && LA17_1<='.')||(LA17_1>='0' && LA17_1<='\uFFFE')) ) {
-                        alt17=1;
-                    }
-
-
-                }
-                else if ( ((LA17_0>='\u0000' && LA17_0<=')')||(LA17_0>='+' && LA17_0<='\uFFFE')) ) {
-                    alt17=1;
-                }
-
-
-                switch (alt17) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1955:35: .
-            	    {
-            	    matchAny(); if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop17;
-                }
-            } while (true);
-
-            match("*/"); if (failed) return ;
-
-            if ( backtracking==0 ) {
-               channel=HIDDEN; 
-            }
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end MULTI_LINE_COMMENT
-
-    // $ANTLR start MISC
-    public final void mMISC() throws RecognitionException {
-        try {
-            int _type = MISC;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1959:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
-            {
-            if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
-                input.consume();
-            failed=false;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                MismatchedSetException mse =
-                    new MismatchedSetException(null,input);
-                recover(mse);    throw mse;
-            }
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end MISC
-
-    public void mTokens() throws RecognitionException {
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:8: ( T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | WS | INT | FLOAT | STRING | BOOL | PACKAGE | IMPORT | FUNCTION | EVENT | GLOBAL | DECLARE | RULE | QUERY | TEMPLATE | ATTRIBUTES | DATE_EFFECTIVE | DATE_EXPIRES | ENABLED | SALIENCE | NO_LOOP | AUTO_FOCUS | ACTIVATION_GROUP | AGENDA_GROUP | DIALECT | RULEFLOW_GROUP | DURATION | LOCK_ON_ACTIVE | FROM | ACCUMULATE | INIT | ACTION | REVERSE | RESULT | COLLECT | ENTRY_POINT | OR | AND | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | SOUNDSLIKE | IN | NULL | EXISTS | NOT | EVAL | FORALL | WHEN | THEN | END | 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=77;
-        alt18 = dfa18.predict(input);
-        switch (alt18) {
-            case 1 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: T76
-                {
-                mT76(); if (failed) return ;
-
-                }
-                break;
-            case 2 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:14: T77
-                {
-                mT77(); if (failed) return ;
-
-                }
-                break;
-            case 3 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:18: T78
-                {
-                mT78(); if (failed) return ;
-
-                }
-                break;
-            case 4 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:22: T79
-                {
-                mT79(); if (failed) return ;
-
-                }
-                break;
-            case 5 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:26: T80
-                {
-                mT80(); if (failed) return ;
-
-                }
-                break;
-            case 6 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: T81
-                {
-                mT81(); if (failed) return ;
-
-                }
-                break;
-            case 7 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:34: T82
-                {
-                mT82(); if (failed) return ;
-
-                }
-                break;
-            case 8 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:38: T83
-                {
-                mT83(); if (failed) return ;
-
-                }
-                break;
-            case 9 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:42: T84
-                {
-                mT84(); if (failed) return ;
-
-                }
-                break;
-            case 10 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:46: T85
-                {
-                mT85(); if (failed) return ;
-
-                }
-                break;
-            case 11 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:50: WS
-                {
-                mWS(); if (failed) return ;
-
-                }
-                break;
-            case 12 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:53: INT
-                {
-                mINT(); if (failed) return ;
-
-                }
-                break;
-            case 13 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:57: FLOAT
-                {
-                mFLOAT(); if (failed) return ;
-
-                }
-                break;
-            case 14 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:63: STRING
-                {
-                mSTRING(); if (failed) return ;
-
-                }
-                break;
-            case 15 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:70: BOOL
-                {
-                mBOOL(); if (failed) return ;
-
-                }
-                break;
-            case 16 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:75: PACKAGE
-                {
-                mPACKAGE(); if (failed) return ;
-
-                }
-                break;
-            case 17 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:83: IMPORT
-                {
-                mIMPORT(); if (failed) return ;
-
-                }
-                break;
-            case 18 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:90: FUNCTION
-                {
-                mFUNCTION(); if (failed) return ;
-
-                }
-                break;
-            case 19 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:99: EVENT
-                {
-                mEVENT(); if (failed) return ;
-
-                }
-                break;
-            case 20 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:105: GLOBAL
-                {
-                mGLOBAL(); if (failed) return ;
-
-                }
-                break;
-            case 21 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:112: DECLARE
-                {
-                mDECLARE(); if (failed) return ;
-
-                }
-                break;
-            case 22 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:120: RULE
-                {
-                mRULE(); if (failed) return ;
-
-                }
-                break;
-            case 23 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:125: QUERY
-                {
-                mQUERY(); if (failed) return ;
-
-                }
-                break;
-            case 24 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:131: TEMPLATE
-                {
-                mTEMPLATE(); if (failed) return ;
-
-                }
-                break;
-            case 25 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:140: ATTRIBUTES
-                {
-                mATTRIBUTES(); if (failed) return ;
-
-                }
-                break;
-            case 26 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:151: DATE_EFFECTIVE
-                {
-                mDATE_EFFECTIVE(); if (failed) return ;
-
-                }
-                break;
-            case 27 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:166: DATE_EXPIRES
-                {
-                mDATE_EXPIRES(); if (failed) return ;
-
-                }
-                break;
-            case 28 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:179: ENABLED
-                {
-                mENABLED(); if (failed) return ;
-
-                }
-                break;
-            case 29 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:187: SALIENCE
-                {
-                mSALIENCE(); if (failed) return ;
-
-                }
-                break;
-            case 30 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:196: NO_LOOP
-                {
-                mNO_LOOP(); if (failed) return ;
-
-                }
-                break;
-            case 31 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:204: AUTO_FOCUS
-                {
-                mAUTO_FOCUS(); if (failed) return ;
-
-                }
-                break;
-            case 32 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:215: ACTIVATION_GROUP
-                {
-                mACTIVATION_GROUP(); if (failed) return ;
-
-                }
-                break;
-            case 33 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:232: AGENDA_GROUP
-                {
-                mAGENDA_GROUP(); if (failed) return ;
-
-                }
-                break;
-            case 34 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:245: DIALECT
-                {
-                mDIALECT(); if (failed) return ;
-
-                }
-                break;
-            case 35 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:253: RULEFLOW_GROUP
-                {
-                mRULEFLOW_GROUP(); if (failed) return ;
-
-                }
-                break;
-            case 36 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:268: DURATION
-                {
-                mDURATION(); if (failed) return ;
-
-                }
-                break;
-            case 37 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:277: LOCK_ON_ACTIVE
-                {
-                mLOCK_ON_ACTIVE(); if (failed) return ;
-
-                }
-                break;
-            case 38 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:292: FROM
-                {
-                mFROM(); if (failed) return ;
-
-                }
-                break;
-            case 39 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:297: ACCUMULATE
-                {
-                mACCUMULATE(); if (failed) return ;
-
-                }
-                break;
-            case 40 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:308: INIT
-                {
-                mINIT(); if (failed) return ;
-
-                }
-                break;
-            case 41 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:313: ACTION
-                {
-                mACTION(); if (failed) return ;
-
-                }
-                break;
-            case 42 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:320: REVERSE
-                {
-                mREVERSE(); if (failed) return ;
-
-                }
-                break;
-            case 43 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:328: RESULT
-                {
-                mRESULT(); if (failed) return ;
-
-                }
-                break;
-            case 44 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:335: COLLECT
-                {
-                mCOLLECT(); if (failed) return ;
-
-                }
-                break;
-            case 45 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:343: ENTRY_POINT
-                {
-                mENTRY_POINT(); if (failed) return ;
-
-                }
-                break;
-            case 46 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:355: OR
-                {
-                mOR(); if (failed) return ;
-
-                }
-                break;
-            case 47 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:358: AND
-                {
-                mAND(); if (failed) return ;
-
-                }
-                break;
-            case 48 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:362: CONTAINS
-                {
-                mCONTAINS(); if (failed) return ;
-
-                }
-                break;
-            case 49 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:371: EXCLUDES
-                {
-                mEXCLUDES(); if (failed) return ;
-
-                }
-                break;
-            case 50 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:380: MEMBEROF
-                {
-                mMEMBEROF(); if (failed) return ;
-
-                }
-                break;
-            case 51 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:389: MATCHES
-                {
-                mMATCHES(); if (failed) return ;
-
-                }
-                break;
-            case 52 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:397: SOUNDSLIKE
-                {
-                mSOUNDSLIKE(); if (failed) return ;
-
-                }
-                break;
-            case 53 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:408: IN
-                {
-                mIN(); if (failed) return ;
-
-                }
-                break;
-            case 54 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:411: NULL
-                {
-                mNULL(); if (failed) return ;
-
-                }
-                break;
-            case 55 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:416: EXISTS
-                {
-                mEXISTS(); if (failed) return ;
-
-                }
-                break;
-            case 56 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:423: NOT
-                {
-                mNOT(); if (failed) return ;
-
-                }
-                break;
-            case 57 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:427: EVAL
-                {
-                mEVAL(); if (failed) return ;
-
-                }
-                break;
-            case 58 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:432: FORALL
-                {
-                mFORALL(); if (failed) return ;
-
-                }
-                break;
-            case 59 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:439: WHEN
-                {
-                mWHEN(); if (failed) return ;
-
-                }
-                break;
-            case 60 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:444: THEN
-                {
-                mTHEN(); if (failed) return ;
-
-                }
-                break;
-            case 61 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:449: END
-                {
-                mEND(); if (failed) return ;
-
-                }
-                break;
-            case 62 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:453: ID
-                {
-                mID(); if (failed) return ;
-
-                }
-                break;
-            case 63 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:456: LEFT_PAREN
-                {
-                mLEFT_PAREN(); if (failed) return ;
-
-                }
-                break;
-            case 64 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:467: RIGHT_PAREN
-                {
-                mRIGHT_PAREN(); if (failed) return ;
-
-                }
-                break;
-            case 65 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:479: LEFT_SQUARE
-                {
-                mLEFT_SQUARE(); if (failed) return ;
-
-                }
-                break;
-            case 66 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:491: RIGHT_SQUARE
-                {
-                mRIGHT_SQUARE(); if (failed) return ;
-
-                }
-                break;
-            case 67 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:504: LEFT_CURLY
-                {
-                mLEFT_CURLY(); if (failed) return ;
-
-                }
-                break;
-            case 68 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:515: RIGHT_CURLY
-                {
-                mRIGHT_CURLY(); if (failed) return ;
-
-                }
-                break;
-            case 69 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:527: COMMA
-                {
-                mCOMMA(); if (failed) return ;
-
-                }
-                break;
-            case 70 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:533: DOT
-                {
-                mDOT(); if (failed) return ;
-
-                }
-                break;
-            case 71 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:537: DOUBLE_AMPER
-                {
-                mDOUBLE_AMPER(); if (failed) return ;
-
-                }
-                break;
-            case 72 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:550: DOUBLE_PIPE
-                {
-                mDOUBLE_PIPE(); if (failed) return ;
-
-                }
-                break;
-            case 73 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:562: TILDE
-                {
-                mTILDE(); if (failed) return ;
-
-                }
-                break;
-            case 74 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:568: SH_STYLE_SINGLE_LINE_COMMENT
-                {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
-
-                }
-                break;
-            case 75 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:597: C_STYLE_SINGLE_LINE_COMMENT
-                {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
-
-                }
-                break;
-            case 76 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:625: MULTI_LINE_COMMENT
-                {
-                mMULTI_LINE_COMMENT(); if (failed) return ;
-
-                }
-                break;
-            case 77 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:644: MISC
-                {
-                mMISC(); if (failed) return ;
-
-                }
-                break;
-
-        }
-
-    }
-
-    // $ANTLR start synpred1
-    public final void synpred1_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:14: ( '\\r\\n' )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:16: '\\r\\n'
-        {
-        match("\r\n"); if (failed) return ;
-
-
-        }
-    }
-    // $ANTLR end synpred1
-
-    public final boolean synpred1() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred1_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-
-
-    protected DFA18 dfa18 = new DFA18(this);
-    static final String DFA18_eotS =
-        "\2\uffff\1\56\1\uffff\2\54\1\62\1\64\1\54\1\uffff\1\66\1\uffff\1"+
-        "\54\21\53\10\uffff\2\54\2\uffff\1\54\15\uffff\10\53\1\151\27\53"+
-        "\1\u0089\3\53\4\uffff\11\53\1\uffff\3\53\1\u0099\17\53\1\u00a9\6"+
-        "\53\1\u00b0\1\uffff\3\53\1\uffff\3\53\1\u00b7\1\53\1\u00b9\1\u00ba"+
-        "\4\53\1\u00bf\3\53\1\uffff\2\53\1\u00c5\10\53\1\u00cf\3\53\1\uffff"+
-        "\5\53\1\u00d9\1\uffff\5\53\1\u00df\1\uffff\1\53\2\uffff\1\u00b7"+
-        "\3\53\1\uffff\5\53\1\uffff\1\u00e9\4\53\1\uffff\3\53\1\uffff\1\u00f2"+
-        "\4\53\1\uffff\3\53\2\uffff\4\53\1\uffff\1\53\1\u00ff\2\53\1\u0102"+
-        "\1\53\1\u0104\1\uffff\1\53\1\uffff\1\u0106\3\53\1\uffff\1\53\1\u010d"+
-        "\1\53\1\uffff\2\53\1\u0111\11\53\1\uffff\1\53\1\u011c\1\uffff\1"+
-        "\53\1\uffff\1\u011e\1\uffff\1\53\1\u0120\1\u0121\2\uffff\1\u0122"+
-        "\1\uffff\3\53\1\uffff\1\53\1\uffff\2\53\1\u0129\2\53\1\u012c\1\u012d"+
-        "\1\u012e\1\uffff\1\u012f\1\uffff\1\u0130\3\uffff\5\53\1\u0136\1"+
-        "\uffff\1\u0137\1\u0138\6\uffff\4\53\3\uffff\1\u013d\1\53\1\u013f"+
-        "\1\u0140\4\uffff";
-    static final String DFA18_eofS =
-        "\u0141\uffff";
-    static final String DFA18_minS =
-        "\1\11\1\uffff\1\52\1\uffff\1\60\4\75\1\uffff\1\56\1\uffff\1\0\1"+
-        "\145\2\141\1\155\1\156\1\154\1\141\1\145\1\165\1\143\1\141\3\157"+
-        "\1\162\1\141\1\150\10\uffff\1\46\1\174\2\uffff\1\52\15\uffff\1\165"+
-        "\1\155\1\145\1\157\1\154\1\162\1\156\1\143\1\60\1\160\1\143\2\141"+
-        "\1\157\1\162\1\141\1\143\1\164\1\163\1\154\1\145\1\143\1\144\2\164"+
-        "\1\145\1\165\2\154\1\55\1\143\1\154\1\60\1\155\1\164\1\145\4\uffff"+
-        "\1\145\1\160\1\156\1\155\1\163\1\141\1\143\1\153\1\164\1\uffff\1"+
-        "\157\1\154\1\163\1\60\1\162\1\142\1\154\1\156\1\142\1\141\2\154"+
-        "\2\145\1\165\1\145\1\162\1\165\1\151\1\60\1\162\1\157\2\156\1\151"+
-        "\1\154\1\60\1\uffff\1\153\1\154\1\164\1\uffff\1\142\1\143\1\156"+
-        "\1\60\1\154\2\60\1\145\1\154\1\164\1\141\1\60\1\162\1\165\1\164"+
-        "\1\uffff\1\171\1\154\1\60\1\164\1\141\1\164\1\145\1\141\1\55\1\162"+
-        "\1\154\1\60\1\171\1\155\1\157\1\uffff\1\151\1\55\2\144\1\145\1\60"+
-        "\1\uffff\1\55\1\145\1\141\1\145\1\150\1\60\1\uffff\1\141\2\uffff"+
-        "\1\60\1\154\1\151\1\147\1\uffff\1\164\1\144\1\163\1\55\1\145\1\uffff"+
-        "\1\60\1\154\1\151\1\143\1\162\1\145\1\163\1\164\1\154\1\uffff\1"+
-        "\60\1\165\1\141\1\156\1\142\1\uffff\1\141\1\163\1\156\2\uffff\1"+
-        "\143\1\151\1\162\1\145\1\uffff\1\164\1\60\1\157\1\145\1\60\1\145"+
-        "\1\60\1\uffff\1\144\1\uffff\1\60\1\157\1\164\1\145\1\146\1\145\1"+
-        "\60\1\157\1\uffff\1\154\1\164\1\60\1\165\1\55\1\154\1\143\1\164"+
-        "\1\156\1\117\1\163\1\145\1\uffff\1\156\1\60\1\uffff\1\163\1\uffff"+
-        "\1\60\1\uffff\1\156\2\60\2\uffff\1\60\1\uffff\1\167\1\141\1\151"+
-        "\1\uffff\1\164\1\uffff\1\151\1\145\1\60\1\163\1\146\3\60\1\uffff"+
-        "\1\60\1\uffff\1\60\3\uffff\1\55\1\164\1\157\1\145\1\153\1\60\1\uffff"+
-        "\2\60\6\uffff\1\145\1\156\1\163\1\145\3\uffff\1\60\1\55\2\60\4\uffff";
-    static final String DFA18_maxS =
-        "\1\u00ff\1\uffff\1\52\1\uffff\1\76\4\75\1\uffff\1\71\1\uffff\1\ufffe"+
-        "\1\162\1\165\1\141\1\156\1\170\1\154\4\165\1\157\1\165\2\157\1\162"+
-        "\1\145\1\150\10\uffff\1\46\1\174\2\uffff\1\57\15\uffff\1\165\1\155"+
-        "\1\145\1\157\1\154\1\162\1\156\1\143\1\u00ff\1\160\1\151\1\164\1"+
-        "\145\1\157\1\162\1\141\1\143\1\164\1\166\1\154\1\145\1\164\1\144"+
-        "\2\164\1\145\1\165\2\154\1\164\1\143\1\156\1\u00ff\1\155\1\164\1"+
-        "\145\4\uffff\1\145\1\160\1\156\1\155\1\163\1\141\1\143\1\153\1\164"+
-        "\1\uffff\1\157\1\154\1\163\1\u00ff\1\162\1\142\1\154\1\156\1\142"+
-        "\1\141\2\154\2\145\1\165\1\145\1\162\1\165\1\151\1\u00ff\1\162\1"+
-        "\157\2\156\1\151\1\154\1\u00ff\1\uffff\1\153\1\154\1\164\1\uffff"+
-        "\1\142\1\143\1\156\1\u00ff\1\154\2\u00ff\1\145\1\154\1\164\1\141"+
-        "\1\u00ff\1\162\1\165\1\164\1\uffff\1\171\1\154\1\u00ff\1\164\1\141"+
-        "\1\164\1\145\1\141\1\55\1\162\1\154\1\u00ff\1\171\1\155\1\166\1"+
-        "\uffff\1\151\1\55\2\144\1\145\1\u00ff\1\uffff\1\55\1\145\1\141\1"+
-        "\145\1\150\1\u00ff\1\uffff\1\141\2\uffff\1\u00ff\1\154\1\151\1\147"+
-        "\1\uffff\1\164\1\144\1\163\1\55\1\145\1\uffff\1\u00ff\1\154\1\151"+
-        "\1\143\1\162\1\145\1\163\1\164\1\154\1\uffff\1\u00ff\1\165\1\141"+
-        "\1\156\1\142\1\uffff\1\141\1\163\1\156\2\uffff\1\143\1\151\1\162"+
-        "\1\145\1\uffff\1\164\1\u00ff\1\157\1\145\1\u00ff\1\145\1\u00ff\1"+
-        "\uffff\1\144\1\uffff\1\u00ff\1\157\1\164\1\145\1\170\1\145\1\u00ff"+
-        "\1\157\1\uffff\1\154\1\164\1\u00ff\1\165\1\55\1\154\1\143\1\164"+
-        "\1\156\1\117\1\163\1\145\1\uffff\1\156\1\u00ff\1\uffff\1\163\1\uffff"+
-        "\1\u00ff\1\uffff\1\156\2\u00ff\2\uffff\1\u00ff\1\uffff\1\167\1\141"+
-        "\1\151\1\uffff\1\164\1\uffff\1\151\1\145\1\u00ff\1\163\1\146\3\u00ff"+
-        "\1\uffff\1\u00ff\1\uffff\1\u00ff\3\uffff\1\55\1\164\1\157\1\145"+
-        "\1\153\1\u00ff\1\uffff\2\u00ff\6\uffff\1\145\1\156\1\163\1\145\3"+
-        "\uffff\1\u00ff\1\55\2\u00ff\4\uffff";
-    static final String DFA18_acceptS =
-        "\1\uffff\1\1\1\uffff\1\3\5\uffff\1\13\1\uffff\1\16\22\uffff\1\76"+
-        "\1\77\1\100\1\101\1\102\1\103\1\104\1\105\2\uffff\1\111\1\112\1"+
-        "\uffff\1\76\1\115\1\2\1\106\1\4\1\5\1\7\1\6\1\11\1\10\1\12\1\14"+
-        "\1\15\44\uffff\1\107\1\110\1\114\1\113\11\uffff\1\65\33\uffff\1"+
-        "\36\3\uffff\1\56\17\uffff\1\75\17\uffff\1\57\6\uffff\1\70\6\uffff"+
-        "\1\17\1\uffff\1\74\1\46\4\uffff\1\50\5\uffff\1\71\11\uffff\1\26"+
-        "\5\uffff\1\37\3\uffff\1\66\1\45\4\uffff\1\73\7\uffff\1\55\1\uffff"+
-        "\1\23\10\uffff\1\27\14\uffff\1\72\2\uffff\1\21\1\uffff\1\67\1\uffff"+
-        "\1\24\3\uffff\1\33\1\32\1\uffff\1\53\3\uffff\1\51\1\uffff\1\41\10"+
-        "\uffff\1\20\1\uffff\1\34\1\uffff\1\42\1\25\1\52\6\uffff\1\54\2\uffff"+
-        "\1\63\1\30\1\22\1\61\1\44\1\43\4\uffff\1\35\1\60\1\62\4\uffff\1"+
-        "\47\1\40\1\31\1\64";
-    static final String DFA18_specialS =
-        "\u0141\uffff}>";
-    static final String[] DFA18_transitionS = {
-            "\2\11\1\uffff\2\11\22\uffff\1\11\1\10\1\13\1\51\1\36\1\54\1"+
-            "\46\1\14\1\37\1\40\2\54\1\45\1\4\1\2\1\52\12\12\1\3\1\1\1\7"+
-            "\1\5\1\6\2\54\32\53\1\41\1\54\1\42\1\54\1\36\1\uffff\1\26\1"+
-            "\53\1\32\1\23\1\21\1\16\1\22\1\53\1\20\2\53\1\31\1\34\1\30\1"+
-            "\33\1\17\1\25\1\24\1\27\1\15\2\53\1\35\3\53\1\43\1\47\1\44\1"+
-            "\50\101\uffff\100\53",
-            "",
-            "\1\55",
-            "",
-            "\12\12\4\uffff\1\57",
-            "\1\60",
-            "\1\61",
-            "\1\63",
-            "\1\65",
-            "",
-            "\1\67\1\uffff\12\12",
-            "",
-            "\uffff\13",
-            "\1\71\2\uffff\1\72\11\uffff\1\70",
-            "\1\74\15\uffff\1\75\2\uffff\1\73\2\uffff\1\76",
-            "\1\77",
-            "\1\101\1\100",
-            "\1\103\7\uffff\1\104\1\uffff\1\102",
-            "\1\105",
-            "\1\111\3\uffff\1\110\3\uffff\1\107\13\uffff\1\106",
-            "\1\112\17\uffff\1\113",
-            "\1\114",
-            "\1\115\3\uffff\1\121\6\uffff\1\116\5\uffff\1\117\1\120",
-            "\1\123\15\uffff\1\122",
-            "\1\125\5\uffff\1\124",
-            "\1\126",
-            "\1\127",
-            "\1\130",
-            "\1\132\3\uffff\1\131",
-            "\1\133",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\134",
-            "\1\135",
-            "",
-            "",
-            "\1\136\4\uffff\1\137",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\140",
-            "\1\141",
-            "\1\142",
-            "\1\143",
-            "\1\144",
-            "\1\145",
-            "\1\146",
-            "\1\147",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\10\53\1\150\21\53"+
-            "\105\uffff\100\53",
-            "\1\152",
-            "\1\153\5\uffff\1\154",
-            "\1\157\2\uffff\1\155\17\uffff\1\156",
-            "\1\160\3\uffff\1\161",
-            "\1\162",
-            "\1\163",
-            "\1\164",
-            "\1\165",
-            "\1\166",
-            "\1\170\2\uffff\1\167",
-            "\1\171",
-            "\1\172",
-            "\1\173\20\uffff\1\174",
-            "\1\175",
-            "\1\176",
-            "\1\177",
-            "\1\u0080",
-            "\1\u0081",
-            "\1\u0082",
-            "\1\u0083",
-            "\1\u0085\106\uffff\1\u0084",
-            "\1\u0086",
-            "\1\u0087\1\uffff\1\u0088",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u008a",
-            "\1\u008b",
-            "\1\u008c",
-            "",
-            "",
-            "",
-            "",
-            "\1\u008d",
-            "\1\u008e",
-            "\1\u008f",
-            "\1\u0090",
-            "\1\u0091",
-            "\1\u0092",
-            "\1\u0093",
-            "\1\u0094",
-            "\1\u0095",
-            "",
-            "\1\u0096",
-            "\1\u0097",
-            "\1\u0098",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u009a",
-            "\1\u009b",
-            "\1\u009c",
-            "\1\u009d",
-            "\1\u009e",
-            "\1\u009f",
-            "\1\u00a0",
-            "\1\u00a1",
-            "\1\u00a2",
-            "\1\u00a3",
-            "\1\u00a4",
-            "\1\u00a5",
-            "\1\u00a6",
-            "\1\u00a7",
-            "\1\u00a8",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00aa",
-            "\1\u00ab",
-            "\1\u00ac",
-            "\1\u00ad",
-            "\1\u00ae",
-            "\1\u00af",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u00b1",
-            "\1\u00b2",
-            "\1\u00b3",
-            "",
-            "\1\u00b4",
-            "\1\u00b5",
-            "\1\u00b6",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00b8",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00bb",
-            "\1\u00bc",
-            "\1\u00bd",
-            "\1\u00be",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00c0",
-            "\1\u00c1",
-            "\1\u00c2",
-            "",
-            "\1\u00c3",
-            "\1\u00c4",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00c6",
-            "\1\u00c7",
-            "\1\u00c8",
-            "\1\u00c9",
-            "\1\u00ca",
-            "\1\u00cb",
-            "\1\u00cc",
-            "\1\u00cd",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\5\53\1\u00ce\24\53"+
-            "\105\uffff\100\53",
-            "\1\u00d0",
-            "\1\u00d1",
-            "\1\u00d3\6\uffff\1\u00d2",
-            "",
-            "\1\u00d4",
-            "\1\u00d5",
-            "\1\u00d6",
-            "\1\u00d7",
-            "\1\u00d8",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u00da",
-            "\1\u00db",
-            "\1\u00dc",
-            "\1\u00dd",
-            "\1\u00de",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u00e0",
-            "",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00e1",
-            "\1\u00e2",
-            "\1\u00e3",
-            "",
-            "\1\u00e4",
-            "\1\u00e5",
-            "\1\u00e6",
-            "\1\u00e7",
-            "\1\u00e8",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00ea",
-            "\1\u00eb",
-            "\1\u00ec",
-            "\1\u00ed",
-            "\1\u00ee",
-            "\1\u00ef",
-            "\1\u00f0",
-            "\1\u00f1",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u00f3",
-            "\1\u00f4",
-            "\1\u00f5",
-            "\1\u00f6",
-            "",
-            "\1\u00f7",
-            "\1\u00f8",
-            "\1\u00f9",
-            "",
-            "",
-            "\1\u00fa",
-            "\1\u00fb",
-            "\1\u00fc",
-            "\1\u00fd",
-            "",
-            "\1\u00fe",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u0100",
-            "\1\u0101",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u0103",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u0105",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u0107",
-            "\1\u0108",
-            "\1\u0109",
-            "\1\u010b\21\uffff\1\u010a",
-            "\1\u010c",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u010e",
-            "",
-            "\1\u010f",
-            "\1\u0110",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u0112",
-            "\1\u0113",
-            "\1\u0114",
-            "\1\u0115",
-            "\1\u0116",
-            "\1\u0117",
-            "\1\u0118",
-            "\1\u0119",
-            "\1\u011a",
-            "",
-            "\1\u011b",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u011d",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u011f",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\1\u0123",
-            "\1\u0124",
-            "\1\u0125",
-            "",
-            "\1\u0126",
-            "",
-            "\1\u0127",
-            "\1\u0128",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u012a",
-            "\1\u012b",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "",
-            "",
-            "\1\u0131",
-            "\1\u0132",
-            "\1\u0133",
-            "\1\u0134",
-            "\1\u0135",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u0139",
-            "\1\u013a",
-            "\1\u013b",
-            "\1\u013c",
-            "",
-            "",
-            "",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\1\u013e",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "\12\53\7\uffff\32\53\4\uffff\1\53\1\uffff\32\53\105\uffff\100"+
-            "\53",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    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 {
-        int numStates = DFA18_transitionS.length;
-        DFA18_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA18_transition[i] = DFA.unpackEncodedString(DFA18_transitionS[i]);
-        }
-    }
-
-    class DFA18 extends DFA {
-
-        public DFA18(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;
-        }
-        public String getDescription() {
-            return "1:1: Tokens : ( T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | WS | INT | FLOAT | STRING | BOOL | PACKAGE | IMPORT | FUNCTION | EVENT | GLOBAL | DECLARE | RULE | QUERY | TEMPLATE | ATTRIBUTES | DATE_EFFECTIVE | DATE_EXPIRES | ENABLED | SALIENCE | NO_LOOP | AUTO_FOCUS | ACTIVATION_GROUP | AGENDA_GROUP | DIALECT | RULEFLOW_GROUP | DURATION | LOCK_ON_ACTIVE | FROM | ACCUMULATE | INIT | ACTION | REVERSE | RESULT | COLLECT | ENTRY_POINT | OR | AND | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | SOUNDSLIKE | IN | NULL | EXISTS | NOT | EVAL | FORALL | WHEN | THEN | END | 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 );";
-        }
-    }
- 
-
-}
\ No newline at end of file

Copied: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java (from rev 19914, 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/DRLLexer.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-05-19 17:40:22 UTC (rev 20043)
@@ -0,0 +1,2062 @@
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-05-19 14:24:15
+
+	package org.drools.lang;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+public class DRLLexer extends Lexer {
+    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=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;
+
+    	/** The standard method called to automatically emit a token at the
+    	 *  outermost lexical rule.  The token object should point into the
+    	 *  char buffer start..stop.  If there is a text override in 'text',
+    	 *  use that to set the token's text.  Override this method to emit
+    	 *  custom Token objects.
+    	 */
+    	public Token emit() {
+    		Token t = new DroolsToken(input, type, channel, tokenStartCharIndex, getCharIndex()-1);
+    		t.setLine(tokenStartLine);
+    		t.setText(text);
+    		t.setCharPositionInLine(tokenStartCharPositionInLine);
+    		emit(t);
+    		return t;
+    	}
+
+    public DRLLexer() {;} 
+    public DRLLexer(CharStream input) {
+        super(input);
+        ruleMemo = new HashMap[40+1];
+     }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
+
+    // $ANTLR start WS
+    public final void mWS() throws RecognitionException {
+        try {
+            int _type = WS;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            int cnt1=0;
+            loop1:
+            do {
+                int alt1=5;
+                switch ( input.LA(1) ) {
+                case ' ':
+                    {
+                    alt1=1;
+                    }
+                    break;
+                case '\t':
+                    {
+                    alt1=2;
+                    }
+                    break;
+                case '\f':
+                    {
+                    alt1=3;
+                    }
+                    break;
+                case '\n':
+                case '\r':
+                    {
+                    alt1=4;
+                    }
+                    break;
+
+                }
+
+                switch (alt1) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:19: ' '
+            	    {
+            	    match(' '); if (failed) return ;
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:984:19: '\\t'
+            	    {
+            	    match('\t'); if (failed) return ;
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:19: '\\f'
+            	    {
+            	    match('\f'); if (failed) return ;
+
+            	    }
+            	    break;
+            	case 4 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:19: EOL
+            	    {
+            	    mEOL(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt1 >= 1 ) break loop1;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(1, input);
+                        throw eee;
+                }
+                cnt1++;
+            } while (true);
+
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end WS
+
+    // $ANTLR start EOL
+    public final void mEOL() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            int alt2=3;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0=='\r') ) {
+                int LA2_1 = input.LA(2);
+
+                if ( (LA2_1=='\n') && (synpred1())) {
+                    alt2=1;
+                }
+                else {
+                    alt2=2;}
+            }
+            else if ( (LA2_0=='\n') ) {
+                alt2=3;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("993:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+
+                throw nvae;
+            }
+            switch (alt2) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:14: ( '\\r\\n' )=> '\\r\\n'
+                    {
+                    match("\r\n"); if (failed) return ;
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:25: '\\r'
+                    {
+                    match('\r'); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:25: '\\n'
+                    {
+                    match('\n'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EOL
+
+    // $ANTLR start INT
+    public final void mINT() throws RecognitionException {
+        try {
+            int _type = INT;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:4: ( '-' )? ( '0' .. '9' )+
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:4: ( '-' )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0=='-') ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:5: '-'
+                    {
+                    match('-'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:10: ( '0' .. '9' )+
+            int cnt4=0;
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( ((LA4_0>='0' && LA4_0<='9')) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:11: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt4 >= 1 ) break loop4;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(4, input);
+                        throw eee;
+                }
+                cnt4++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end INT
+
+    // $ANTLR start FLOAT
+    public final void mFLOAT() throws RecognitionException {
+        try {
+            int _type = FLOAT;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: ( '-' )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0=='-') ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:5: '-'
+                    {
+                    match('-'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:10: ( '0' .. '9' )+
+            int cnt6=0;
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>='0' && LA6_0<='9')) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:11: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt6 >= 1 ) break loop6;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(6, input);
+                        throw eee;
+                }
+                cnt6++;
+            } while (true);
+
+            match('.'); if (failed) return ;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:26: ( '0' .. '9' )+
+            int cnt7=0;
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( ((LA7_0>='0' && LA7_0<='9')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:27: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt7 >= 1 ) break loop7;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(7, input);
+                        throw eee;
+                }
+                cnt7++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end FLOAT
+
+    // $ANTLR start STRING
+    public final void mSTRING() throws RecognitionException {
+        try {
+            int _type = STRING;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\"') ) {
+                alt10=1;
+            }
+            else if ( (LA10_0=='\'') ) {
+                alt10=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("1007:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+
+                throw nvae;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    {
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    {
+                    match('\"'); if (failed) return ;
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    loop8:
+                    do {
+                        int alt8=3;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0=='\\') ) {
+                            alt8=1;
+                        }
+                        else if ( ((LA8_0>='\u0000' && LA8_0<='!')||(LA8_0>='#' && LA8_0<='[')||(LA8_0>=']' && LA8_0<='\uFFFE')) ) {
+                            alt8=2;
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:15: EscapeSequence
+                    	    {
+                    	    mEscapeSequence(); if (failed) return ;
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:32: ~ ( '\\\\' | '\"' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+                    	    failed=false;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return ;}
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop8;
+                        }
+                    } while (true);
+
+                    match('\"'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    {
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    {
+                    match('\''); if (failed) return ;
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    loop9:
+                    do {
+                        int alt9=3;
+                        int LA9_0 = input.LA(1);
+
+                        if ( (LA9_0=='\\') ) {
+                            alt9=1;
+                        }
+                        else if ( ((LA9_0>='\u0000' && LA9_0<='&')||(LA9_0>='(' && LA9_0<='[')||(LA9_0>=']' && LA9_0<='\uFFFE')) ) {
+                            alt9=2;
+                        }
+
+
+                        switch (alt9) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:16: EscapeSequence
+                    	    {
+                    	    mEscapeSequence(); if (failed) return ;
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:33: ~ ( '\\\\' | '\\'' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+                    	    failed=false;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return ;}
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop9;
+                        }
+                    } while (true);
+
+                    match('\''); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end STRING
+
+    // $ANTLR start HexDigit
+    public final void mHexDigit() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            {
+            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();
+            failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end HexDigit
+
+    // $ANTLR start EscapeSequence
+    public final void mEscapeSequence() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1017:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
+            int alt11=3;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0=='\\') ) {
+                switch ( input.LA(2) ) {
+                case '\"':
+                case '$':
+                case '&':
+                case '\'':
+                case '(':
+                case ')':
+                case '*':
+                case '+':
+                case '-':
+                case '.':
+                case '?':
+                case 'A':
+                case 'B':
+                case 'D':
+                case 'E':
+                case 'G':
+                case 'Q':
+                case 'S':
+                case 'W':
+                case 'Z':
+                case '[':
+                case '\\':
+                case ']':
+                case '^':
+                case 'a':
+                case 'b':
+                case 'c':
+                case 'd':
+                case 'e':
+                case 'f':
+                case 'n':
+                case 'o':
+                case 'p':
+                case 'r':
+                case 's':
+                case 't':
+                case 'w':
+                case 'x':
+                case 'z':
+                case '{':
+                case '|':
+                case '}':
+                    {
+                    alt11=1;
+                    }
+                    break;
+                case 'u':
+                    {
+                    alt11=2;
+                    }
+                    break;
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                    {
+                    alt11=3;
+                    }
+                    break;
+                default:
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("1015:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+
+                    throw nvae;
+                }
+
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("1015:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+
+                throw nvae;
+            }
+            switch (alt11) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1017:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    {
+                    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)<='}') ) {
+                        input.consume();
+                    failed=false;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return ;}
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recover(mse);    throw mse;
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1021:9: UnicodeEscape
+                    {
+                    mUnicodeEscape(); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:9: OctalEscape
+                    {
+                    mOctalEscape(); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EscapeSequence
+
+    // $ANTLR start OctalEscape
+    public final void mOctalEscape() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            int alt12=3;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0=='\\') ) {
+                int LA12_1 = input.LA(2);
+
+                if ( ((LA12_1>='0' && LA12_1<='3')) ) {
+                    int LA12_2 = input.LA(3);
+
+                    if ( ((LA12_2>='0' && LA12_2<='7')) ) {
+                        int LA12_4 = input.LA(4);
+
+                        if ( ((LA12_4>='0' && LA12_4<='7')) ) {
+                            alt12=1;
+                        }
+                        else {
+                            alt12=2;}
+                    }
+                    else {
+                        alt12=3;}
+                }
+                else if ( ((LA12_1>='4' && LA12_1<='7')) ) {
+                    int LA12_3 = input.LA(3);
+
+                    if ( ((LA12_3>='0' && LA12_3<='7')) ) {
+                        alt12=2;
+                    }
+                    else {
+                        alt12=3;}
+                }
+                else {
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("1025:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("1025:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:14: ( '0' .. '3' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:15: '0' .. '3'
+                    {
+                    matchRange('0','3'); if (failed) return ;
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:26: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:36: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:37: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:15: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:26: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:9: '\\\\' ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:15: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        finally {
+        }
+    }
+    // $ANTLR end OctalEscape
+
+    // $ANTLR start UnicodeEscape
+    public final void mUnicodeEscape() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            {
+            match('\\'); if (failed) return ;
+            match('u'); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end UnicodeEscape
+
+    // $ANTLR start BOOL
+    public final void mBOOL() throws RecognitionException {
+        try {
+            int _type = BOOL;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:4: ( 'true' | 'false' )
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:4: ( 'true' | 'false' )
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='t') ) {
+                alt13=1;
+            }
+            else if ( (LA13_0=='f') ) {
+                alt13=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("1038:4: ( 'true' | 'false' )", 13, 0, input);
+
+                throw nvae;
+            }
+            switch (alt13) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:5: 'true'
+                    {
+                    match("true"); if (failed) return ;
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:12: 'false'
+                    {
+                    match("false"); if (failed) return ;
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end BOOL
+
+    // $ANTLR start NULL
+    public final void mNULL() throws RecognitionException {
+        try {
+            int _type = NULL;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:6: ( 'null' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:8: 'null'
+            {
+            match("null"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $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/DRL.g:1045:2: ( 'then' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045: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/DRL.g:1048:5: ( 'end' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048: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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:2: ( ';' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:4: ';'
+            {
+            match(';'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $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/DRL.g:1056:2: ( '.*' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1056: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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1060:2: ( ':' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1060:4: ':'
+            {
+            match(':'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end COLON
+
+    // $ANTLR start EQUAL
+    public final void mEQUAL() throws RecognitionException {
+        try {
+            int _type = EQUAL;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:2: ( '==' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:4: '=='
+            {
+            match("=="); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EQUAL
+
+    // $ANTLR start NOT_EQUAL
+    public final void mNOT_EQUAL() throws RecognitionException {
+        try {
+            int _type = NOT_EQUAL;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1069:2: ( '!=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1069:4: '!='
+            {
+            match("!="); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end NOT_EQUAL
+
+    // $ANTLR start GREATER
+    public final void mGREATER() throws RecognitionException {
+        try {
+            int _type = GREATER;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:2: ( '>' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:4: '>'
+            {
+            match('>'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end GREATER
+
+    // $ANTLR start GREATER_EQUAL
+    public final void mGREATER_EQUAL() throws RecognitionException {
+        try {
+            int _type = GREATER_EQUAL;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:2: ( '>=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:4: '>='
+            {
+            match(">="); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end GREATER_EQUAL
+
+    // $ANTLR start LESS
+    public final void mLESS() throws RecognitionException {
+        try {
+            int _type = LESS;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:2: ( '<' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:4: '<'
+            {
+            match('<'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LESS
+
+    // $ANTLR start LESS_EQUAL
+    public final void mLESS_EQUAL() throws RecognitionException {
+        try {
+            int _type = LESS_EQUAL;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1085:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1085:4: '<='
+            {
+            match("<="); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LESS_EQUAL
+
+    // $ANTLR start ARROW
+    public final void mARROW() throws RecognitionException {
+        try {
+            int _type = ARROW;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:2: ( '->' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:4: '->'
+            {
+            match("->"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end ARROW
+
+    // $ANTLR start ID
+    public final void mID() throws RecognitionException {
+        try {
+            int _type = ID;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            {
+            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();
+            failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( ((LA14_0>='0' && LA14_0<='9')||(LA14_0>='A' && LA14_0<='Z')||LA14_0=='_'||(LA14_0>='a' && LA14_0<='z')||(LA14_0>='\u00C0' && LA14_0<='\u00FF')) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
+            	        input.consume();
+            	    failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return ;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recover(mse);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end ID
+
+    // $ANTLR start LEFT_PAREN
+    public final void mLEFT_PAREN() throws RecognitionException {
+        try {
+            int _type = LEFT_PAREN;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:9: ( '(' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:11: '('
+            {
+            match('('); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_PAREN
+
+    // $ANTLR start RIGHT_PAREN
+    public final void mRIGHT_PAREN() throws RecognitionException {
+        try {
+            int _type = RIGHT_PAREN;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:9: ( ')' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:11: ')'
+            {
+            match(')'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_PAREN
+
+    // $ANTLR start LEFT_SQUARE
+    public final void mLEFT_SQUARE() throws RecognitionException {
+        try {
+            int _type = LEFT_SQUARE;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:9: ( '[' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:11: '['
+            {
+            match('['); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_SQUARE
+
+    // $ANTLR start RIGHT_SQUARE
+    public final void mRIGHT_SQUARE() throws RecognitionException {
+        try {
+            int _type = RIGHT_SQUARE;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1109:9: ( ']' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1109:11: ']'
+            {
+            match(']'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_SQUARE
+
+    // $ANTLR start LEFT_CURLY
+    public final void mLEFT_CURLY() throws RecognitionException {
+        try {
+            int _type = LEFT_CURLY;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:9: ( '{' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:11: '{'
+            {
+            match('{'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_CURLY
+
+    // $ANTLR start RIGHT_CURLY
+    public final void mRIGHT_CURLY() throws RecognitionException {
+        try {
+            int _type = RIGHT_CURLY;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:9: ( '}' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:11: '}'
+            {
+            match('}'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_CURLY
+
+    // $ANTLR start COMMA
+    public final void mCOMMA() throws RecognitionException {
+        try {
+            int _type = COMMA;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:7: ( ',' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:9: ','
+            {
+            match(','); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end COMMA
+
+    // $ANTLR start DOT
+    public final void mDOT() throws RecognitionException {
+        try {
+            int _type = DOT;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:5: ( '.' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:7: '.'
+            {
+            match('.'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DOT
+
+    // $ANTLR start DOUBLE_AMPER
+    public final void mDOUBLE_AMPER() throws RecognitionException {
+        try {
+            int _type = DOUBLE_AMPER;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:2: ( '&&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:4: '&&'
+            {
+            match("&&"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DOUBLE_AMPER
+
+    // $ANTLR start DOUBLE_PIPE
+    public final void mDOUBLE_PIPE() throws RecognitionException {
+        try {
+            int _type = DOUBLE_PIPE;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:2: ( '||' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:4: '||'
+            {
+            match("||"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DOUBLE_PIPE
+
+    // $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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:4: '#' ( options {greedy=false; } : . )* EOL
+            {
+            match('#'); if (failed) return ;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:8: ( options {greedy=false; } : . )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( (LA15_0=='\r') ) {
+                    alt15=2;
+                }
+                else if ( (LA15_0=='\n') ) {
+                    alt15=2;
+                }
+                else if ( ((LA15_0>='\u0000' && LA15_0<='\t')||(LA15_0>='\u000B' && LA15_0<='\f')||(LA15_0>='\u000E' && LA15_0<='\uFFFE')) ) {
+                    alt15=1;
+                }
+
+
+                switch (alt15) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:35: .
+            	    {
+            	    matchAny(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+            mEOL(); if (failed) return ;
+            if ( backtracking==0 ) {
+               channel=HIDDEN; setText("//"+getText().substring(1));
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
+
+    // $ANTLR start C_STYLE_SINGLE_LINE_COMMENT
+    public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = C_STYLE_SINGLE_LINE_COMMENT;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:4: '//' ( options {greedy=false; } : . )* EOL
+            {
+            match("//"); if (failed) return ;
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:9: ( options {greedy=false; } : . )*
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( (LA16_0=='\r') ) {
+                    alt16=2;
+                }
+                else if ( (LA16_0=='\n') ) {
+                    alt16=2;
+                }
+                else if ( ((LA16_0>='\u0000' && LA16_0<='\t')||(LA16_0>='\u000B' && LA16_0<='\f')||(LA16_0>='\u000E' && LA16_0<='\uFFFE')) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:36: .
+            	    {
+            	    matchAny(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop16;
+                }
+            } while (true);
+
+            mEOL(); if (failed) return ;
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
+
+    // $ANTLR start MULTI_LINE_COMMENT
+    public final void mMULTI_LINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = MULTI_LINE_COMMENT;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:4: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); if (failed) return ;
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:9: ( options {greedy=false; } : . )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( (LA17_0=='*') ) {
+                    int LA17_1 = input.LA(2);
+
+                    if ( (LA17_1=='/') ) {
+                        alt17=2;
+                    }
+                    else if ( ((LA17_1>='\u0000' && LA17_1<='.')||(LA17_1>='0' && LA17_1<='\uFFFE')) ) {
+                        alt17=1;
+                    }
+
+
+                }
+                else if ( ((LA17_0>='\u0000' && LA17_0<=')')||(LA17_0>='+' && LA17_0<='\uFFFE')) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:35: .
+            	    {
+            	    matchAny(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+            match("*/"); if (failed) return ;
+
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end MULTI_LINE_COMMENT
+
+    // $ANTLR start MISC
+    public final void mMISC() throws RecognitionException {
+        try {
+            int _type = MISC;
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
+            {
+            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();
+            failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end MISC
+
+    public void mTokens() throws RecognitionException {
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | NULL | THEN | END | 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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: WS
+                {
+                mWS(); if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:13: INT
+                {
+                mINT(); if (failed) return ;
+
+                }
+                break;
+            case 3 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:17: FLOAT
+                {
+                mFLOAT(); if (failed) return ;
+
+                }
+                break;
+            case 4 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:23: STRING
+                {
+                mSTRING(); if (failed) return ;
+
+                }
+                break;
+            case 5 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: BOOL
+                {
+                mBOOL(); if (failed) return ;
+
+                }
+                break;
+            case 6 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:35: NULL
+                {
+                mNULL(); if (failed) return ;
+
+                }
+                break;
+            case 7 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:40: THEN
+                {
+                mTHEN(); if (failed) return ;
+
+                }
+                break;
+            case 8 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:45: END
+                {
+                mEND(); if (failed) return ;
+
+                }
+                break;
+            case 9 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:49: SEMICOLON
+                {
+                mSEMICOLON(); if (failed) return ;
+
+                }
+                break;
+            case 10 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:59: DOT_STAR
+                {
+                mDOT_STAR(); if (failed) return ;
+
+                }
+                break;
+            case 11 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:68: COLON
+                {
+                mCOLON(); if (failed) return ;
+
+                }
+                break;
+            case 12 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:74: EQUAL
+                {
+                mEQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 13 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:80: NOT_EQUAL
+                {
+                mNOT_EQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 14 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:90: GREATER
+                {
+                mGREATER(); if (failed) return ;
+
+                }
+                break;
+            case 15 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:98: GREATER_EQUAL
+                {
+                mGREATER_EQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 16 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:112: LESS
+                {
+                mLESS(); if (failed) return ;
+
+                }
+                break;
+            case 17 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:117: LESS_EQUAL
+                {
+                mLESS_EQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 18 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:128: ARROW
+                {
+                mARROW(); if (failed) return ;
+
+                }
+                break;
+            case 19 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:134: ID
+                {
+                mID(); if (failed) return ;
+
+                }
+                break;
+            case 20 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:137: LEFT_PAREN
+                {
+                mLEFT_PAREN(); if (failed) return ;
+
+                }
+                break;
+            case 21 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:148: RIGHT_PAREN
+                {
+                mRIGHT_PAREN(); if (failed) return ;
+
+                }
+                break;
+            case 22 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:160: LEFT_SQUARE
+                {
+                mLEFT_SQUARE(); if (failed) return ;
+
+                }
+                break;
+            case 23 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:172: RIGHT_SQUARE
+                {
+                mRIGHT_SQUARE(); if (failed) return ;
+
+                }
+                break;
+            case 24 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:185: LEFT_CURLY
+                {
+                mLEFT_CURLY(); if (failed) return ;
+
+                }
+                break;
+            case 25 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:196: RIGHT_CURLY
+                {
+                mRIGHT_CURLY(); if (failed) return ;
+
+                }
+                break;
+            case 26 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:208: COMMA
+                {
+                mCOMMA(); if (failed) return ;
+
+                }
+                break;
+            case 27 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:214: DOT
+                {
+                mDOT(); if (failed) return ;
+
+                }
+                break;
+            case 28 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:218: DOUBLE_AMPER
+                {
+                mDOUBLE_AMPER(); if (failed) return ;
+
+                }
+                break;
+            case 29 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:231: DOUBLE_PIPE
+                {
+                mDOUBLE_PIPE(); if (failed) return ;
+
+                }
+                break;
+            case 30 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:243: SH_STYLE_SINGLE_LINE_COMMENT
+                {
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 31 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.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/DRL.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/DRL.g:1:319: MISC
+                {
+                mMISC(); if (failed) return ;
+
+                }
+                break;
+
+        }
+
+    }
+
+    // $ANTLR start synpred1
+    public final void synpred1_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:14: ( '\\r\\n' )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:16: '\\r\\n'
+        {
+        match("\r\n"); if (failed) return ;
+
+
+        }
+    }
+    // $ANTLR end synpred1
+
+    public final boolean synpred1() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred1_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+
+
+    protected DFA18 dfa18 = new DFA18(this);
+    static final String DFA18_eotS =
+        "\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 =
+        "\101\uffff";
+    static final String DFA18_minS =
+        "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\150\1\141\1\165\1\156\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\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\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 =
+        "\101\uffff}>";
+    static final String[] DFA18_transitionS = {
+            "\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\40\1\uffff\12\3",
+            "",
+            "\uffff\4",
+            "\1\42\11\uffff\1\43",
+            "\1\44",
+            "\1\45",
+            "\1\46",
+            "",
+            "\1\47",
+            "",
+            "\1\51",
+            "\1\52",
+            "\1\53",
+            "\1\55",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\57",
+            "\1\60",
+            "",
+            "\1\62\4\uffff\1\61",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\63",
+            "\1\64",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\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",
+            "\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",
+            ""
+    };
+
+    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 {
+        int numStates = DFA18_transitionS.length;
+        DFA18_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA18_transition[i] = DFA.unpackEncodedString(DFA18_transitionS[i]);
+        }
+    }
+
+    class DFA18 extends DFA {
+
+        public DFA18(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;
+        }
+        public String getDescription() {
+            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 );";
+        }
+    }
+ 
+
+}
\ No newline at end of file

Deleted: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-05-19 17:39:55 UTC (rev 20042)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-05-19 17:40:22 UTC (rev 20043)
@@ -1,9773 +0,0 @@
-// $ANTLR 3.0.1 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-03-10 18:35:53
-
-	package org.drools.lang;
-	import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.antlr.runtime.BaseRecognizer;
-import org.antlr.runtime.BitSet;
-import org.antlr.runtime.CommonToken;
-import org.antlr.runtime.DFA;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.FailedPredicateException;
-import org.antlr.runtime.IntStream;
-import org.antlr.runtime.MismatchedNotSetException;
-import org.antlr.runtime.MismatchedSetException;
-import org.antlr.runtime.MismatchedTokenException;
-import org.antlr.runtime.MismatchedTreeNodeException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.Parser;
-import org.antlr.runtime.ParserRuleReturnScope;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
-import org.antlr.runtime.TokenStream;
-import org.drools.lang.descr.AccessorDescr;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.ConditionalElementDescr;
-import org.drools.lang.descr.DeclarativeInvokerDescr;
-import org.drools.lang.descr.DescrFactory;
-import org.drools.lang.descr.EntryPointDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.FactTemplateDescr;
-import org.drools.lang.descr.FieldAccessDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.FieldTemplateDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.FunctionCallDescr;
-import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.FunctionImportDescr;
-import org.drools.lang.descr.GlobalDescr;
-import org.drools.lang.descr.ImportDescr;
-import org.drools.lang.descr.LiteralRestrictionDescr;
-import org.drools.lang.descr.MethodAccessDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.PatternSourceDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
-import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RestrictionConnectiveDescr;
-import org.drools.lang.descr.RestrictionDescr;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.lang.descr.TypeDeclarationDescr;
-import org.drools.lang.descr.VariableRestrictionDescr;
-public class DRLParser extends Parser {
-    public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "PACKAGE", "IMPORT", "FUNCTION", "ID", "DOT", "GLOBAL", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "DECLARE", "LEFT_CURLY", "RIGHT_CURLY", "STRING", "QUERY", "END", "TEMPLATE", "RULE", "WHEN", "ATTRIBUTES", "DATE_EFFECTIVE", "DATE_EXPIRES", "ENABLED", "BOOL", "SALIENCE", "INT", "NO_LOOP", "AUTO_FOCUS", "ACTIVATION_GROUP", "RULEFLOW_GROUP", "AGENDA_GROUP", "DURATION", "DIALECT", "LOCK_ON_ACTIVE", "OR", "DOUBLE_PIPE", "AND", "DOUBLE_AMPER", "FROM", "EXISTS", "NOT", "EVAL", "FORALL", "ACCUMULATE", "INIT", "ACTION", "REVERSE", "RESULT", "COLLECT", "ENTRY_POINT", "CONTAINS", "EXCLUDES", "MATCHES", "SOUNDSLIKE", "MEMBEROF", "TILDE", "IN", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "EVENT", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "MISC", "';'", "'.*'", "':'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!!
 ='"
-    };
-    public static final int ACCUMULATE=46;
-    public static final int PACKAGE=4;
-    public static final int FUNCTION=6;
-    public static final int RIGHT_SQUARE=63;
-    public static final int ACTIVATION_GROUP=31;
-    public static final int RIGHT_CURLY=15;
-    public static final int ATTRIBUTES=22;
-    public static final int DIALECT=35;
-    public static final int CONTAINS=53;
-    public static final int NO_LOOP=29;
-    public static final int MEMBEROF=57;
-    public static final int LOCK_ON_ACTIVE=36;
-    public static final int AGENDA_GROUP=33;
-    public static final int FLOAT=60;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=72;
-    public static final int NOT=43;
-    public static final int ID=7;
-    public static final int AND=39;
-    public static final int EOF=-1;
-    public static final int HexDigit=69;
-    public static final int DATE_EFFECTIVE=23;
-    public static final int ACTION=48;
-    public static final int DOUBLE_PIPE=38;
-    public static final int RIGHT_PAREN=12;
-    public static final int IMPORT=5;
-    public static final int EOL=66;
-    public static final int DOUBLE_AMPER=40;
-    public static final int THEN=64;
-    public static final int IN=59;
-    public static final int MATCHES=55;
-    public static final int COMMA=11;
-    public static final int TILDE=58;
-    public static final int ENABLED=25;
-    public static final int EXISTS=42;
-    public static final int DOT=8;
-    public static final int RULE=20;
-    public static final int EXCLUDES=54;
-    public static final int AUTO_FOCUS=30;
-    public static final int NULL=61;
-    public static final int SOUNDSLIKE=56;
-    public static final int BOOL=26;
-    public static final int FORALL=45;
-    public static final int SALIENCE=27;
-    public static final int RULEFLOW_GROUP=32;
-    public static final int RESULT=50;
-    public static final int INT=28;
-    public static final int EVENT=65;
-    public static final int MULTI_LINE_COMMENT=74;
-    public static final int DURATION=34;
-    public static final int WS=67;
-    public static final int EVAL=44;
-    public static final int TEMPLATE=19;
-    public static final int WHEN=21;
-    public static final int UnicodeEscape=70;
-    public static final int ENTRY_POINT=52;
-    public static final int LEFT_CURLY=14;
-    public static final int OR=37;
-    public static final int LEFT_PAREN=10;
-    public static final int QUERY=17;
-    public static final int DECLARE=13;
-    public static final int MISC=75;
-    public static final int REVERSE=49;
-    public static final int END=18;
-    public static final int GLOBAL=9;
-    public static final int FROM=41;
-    public static final int COLLECT=51;
-    public static final int LEFT_SQUARE=62;
-    public static final int INIT=47;
-    public static final int OctalEscape=71;
-    public static final int EscapeSequence=68;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=73;
-    public static final int STRING=16;
-    public static final int DATE_EXPIRES=24;
-
-        public DRLParser(TokenStream input) {
-            super(input);
-            ruleMemo = new HashMap[86+1];
-         }
-        
-
-    public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
-
-
-    	private PackageDescr packageDescr;
-    	private List errors = new ArrayList();
-    	private String source = "unknown";
-    	private int lineOffset = 0;
-    	private DescrFactory factory = new DescrFactory();
-    	private boolean parserDebug = false;
-    	private Location location = new Location( Location.LOCATION_UNKNOWN );
-    	
-    	// THE FOLLOWING LINES ARE DUMMY ATTRIBUTES TO WORK AROUND AN ANTLR BUG
-    	private BaseDescr from = null;
-    	private FieldConstraintDescr fc = null;
-    	private RestrictionConnectiveDescr and = null;
-    	private RestrictionConnectiveDescr or = null;
-    	private ConditionalElementDescr base = null;
-    	
-    	public void setParserDebug(boolean parserDebug) {
-    		this.parserDebug = parserDebug;
-    	}
-    	
-    	public void debug(String message) {
-    		if ( parserDebug ) 
-    			System.err.println( "drl parser: " + message );
-    	}
-    	
-    	public void setSource(String source) {
-    		this.source = source;
-    	}
-    	public DescrFactory getFactory() {
-    		return factory;
-    	}	
-
-    	public String getSource() {
-    		return this.source;
-    	}
-    	
-    	public PackageDescr getPackageDescr() {
-    		return packageDescr;
-    	}
-    	
-    	private int offset(int line) {
-    		return line + lineOffset;
-    	}
-    	
-    	/**
-    	 * This will set the offset to record when reparsing. Normally is zero of course 
-    	 */
-    	public void setLineOffset(int i) {
-    	 	this.lineOffset = i;
-    	}
-    	
-    	private String getString(String token) {
-    		return safeSubstring( token, 1, token.length() -1 );
-    	}
-    	
-    	private String cleanupSpaces( String input ) {
-                    return input.replaceAll( "\\s", "" );
-            }
-    	
-    	
-    	public void reportError(RecognitionException ex) {
-    	        // if we've already reported an error and have not matched a token
-                    // yet successfully, don't report any errors.
-                    if ( errorRecovery ) {
-                            return;
-                    }
-                    errorRecovery = true;
-
-    		ex.line = offset(ex.line); //add the offset if there is one
-    		errors.add( ex ); 
-    	}
-         	
-         	/** return the raw RecognitionException errors */
-         	public List getErrors() {
-         		return errors;
-         	}
-         	
-         	/** Return a list of pretty strings summarising the errors */
-         	public List getErrorMessages() {
-         		List messages = new ArrayList();
-     		for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
-         	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
-         	     	}
-         	     	return messages;
-         	}
-         	
-         	/** return true if any parser errors were accumulated */
-         	public boolean hasErrors() {
-      		return ! errors.isEmpty();
-         	}
-         	
-         	/** This will take a RecognitionException, and create a sensible error message out of it */
-         	public String createErrorMessage(RecognitionException e)
-            {
-    		StringBuffer message = new StringBuffer();		
-                    message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
-                    if ( e instanceof MismatchedTokenException ) {
-                            MismatchedTokenException mte = (MismatchedTokenException)e;
-                            if( mte.expecting >=0 && mte.expecting < tokenNames.length ) {
-    	                        message.append("mismatched token: "+
-                                                               e.token+
-                                                               "; expecting type "+
-                                                               tokenNames[mte.expecting]);
-                            } else {
-    	                        message.append("mismatched token: "+
-                                                               e.token+
-                                                               ";");
-                            }
-                    }
-                    else if ( e instanceof MismatchedTreeNodeException ) {
-                            MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
-                            if( mtne.expecting >=0 && mtne.expecting < tokenNames.length ) {
-    	                        message.append("mismatched tree node: "+
-                                                               mtne.toString() +
-                                                               "; expecting type "+
-                                                               tokenNames[mtne.expecting]);
-                            } else {
-    	                        message.append("mismatched tree node: "+
-                                                               mtne.toString() +
-                                                               ";");
-                            }
-                    }
-                    else if ( e instanceof NoViableAltException ) {
-                            NoViableAltException nvae = (NoViableAltException)e;
-    			message.append( "Unexpected token '" + e.token.getText() + "'" );
-                            /*
-                            message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
-                                                               " state "+nvae.stateNumber+
-                                                               " (decision="+nvae.decisionNumber+
-                                                               ") no viable alt; token="+
-                                                               e.token);
-                                                               */
-                    }
-                    else if ( e instanceof EarlyExitException ) {
-                            EarlyExitException eee = (EarlyExitException)e;
-                            message.append("required (...)+ loop (decision="+
-                                                               eee.decisionNumber+
-                                                               ") did not match anything; token="+
-                                                               e.token);
-                    }
-                    else if ( e instanceof MismatchedSetException ) {
-                            MismatchedSetException mse = (MismatchedSetException)e;
-                            message.append("mismatched token '"+
-                                                               e.token+
-                                                               "' expecting set "+mse.expecting);
-                    }
-                    else if ( e instanceof MismatchedNotSetException ) {
-                            MismatchedNotSetException mse = (MismatchedNotSetException)e;
-                            message.append("mismatched token '"+
-                                                               e.token+
-                                                               "' expecting set "+mse.expecting);
-                    }
-                    else if ( e instanceof FailedPredicateException ) {
-                            FailedPredicateException fpe = (FailedPredicateException)e;
-                            message.append("rule "+fpe.ruleName+" failed predicate: {"+
-                                                               fpe.predicateText+"}?");
-                    } else if (e instanceof GeneralParseException) {
-    			message.append(" " + e.getMessage());
-    		}
-                   	return message.toString();
-            }   
-            
-            void checkTrailingSemicolon(String text, int line) {
-            	if (text.trim().endsWith( ";" ) ) {
-            		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
-            	}
-            }
-            
-            public Location getLocation() {
-                    return this.location;
-            }
-            
-            private String safeSubstring( String text, int start, int end ) {
-                	return text.substring( Math.min( start, text.length() ), Math.min( Math.max( start, end ), text.length() ) );
-            }
-          
-
-
-
-    // $ANTLR start opt_semicolon
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:1: opt_semicolon : ( ';' )? ;
-    public final void opt_semicolon() throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:2: ( ( ';' )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:4: ( ';' )?
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:4: ( ';' )?
-            int alt1=2;
-            int LA1_0 = input.LA(1);
-
-            if ( (LA1_0==76) ) {
-                alt1=1;
-            }
-            switch (alt1) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:4: ';'
-                    {
-                    match(input,76,FOLLOW_76_in_opt_semicolon39); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end opt_semicolon
-
-
-    // $ANTLR start compilation_unit
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:1: compilation_unit : prolog ( statement )* EOF ;
-    public final void compilation_unit() throws RecognitionException {
-
-        		// reset Location information
-        		this.location = new Location( Location.LOCATION_UNKNOWN );
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:204:2: ( prolog ( statement )* EOF )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:204:4: prolog ( statement )* EOF
-            {
-            pushFollow(FOLLOW_prolog_in_compilation_unit57);
-            prolog();
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:205:3: ( statement )*
-            loop2:
-            do {
-                int alt2=2;
-                int LA2_0 = input.LA(1);
-
-                if ( ((LA2_0>=IMPORT && LA2_0<=FUNCTION)||LA2_0==GLOBAL||LA2_0==DECLARE||LA2_0==QUERY||(LA2_0>=TEMPLATE && LA2_0<=RULE)||(LA2_0>=DATE_EFFECTIVE && LA2_0<=ENABLED)||LA2_0==SALIENCE||(LA2_0>=NO_LOOP && LA2_0<=LOCK_ON_ACTIVE)) ) {
-                    alt2=1;
-                }
-
-
-                switch (alt2) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:205:3: statement
-            	    {
-            	    pushFollow(FOLLOW_statement_in_compilation_unit62);
-            	    statement();
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop2;
-                }
-            } while (true);
-
-            match(input,EOF,FOLLOW_EOF_in_compilation_unit67); if (failed) return ;
-
-            }
-
-        }
-        catch ( RecognitionException e ) {
-
-            		reportError( e );
-            	
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end compilation_unit
-
-
-    // $ANTLR start prolog
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:212:1: prolog : (pkgstmt= package_statement )? ;
-    public final void prolog() throws RecognitionException {
-        String pkgstmt = null;
-
-
-
-        		String packageName = "";
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:216:2: ( (pkgstmt= package_statement )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:216:4: (pkgstmt= package_statement )?
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:216:4: (pkgstmt= package_statement )?
-            int alt3=2;
-            int LA3_0 = input.LA(1);
-
-            if ( (LA3_0==PACKAGE) ) {
-                alt3=1;
-            }
-            switch (alt3) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:216:6: pkgstmt= package_statement
-                    {
-                    pushFollow(FOLLOW_package_statement_in_prolog96);
-                    pkgstmt=package_statement();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-                       packageName = pkgstmt; 
-                    }
-
-                    }
-                    break;
-
-            }
-
-            if ( backtracking==0 ) {
-               
-              			this.packageDescr = factory.createPackage( packageName ); 
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end prolog
-
-
-    // $ANTLR start statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:223:1: statement : (a= rule_attribute | function_import_statement | import_statement | global | function | t= template | r= rule | q= query | d= type_declaration );
-    public final void statement() throws RecognitionException {
-        AttributeDescr a = null;
-
-        FactTemplateDescr t = null;
-
-        RuleDescr r = null;
-
-        QueryDescr q = null;
-
-        TypeDeclarationDescr d = null;
-
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:224:2: (a= rule_attribute | function_import_statement | import_statement | global | function | t= template | r= rule | q= query | d= type_declaration )
-            int alt4=9;
-            switch ( input.LA(1) ) {
-            case DATE_EFFECTIVE:
-            case DATE_EXPIRES:
-            case ENABLED:
-            case SALIENCE:
-            case NO_LOOP:
-            case AUTO_FOCUS:
-            case ACTIVATION_GROUP:
-            case RULEFLOW_GROUP:
-            case AGENDA_GROUP:
-            case DURATION:
-            case DIALECT:
-            case LOCK_ON_ACTIVE:
-                {
-                alt4=1;
-                }
-                break;
-            case IMPORT:
-                {
-                int LA4_2 = input.LA(2);
-
-                if ( (LA4_2==FUNCTION) ) {
-                    alt4=2;
-                }
-                else if ( (LA4_2==ID) ) {
-                    alt4=3;
-                }
-                else {
-                    if (backtracking>0) {failed=true; return ;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("223:1: statement : (a= rule_attribute | function_import_statement | import_statement | global | function | t= template | r= rule | q= query | d= type_declaration );", 4, 2, input);
-
-                    throw nvae;
-                }
-                }
-                break;
-            case GLOBAL:
-                {
-                alt4=4;
-                }
-                break;
-            case FUNCTION:
-                {
-                alt4=5;
-                }
-                break;
-            case TEMPLATE:
-                {
-                alt4=6;
-                }
-                break;
-            case RULE:
-                {
-                alt4=7;
-                }
-                break;
-            case QUERY:
-                {
-                alt4=8;
-                }
-                break;
-            case DECLARE:
-                {
-                alt4=9;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("223:1: statement : (a= rule_attribute | function_import_statement | import_statement | global | function | t= template | r= rule | q= query | d= type_declaration );", 4, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt4) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:224:4: a= rule_attribute
-                    {
-                    pushFollow(FOLLOW_rule_attribute_in_statement121);
-                    a=rule_attribute();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-                       this.packageDescr.addAttribute( a ); 
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:225:4: function_import_statement
-                    {
-                    pushFollow(FOLLOW_function_import_statement_in_statement128);
-                    function_import_statement();
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:226:4: import_statement
-                    {
-                    pushFollow(FOLLOW_import_statement_in_statement134);
-                    import_statement();
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:227:4: global
-                    {
-                    pushFollow(FOLLOW_global_in_statement140);
-                    global();
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:228:4: function
-                    {
-                    pushFollow(FOLLOW_function_in_statement146);
-                    function();
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:229:10: t= template
-                    {
-                    pushFollow(FOLLOW_template_in_statement160);
-                    t=template();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-                       this.packageDescr.addFactTemplate( t ); 
-                    }
-
-                    }
-                    break;
-                case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:230:4: r= rule
-                    {
-                    pushFollow(FOLLOW_rule_in_statement169);
-                    r=rule();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-                       this.packageDescr.addRule( r ); 
-                    }
-
-                    }
-                    break;
-                case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:231:4: q= query
-                    {
-                    pushFollow(FOLLOW_query_in_statement181);
-                    q=query();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-                       this.packageDescr.addRule( q ); 
-                    }
-
-                    }
-                    break;
-                case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:232:10: d= type_declaration
-                    {
-                    pushFollow(FOLLOW_type_declaration_in_statement196);
-                    d=type_declaration();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-                       this.packageDescr.addTypeDeclaration( d ); 
-                    }
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end statement
-
-
-    // $ANTLR start package_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:235:1: package_statement returns [String packageName] : PACKAGE n= dotted_name opt_semicolon ;
-    public final String package_statement() throws RecognitionException {
-        String packageName = null;
-
-        String n = null;
-
-
-
-        		packageName = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:239:2: ( PACKAGE n= dotted_name opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:240:3: PACKAGE n= dotted_name opt_semicolon
-            {
-            match(input,PACKAGE,FOLLOW_PACKAGE_in_package_statement222); if (failed) return packageName;
-            pushFollow(FOLLOW_dotted_name_in_package_statement226);
-            n=dotted_name();
-            _fsp--;
-            if (failed) return packageName;
-            pushFollow(FOLLOW_opt_semicolon_in_package_statement228);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return packageName;
-            if ( backtracking==0 ) {
-
-              			packageName = n;
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return packageName;
-    }
-    // $ANTLR end package_statement
-
-
-    // $ANTLR start import_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:248:1: import_statement : IMPORT import_name[importDecl] opt_semicolon ;
-    public final void import_statement() throws RecognitionException {
-        Token IMPORT1=null;
-
-
-                	ImportDescr importDecl = null;
-                
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:252:2: ( IMPORT import_name[importDecl] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:252:4: IMPORT import_name[importDecl] opt_semicolon
-            {
-            IMPORT1=(Token)input.LT(1);
-            match(input,IMPORT,FOLLOW_IMPORT_in_import_statement259); if (failed) return ;
-            if ( backtracking==0 ) {
-
-              	            importDecl = factory.createImport( );
-              	            importDecl.setStartCharacter( ((CommonToken)IMPORT1).getStartIndex() );
-              		    if (packageDescr != null) {
-              			packageDescr.addImport( importDecl );
-              		    }
-              	        
-            }
-            pushFollow(FOLLOW_import_name_in_import_statement282);
-            import_name(importDecl);
-            _fsp--;
-            if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_import_statement285);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end import_statement
-
-
-    // $ANTLR start function_import_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263:1: function_import_statement : IMPORT FUNCTION import_name[importDecl] opt_semicolon ;
-    public final void function_import_statement() throws RecognitionException {
-        Token IMPORT2=null;
-
-
-                	FunctionImportDescr importDecl = null;
-                
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:267:2: ( IMPORT FUNCTION import_name[importDecl] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:267:4: IMPORT FUNCTION import_name[importDecl] opt_semicolon
-            {
-            IMPORT2=(Token)input.LT(1);
-            match(input,IMPORT,FOLLOW_IMPORT_in_function_import_statement309); if (failed) return ;
-            match(input,FUNCTION,FOLLOW_FUNCTION_in_function_import_statement311); if (failed) return ;
-            if ( backtracking==0 ) {
-
-              	            importDecl = factory.createFunctionImport();
-              	            importDecl.setStartCharacter( ((CommonToken)IMPORT2).getStartIndex() );
-              		    if (packageDescr != null) {
-              			packageDescr.addFunctionImport( importDecl );
-              		    }
-              	        
-            }
-            pushFollow(FOLLOW_import_name_in_function_import_statement334);
-            import_name(importDecl);
-            _fsp--;
-            if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_function_import_statement337);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end function_import_statement
-
-
-    // $ANTLR start import_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:278:1: import_name[ImportDescr importDecl] returns [String name] : ID ( DOT id= identifier )* (star= '.*' )? ;
-    public final String import_name(ImportDescr importDecl) throws RecognitionException {
-        String name = null;
-
-        Token star=null;
-        Token ID3=null;
-        Token DOT4=null;
-        identifier_return id = null;
-
-
-
-        		name = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:282:2: ( ID ( DOT id= identifier )* (star= '.*' )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:3: ID ( DOT id= identifier )* (star= '.*' )?
-            {
-            ID3=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_name362); if (failed) return name;
-            if ( backtracking==0 ) {
-               
-              		    name =ID3.getText(); 
-              		    importDecl.setTarget( name );
-              		    importDecl.setEndCharacter( ((CommonToken)ID3).getStopIndex() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:3: ( DOT id= identifier )*
-            loop5:
-            do {
-                int alt5=2;
-                int LA5_0 = input.LA(1);
-
-                if ( (LA5_0==DOT) ) {
-                    alt5=1;
-                }
-
-
-                switch (alt5) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:5: DOT id= identifier
-            	    {
-            	    DOT4=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_import_name374); if (failed) return name;
-            	    pushFollow(FOLLOW_identifier_in_import_name378);
-            	    id=identifier();
-            	    _fsp--;
-            	    if (failed) return name;
-            	    if ( backtracking==0 ) {
-            	       
-            	      		        name = name + DOT4.getText() + input.toString(id.start,id.stop); 
-            	      			importDecl.setTarget( name );
-            	      		        importDecl.setEndCharacter( ((CommonToken)((Token)id.start)).getStopIndex() );
-            	      		    
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop5;
-                }
-            } while (true);
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:3: (star= '.*' )?
-            int alt6=2;
-            int LA6_0 = input.LA(1);
-
-            if ( (LA6_0==77) ) {
-                alt6=1;
-            }
-            switch (alt6) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:5: star= '.*'
-                    {
-                    star=(Token)input.LT(1);
-                    match(input,77,FOLLOW_77_in_import_name402); if (failed) return name;
-                    if ( backtracking==0 ) {
-                       
-                      		        name = name + star.getText(); 
-                      			importDecl.setTarget( name );
-                      		        importDecl.setEndCharacter( ((CommonToken)star).getStopIndex() );
-                      		    
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return name;
-    }
-    // $ANTLR end import_name
-
-
-    // $ANTLR start global
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:1: global : GLOBAL type= dotted_name id= identifier opt_semicolon ;
-    public final void global() throws RecognitionException {
-        Token GLOBAL5=null;
-        String type = null;
-
-        identifier_return id = null;
-
-
-
-        	    GlobalDescr global = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:2: ( GLOBAL type= dotted_name id= identifier opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:3: GLOBAL type= dotted_name id= identifier opt_semicolon
-            {
-            GLOBAL5=(Token)input.LT(1);
-            match(input,GLOBAL,FOLLOW_GLOBAL_in_global436); if (failed) return ;
-            if ( backtracking==0 ) {
-
-              		    global = factory.createGlobal();
-              	            global.setStartCharacter( ((CommonToken)GLOBAL5).getStartIndex() );
-              		    packageDescr.addGlobal( global );
-              		
-            }
-            pushFollow(FOLLOW_dotted_name_in_global447);
-            type=dotted_name();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-              		    global.setType( type );
-              		
-            }
-            pushFollow(FOLLOW_identifier_in_global458);
-            id=identifier();
-            _fsp--;
-            if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_global460);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-              		    global.setIdentifier( input.toString(id.start,id.stop) );
-              		    global.setEndCharacter( ((CommonToken)((Token)id.start)).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end global
-
-
-    // $ANTLR start function
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:1: function : FUNCTION (retType= dotted_name )? id= identifier LEFT_PAREN ( (paramType= dotted_name )? paramName= argument ( COMMA (paramType= dotted_name )? paramName= argument )* )? RIGHT_PAREN body= curly_chunk ;
-    public final void function() throws RecognitionException {
-        Token FUNCTION6=null;
-        String retType = null;
-
-        identifier_return id = null;
-
-        String paramType = null;
-
-        String paramName = null;
-
-        curly_chunk_return body = null;
-
-
-
-        		FunctionDescr f = null;
-        		String type = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:2: ( FUNCTION (retType= dotted_name )? id= identifier LEFT_PAREN ( (paramType= dotted_name )? paramName= argument ( COMMA (paramType= dotted_name )? paramName= argument )* )? RIGHT_PAREN body= curly_chunk )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:3: FUNCTION (retType= dotted_name )? id= identifier LEFT_PAREN ( (paramType= dotted_name )? paramName= argument ( COMMA (paramType= dotted_name )? paramName= argument )* )? RIGHT_PAREN body= curly_chunk
-            {
-            FUNCTION6=(Token)input.LT(1);
-            match(input,FUNCTION,FOLLOW_FUNCTION_in_function485); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:19: (retType= dotted_name )?
-            int alt7=2;
-            int LA7_0 = input.LA(1);
-
-            if ( ((LA7_0>=PACKAGE && LA7_0<=ID)||LA7_0==GLOBAL||(LA7_0>=QUERY && LA7_0<=ATTRIBUTES)||LA7_0==ENABLED||LA7_0==SALIENCE||(LA7_0>=DURATION && LA7_0<=DIALECT)||LA7_0==FROM||(LA7_0>=INIT && LA7_0<=RESULT)||LA7_0==IN||(LA7_0>=THEN && LA7_0<=EVENT)) ) {
-                int LA7_1 = input.LA(2);
-
-                if ( ((LA7_1>=PACKAGE && LA7_1<=GLOBAL)||(LA7_1>=QUERY && LA7_1<=ATTRIBUTES)||LA7_1==ENABLED||LA7_1==SALIENCE||(LA7_1>=DURATION && LA7_1<=DIALECT)||LA7_1==FROM||(LA7_1>=INIT && LA7_1<=RESULT)||LA7_1==IN||LA7_1==LEFT_SQUARE||(LA7_1>=THEN && LA7_1<=EVENT)) ) {
-                    alt7=1;
-                }
-            }
-            switch (alt7) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:19: retType= dotted_name
-                    {
-                    pushFollow(FOLLOW_dotted_name_in_function489);
-                    retType=dotted_name();
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            pushFollow(FOLLOW_identifier_in_function494);
-            id=identifier();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-              			//System.err.println( "function :: " + n.getText() );
-              			type = retType != null ? retType : null;
-              			f = factory.createFunction( input.toString(id.start,id.stop), type );
-              			f.setLocation(offset(FUNCTION6.getLine()), FUNCTION6.getCharPositionInLine());
-              	        	f.setStartCharacter( ((CommonToken)FUNCTION6).getStartIndex() );
-              			packageDescr.addFunction( f );
-              		
-            }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_function503); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:4: ( (paramType= dotted_name )? paramName= argument ( COMMA (paramType= dotted_name )? paramName= argument )* )?
-            int alt11=2;
-            int LA11_0 = input.LA(1);
-
-            if ( ((LA11_0>=PACKAGE && LA11_0<=ID)||LA11_0==GLOBAL||(LA11_0>=QUERY && LA11_0<=ATTRIBUTES)||LA11_0==ENABLED||LA11_0==SALIENCE||(LA11_0>=DURATION && LA11_0<=DIALECT)||LA11_0==FROM||(LA11_0>=INIT && LA11_0<=RESULT)||LA11_0==IN||(LA11_0>=THEN && LA11_0<=EVENT)) ) {
-                alt11=1;
-            }
-            switch (alt11) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:6: (paramType= dotted_name )? paramName= argument ( COMMA (paramType= dotted_name )? paramName= argument )*
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:15: (paramType= dotted_name )?
-                    int alt8=2;
-                    alt8 = dfa8.predict(input);
-                    switch (alt8) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:15: paramType= dotted_name
-                            {
-                            pushFollow(FOLLOW_dotted_name_in_function512);
-                            paramType=dotted_name();
-                            _fsp--;
-                            if (failed) return ;
-
-                            }
-                            break;
-
-                    }
-
-                    pushFollow(FOLLOW_argument_in_function517);
-                    paramName=argument();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      					type = paramType != null ? paramType : null;
-                      					f.addParameter( type, paramName );
-                      				
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:5: ( COMMA (paramType= dotted_name )? paramName= argument )*
-                    loop10:
-                    do {
-                        int alt10=2;
-                        int LA10_0 = input.LA(1);
-
-                        if ( (LA10_0==COMMA) ) {
-                            alt10=1;
-                        }
-
-
-                        switch (alt10) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:7: COMMA (paramType= dotted_name )? paramName= argument
-                    	    {
-                    	    match(input,COMMA,FOLLOW_COMMA_in_function531); if (failed) return ;
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:22: (paramType= dotted_name )?
-                    	    int alt9=2;
-                    	    alt9 = dfa9.predict(input);
-                    	    switch (alt9) {
-                    	        case 1 :
-                    	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:22: paramType= dotted_name
-                    	            {
-                    	            pushFollow(FOLLOW_dotted_name_in_function535);
-                    	            paramType=dotted_name();
-                    	            _fsp--;
-                    	            if (failed) return ;
-
-                    	            }
-                    	            break;
-
-                    	    }
-
-                    	    pushFollow(FOLLOW_argument_in_function540);
-                    	    paramName=argument();
-                    	    _fsp--;
-                    	    if (failed) return ;
-                    	    if ( backtracking==0 ) {
-
-                    	      						type = paramType != null ? paramType : null;
-                    	      						f.addParameter( type, paramName );
-                    	      					
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop10;
-                        }
-                    } while (true);
-
-
-                    }
-                    break;
-
-            }
-
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_function564); if (failed) return ;
-            pushFollow(FOLLOW_curly_chunk_in_function570);
-            body=curly_chunk();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-              			//strip out '{','}'
-              			f.setText( safeSubstring( input.toString(body.start,body.stop), 1, input.toString(body.start,body.stop).length()-1 ) );
-              			f.setEndCharacter( ((CommonToken)((Token)body.stop)).getStopIndex() );
-              			f.setEndLocation(offset(((Token)body.stop).getLine()), ((Token)body.stop).getCharPositionInLine());
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end function
-
-
-    // $ANTLR start argument
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
-    public final String argument() throws RecognitionException {
-        String name = null;
-
-        identifier_return id = null;
-
-
-
-        		name = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:2: (id= identifier ( '[' ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:4: id= identifier ( '[' ']' )*
-            {
-            pushFollow(FOLLOW_identifier_in_argument597);
-            id=identifier();
-            _fsp--;
-            if (failed) return name;
-            if ( backtracking==0 ) {
-               name =input.toString(id.start,id.stop); 
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:38: ( '[' ']' )*
-            loop12:
-            do {
-                int alt12=2;
-                int LA12_0 = input.LA(1);
-
-                if ( (LA12_0==LEFT_SQUARE) ) {
-                    alt12=1;
-                }
-
-
-                switch (alt12) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:40: '[' ']'
-            	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument603); if (failed) return name;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument605); if (failed) return name;
-            	    if ( backtracking==0 ) {
-            	       name += "[]";
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop12;
-                }
-            } while (true);
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return name;
-    }
-    // $ANTLR end argument
-
-
-    // $ANTLR start type_declaration
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:1: type_declaration returns [TypeDeclarationDescr declaration] : DECLARE id= identifier LEFT_CURLY type_decl_attribute[$declaration] ( COMMA type_decl_attribute[$declaration] )* RIGHT_CURLY ;
-    public final TypeDeclarationDescr type_declaration() throws RecognitionException {
-        TypeDeclarationDescr declaration = null;
-
-        identifier_return id = null;
-
-
-
-                        declaration = factory.createTypeDeclaration();
-                
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:9: ( DECLARE id= identifier LEFT_CURLY type_decl_attribute[$declaration] ( COMMA type_decl_attribute[$declaration] )* RIGHT_CURLY )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:11: DECLARE id= identifier LEFT_CURLY type_decl_attribute[$declaration] ( COMMA type_decl_attribute[$declaration] )* RIGHT_CURLY
-            {
-            match(input,DECLARE,FOLLOW_DECLARE_in_type_declaration645); if (failed) return declaration;
-            pushFollow(FOLLOW_identifier_in_type_declaration649);
-            id=identifier();
-            _fsp--;
-            if (failed) return declaration;
-            if ( backtracking==0 ) {
-
-                                          declaration.setTypeName( input.toString(id.start,id.stop) );
-                                      
-            }
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_type_declaration694); if (failed) return declaration;
-            pushFollow(FOLLOW_type_decl_attribute_in_type_declaration720);
-            type_decl_attribute(declaration);
-            _fsp--;
-            if (failed) return declaration;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:59: ( COMMA type_decl_attribute[$declaration] )*
-            loop13:
-            do {
-                int alt13=2;
-                int LA13_0 = input.LA(1);
-
-                if ( (LA13_0==COMMA) ) {
-                    alt13=1;
-                }
-
-
-                switch (alt13) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:61: COMMA type_decl_attribute[$declaration]
-            	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_type_declaration725); if (failed) return declaration;
-            	    pushFollow(FOLLOW_type_decl_attribute_in_type_declaration727);
-            	    type_decl_attribute(declaration);
-            	    _fsp--;
-            	    if (failed) return declaration;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop13;
-                }
-            } while (true);
-
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_type_declaration749); if (failed) return declaration;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return declaration;
-    }
-    // $ANTLR end type_declaration
-
-
-    // $ANTLR start type_decl_attribute
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:1: type_decl_attribute[TypeDeclarationDescr declaration] : att= identifier (val= STRING | cl= dotted_name ) ;
-    public final void type_decl_attribute(TypeDeclarationDescr declaration) throws RecognitionException {
-        Token val=null;
-        identifier_return att = null;
-
-        String cl = null;
-
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:9: (att= identifier (val= STRING | cl= dotted_name ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:11: att= identifier (val= STRING | cl= dotted_name )
-            {
-            pushFollow(FOLLOW_identifier_in_type_decl_attribute785);
-            att=identifier();
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:389:17: (val= STRING | cl= dotted_name )
-            int alt14=2;
-            int LA14_0 = input.LA(1);
-
-            if ( (LA14_0==STRING) ) {
-                alt14=1;
-            }
-            else if ( ((LA14_0>=PACKAGE && LA14_0<=ID)||LA14_0==GLOBAL||(LA14_0>=QUERY && LA14_0<=ATTRIBUTES)||LA14_0==ENABLED||LA14_0==SALIENCE||(LA14_0>=DURATION && LA14_0<=DIALECT)||LA14_0==FROM||(LA14_0>=INIT && LA14_0<=RESULT)||LA14_0==IN||(LA14_0>=THEN && LA14_0<=EVENT)) ) {
-                alt14=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("389:17: (val= STRING | cl= dotted_name )", 14, 0, input);
-
-                throw nvae;
-            }
-            switch (alt14) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:389:19: val= STRING
-                    {
-                    val=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_type_decl_attribute808); if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                                          declaration.addAttribute( input.toString(att.start,att.stop), getString( val.getText() ) );
-                                      
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:393:19: cl= dotted_name
-                    {
-                    pushFollow(FOLLOW_dotted_name_in_type_decl_attribute849);
-                    cl=dotted_name();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                                          declaration.addAttribute( input.toString(att.start,att.stop), cl );
-                                      
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end type_decl_attribute
-
-
-    // $ANTLR start query
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:1: query returns [QueryDescr query] : QUERY queryName= name ( LEFT_PAREN ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )? RIGHT_PAREN )? normal_lhs_block[lhs] END opt_semicolon ;
-    public final QueryDescr query() throws RecognitionException {
-        QueryDescr query = null;
-
-        Token paramName=null;
-        Token QUERY7=null;
-        Token END8=null;
-        name_return queryName = null;
-
-        qualified_id_return paramType = null;
-
-
-
-        		query = null;
-        		AndDescr lhs = null;
-        		List params = null;
-        		List types = null;		
-         
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:408:2: ( QUERY queryName= name ( LEFT_PAREN ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )? RIGHT_PAREN )? normal_lhs_block[lhs] END opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:3: QUERY queryName= name ( LEFT_PAREN ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )? RIGHT_PAREN )? normal_lhs_block[lhs] END opt_semicolon
-            {
-            QUERY7=(Token)input.LT(1);
-            match(input,QUERY,FOLLOW_QUERY_in_query922); if (failed) return query;
-            pushFollow(FOLLOW_name_in_query926);
-            queryName=name();
-            _fsp--;
-            if (failed) return query;
-            if ( backtracking==0 ) {
-               
-              			query = factory.createQuery( queryName.name ); 
-              			query.setLocation( offset(QUERY7.getLine()), QUERY7.getCharPositionInLine() );
-              			query.setStartCharacter( ((CommonToken)QUERY7).getStartIndex() );
-              			lhs = new AndDescr(); query.setLhs( lhs ); 
-              			lhs.setLocation( offset(QUERY7.getLine()), QUERY7.getCharPositionInLine() );
-                                      location.setType( Location.LOCATION_RULE_HEADER );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418:3: ( LEFT_PAREN ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )? RIGHT_PAREN )?
-            int alt19=2;
-            alt19 = dfa19.predict(input);
-            switch (alt19) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418:5: LEFT_PAREN ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )? RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_query936); if (failed) return query;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:419:11: ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )?
-                    int alt18=2;
-                    int LA18_0 = input.LA(1);
-
-                    if ( (LA18_0==ID) ) {
-                        alt18=1;
-                    }
-                    switch (alt18) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:419:13: ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )*
-                            {
-                            if ( backtracking==0 ) {
-                               params = new ArrayList(); types = new ArrayList();
-                            }
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:15: ( (paramType= qualified_id )? paramName= ID )
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:16: (paramType= qualified_id )? paramName= ID
-                            {
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:25: (paramType= qualified_id )?
-                            int alt15=2;
-                            int LA15_0 = input.LA(1);
-
-                            if ( (LA15_0==ID) ) {
-                                int LA15_1 = input.LA(2);
-
-                                if ( ((LA15_1>=ID && LA15_1<=DOT)||LA15_1==LEFT_SQUARE) ) {
-                                    alt15=1;
-                                }
-                            }
-                            switch (alt15) {
-                                case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:25: paramType= qualified_id
-                                    {
-                                    pushFollow(FOLLOW_qualified_id_in_query971);
-                                    paramType=qualified_id();
-                                    _fsp--;
-                                    if (failed) return query;
-
-                                    }
-                                    break;
-
-                            }
-
-                            paramName=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_query976); if (failed) return query;
-                            if ( backtracking==0 ) {
-                               params.add( paramName.getText() ); String type = (paramType != null) ? paramType.text : "Object"; types.add( type ); 
-                            }
-
-                            }
-
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:15: ( COMMA (paramType= qualified_id )? paramName= ID )*
-                            loop17:
-                            do {
-                                int alt17=2;
-                                int LA17_0 = input.LA(1);
-
-                                if ( (LA17_0==COMMA) ) {
-                                    alt17=1;
-                                }
-
-
-                                switch (alt17) {
-                            	case 1 :
-                            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:16: COMMA (paramType= qualified_id )? paramName= ID
-                            	    {
-                            	    match(input,COMMA,FOLLOW_COMMA_in_query997); if (failed) return query;
-                            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:31: (paramType= qualified_id )?
-                            	    int alt16=2;
-                            	    int LA16_0 = input.LA(1);
-
-                            	    if ( (LA16_0==ID) ) {
-                            	        int LA16_1 = input.LA(2);
-
-                            	        if ( ((LA16_1>=ID && LA16_1<=DOT)||LA16_1==LEFT_SQUARE) ) {
-                            	            alt16=1;
-                            	        }
-                            	    }
-                            	    switch (alt16) {
-                            	        case 1 :
-                            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:31: paramType= qualified_id
-                            	            {
-                            	            pushFollow(FOLLOW_qualified_id_in_query1001);
-                            	            paramType=qualified_id();
-                            	            _fsp--;
-                            	            if (failed) return query;
-
-                            	            }
-                            	            break;
-
-                            	    }
-
-                            	    paramName=(Token)input.LT(1);
-                            	    match(input,ID,FOLLOW_ID_in_query1006); if (failed) return query;
-                            	    if ( backtracking==0 ) {
-                            	       params.add( paramName.getText() );  String type = (paramType != null) ? paramType.text : "Object"; types.add( type );  
-                            	    }
-
-                            	    }
-                            	    break;
-
-                            	default :
-                            	    break loop17;
-                                }
-                            } while (true);
-
-                            if ( backtracking==0 ) {
-                              	query.setParameters( (String[]) params.toArray( new String[params.size()] ) ); 
-                              		            	query.setParameterTypes( (String[]) types.toArray( new String[types.size()] ) ); 
-                              		            
-                            }
-
-                            }
-                            break;
-
-                    }
-
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_query1056); if (failed) return query;
-
-                    }
-                    break;
-
-            }
-
-            if ( backtracking==0 ) {
-
-                                      location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-              	        
-            }
-            pushFollow(FOLLOW_normal_lhs_block_in_query1085);
-            normal_lhs_block(lhs);
-            _fsp--;
-            if (failed) return query;
-            END8=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_query1090); if (failed) return query;
-            pushFollow(FOLLOW_opt_semicolon_in_query1092);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return query;
-            if ( backtracking==0 ) {
-
-              			query.setEndCharacter( ((CommonToken)END8).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return query;
-    }
-    // $ANTLR end query
-
-
-    // $ANTLR start template
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:1: template returns [FactTemplateDescr template] : TEMPLATE templateName= name opt_semicolon (slot= template_slot )+ END opt_semicolon ;
-    public final FactTemplateDescr template() throws RecognitionException {
-        FactTemplateDescr template = null;
-
-        Token TEMPLATE9=null;
-        Token END10=null;
-        name_return templateName = null;
-
-        FieldTemplateDescr slot = null;
-
-
-
-        		template = null;		
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:2: ( TEMPLATE templateName= name opt_semicolon (slot= template_slot )+ END opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:3: TEMPLATE templateName= name opt_semicolon (slot= template_slot )+ END opt_semicolon
-            {
-            TEMPLATE9=(Token)input.LT(1);
-            match(input,TEMPLATE,FOLLOW_TEMPLATE_in_template1120); if (failed) return template;
-            pushFollow(FOLLOW_name_in_template1124);
-            templateName=name();
-            _fsp--;
-            if (failed) return template;
-            pushFollow(FOLLOW_opt_semicolon_in_template1126);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return template;
-            if ( backtracking==0 ) {
-
-              			template = new FactTemplateDescr(templateName.name);
-              			template.setLocation( offset(TEMPLATE9.getLine()), TEMPLATE9.getCharPositionInLine() );			
-              			template.setStartCharacter( ((CommonToken)TEMPLATE9).getStartIndex() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:3: (slot= 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 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: slot= template_slot
-            	    {
-            	    pushFollow(FOLLOW_template_slot_in_template1141);
-            	    slot=template_slot();
-            	    _fsp--;
-            	    if (failed) return template;
-            	    if ( backtracking==0 ) {
-
-            	      				template.addFieldTemplate( slot );
-            	      			
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt20 >= 1 ) break loop20;
-            	    if (backtracking>0) {failed=true; return template;}
-                        EarlyExitException eee =
-                            new EarlyExitException(20, input);
-                        throw eee;
-                }
-                cnt20++;
-            } while (true);
-
-            END10=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_template1156); if (failed) return template;
-            pushFollow(FOLLOW_opt_semicolon_in_template1158);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return template;
-            if ( backtracking==0 ) {
-
-              			template.setEndCharacter( ((CommonToken)END10).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return template;
-    }
-    // $ANTLR end template
-
-
-    // $ANTLR start template_slot
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:1: template_slot returns [FieldTemplateDescr field] : fieldType= qualified_id id= identifier opt_semicolon ;
-    public final FieldTemplateDescr template_slot() throws RecognitionException {
-        FieldTemplateDescr field = null;
-
-        qualified_id_return fieldType = null;
-
-        identifier_return id = null;
-
-
-
-        		field = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:467:2: (fieldType= qualified_id id= identifier opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:11: fieldType= qualified_id id= identifier opt_semicolon
-            {
-            if ( backtracking==0 ) {
-
-              			field = factory.createFieldTemplate();
-              	         
-            }
-            pushFollow(FOLLOW_qualified_id_in_template_slot1204);
-            fieldType=qualified_id();
-            _fsp--;
-            if (failed) return field;
-            if ( backtracking==0 ) {
-
-              		        field.setClassType( fieldType.text );
-              			field.setStartCharacter( ((CommonToken)((Token)fieldType.start)).getStartIndex() );
-              			field.setEndCharacter( ((CommonToken)((Token)fieldType.stop)).getStopIndex() );
-              		 
-            }
-            pushFollow(FOLLOW_identifier_in_template_slot1220);
-            id=identifier();
-            _fsp--;
-            if (failed) return field;
-            pushFollow(FOLLOW_opt_semicolon_in_template_slot1222);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return field;
-            if ( backtracking==0 ) {
-
-              		        field.setName( input.toString(id.start,id.stop) );
-              			field.setLocation( offset(((Token)id.start).getLine()), ((Token)id.start).getCharPositionInLine() );
-              			field.setEndCharacter( ((CommonToken)((Token)id.start)).getStopIndex() );
-              		 
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return field;
-    }
-    // $ANTLR end template_slot
-
-
-    // $ANTLR start rule
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:1: rule returns [RuleDescr rule] : RULE ruleName= name ( rule_attributes[$rule] )? ( WHEN ( ':' )? normal_lhs_block[lhs] )? rhs_chunk[$rule] ;
-    public final RuleDescr rule() throws RecognitionException {
-        RuleDescr rule = null;
-
-        Token RULE11=null;
-        Token WHEN12=null;
-        name_return ruleName = null;
-
-
-
-        		rule = null;
-        		AndDescr lhs = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:2: ( RULE ruleName= name ( rule_attributes[$rule] )? ( WHEN ( ':' )? normal_lhs_block[lhs] )? rhs_chunk[$rule] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:3: RULE ruleName= name ( rule_attributes[$rule] )? ( WHEN ( ':' )? normal_lhs_block[lhs] )? rhs_chunk[$rule]
-            {
-            RULE11=(Token)input.LT(1);
-            match(input,RULE,FOLLOW_RULE_in_rule1253); if (failed) return rule;
-            pushFollow(FOLLOW_name_in_rule1257);
-            ruleName=name();
-            _fsp--;
-            if (failed) return rule;
-            if ( backtracking==0 ) {
-               
-              			location.setType( Location.LOCATION_RULE_HEADER );
-              			debug( "start rule: " + ruleName.name );
-              			rule = new RuleDescr( ruleName.name, null ); 
-              			rule.setLocation( offset(RULE11.getLine()), RULE11.getCharPositionInLine() );
-              			rule.setStartCharacter( ((CommonToken)RULE11).getStartIndex() );
-              			lhs = new AndDescr(); 
-              			rule.setLhs( lhs ); 
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:3: ( rule_attributes[$rule] )?
-            int alt21=2;
-            int LA21_0 = input.LA(1);
-
-            if ( ((LA21_0>=ATTRIBUTES && LA21_0<=ENABLED)||LA21_0==SALIENCE||(LA21_0>=NO_LOOP && LA21_0<=LOCK_ON_ACTIVE)) ) {
-                alt21=1;
-            }
-            switch (alt21) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:3: rule_attributes[$rule]
-                    {
-                    pushFollow(FOLLOW_rule_attributes_in_rule1266);
-                    rule_attributes(rule);
-                    _fsp--;
-                    if (failed) return rule;
-
-                    }
-                    break;
-
-            }
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:3: ( WHEN ( ':' )? normal_lhs_block[lhs] )?
-            int alt23=2;
-            int LA23_0 = input.LA(1);
-
-            if ( (LA23_0==WHEN) ) {
-                alt23=1;
-            }
-            switch (alt23) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:4: WHEN ( ':' )? normal_lhs_block[lhs]
-                    {
-                    WHEN12=(Token)input.LT(1);
-                    match(input,WHEN,FOLLOW_WHEN_in_rule1278); if (failed) return rule;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:9: ( ':' )?
-                    int alt22=2;
-                    int LA22_0 = input.LA(1);
-
-                    if ( (LA22_0==78) ) {
-                        alt22=1;
-                    }
-                    switch (alt22) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:9: ':'
-                            {
-                            match(input,78,FOLLOW_78_in_rule1280); if (failed) return rule;
-
-                            }
-                            break;
-
-                    }
-
-                    if ( backtracking==0 ) {
-                       
-                      				this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-                      				lhs.setLocation( offset(WHEN12.getLine()), WHEN12.getCharPositionInLine() );
-                      				lhs.setStartCharacter( ((CommonToken)WHEN12).getStartIndex() );
-                      			
-                    }
-                    pushFollow(FOLLOW_normal_lhs_block_in_rule1291);
-                    normal_lhs_block(lhs);
-                    _fsp--;
-                    if (failed) return rule;
-
-                    }
-                    break;
-
-            }
-
-            pushFollow(FOLLOW_rhs_chunk_in_rule1301);
-            rhs_chunk(rule);
-            _fsp--;
-            if (failed) return rule;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return rule;
-    }
-    // $ANTLR end rule
-
-
-    // $ANTLR start rule_attributes
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:1: rule_attributes[RuleDescr rule] : ( ATTRIBUTES ':' )? attr= rule_attribute ( ( ',' )? attr= rule_attribute )* ;
-    public final void rule_attributes(RuleDescr rule) throws RecognitionException {
-        AttributeDescr attr = null;
-
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:2: ( ( ATTRIBUTES ':' )? attr= rule_attribute ( ( ',' )? attr= rule_attribute )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:2: ( ATTRIBUTES ':' )? attr= rule_attribute ( ( ',' )? attr= rule_attribute )*
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:2: ( ATTRIBUTES ':' )?
-            int alt24=2;
-            int LA24_0 = input.LA(1);
-
-            if ( (LA24_0==ATTRIBUTES) ) {
-                alt24=1;
-            }
-            switch (alt24) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:4: ATTRIBUTES ':'
-                    {
-                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_rule_attributes1321); if (failed) return ;
-                    match(input,78,FOLLOW_78_in_rule_attributes1323); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1331);
-            attr=rule_attribute();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-               rule.addAttribute( attr ); 
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:2: ( ( ',' )? attr= rule_attribute )*
-            loop26:
-            do {
-                int alt26=2;
-                int LA26_0 = input.LA(1);
-
-                if ( (LA26_0==COMMA||(LA26_0>=DATE_EFFECTIVE && LA26_0<=ENABLED)||LA26_0==SALIENCE||(LA26_0>=NO_LOOP && LA26_0<=LOCK_ON_ACTIVE)) ) {
-                    alt26=1;
-                }
-
-
-                switch (alt26) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:4: ( ',' )? attr= rule_attribute
-            	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:4: ( ',' )?
-            	    int alt25=2;
-            	    int LA25_0 = input.LA(1);
-
-            	    if ( (LA25_0==COMMA) ) {
-            	        alt25=1;
-            	    }
-            	    switch (alt25) {
-            	        case 1 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:4: ','
-            	            {
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1338); if (failed) return ;
-
-            	            }
-            	            break;
-
-            	    }
-
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1343);
-            	    attr=rule_attribute();
-            	    _fsp--;
-            	    if (failed) return ;
-            	    if ( backtracking==0 ) {
-            	       rule.addAttribute( attr ); 
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop26;
-                }
-            } while (true);
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end rule_attributes
-
-
-    // $ANTLR start rule_attribute
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:526:1: rule_attribute returns [AttributeDescr attr] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );
-    public final AttributeDescr rule_attribute() throws RecognitionException {
-        AttributeDescr attr = null;
-
-        AttributeDescr a = null;
-
-
-
-        		attr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:533:2: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect )
-            int alt27=12;
-            switch ( input.LA(1) ) {
-            case SALIENCE:
-                {
-                alt27=1;
-                }
-                break;
-            case NO_LOOP:
-                {
-                alt27=2;
-                }
-                break;
-            case AGENDA_GROUP:
-                {
-                alt27=3;
-                }
-                break;
-            case DURATION:
-                {
-                alt27=4;
-                }
-                break;
-            case ACTIVATION_GROUP:
-                {
-                alt27=5;
-                }
-                break;
-            case AUTO_FOCUS:
-                {
-                alt27=6;
-                }
-                break;
-            case DATE_EFFECTIVE:
-                {
-                alt27=7;
-                }
-                break;
-            case DATE_EXPIRES:
-                {
-                alt27=8;
-                }
-                break;
-            case ENABLED:
-                {
-                alt27=9;
-                }
-                break;
-            case RULEFLOW_GROUP:
-                {
-                alt27=10;
-                }
-                break;
-            case LOCK_ON_ACTIVE:
-                {
-                alt27=11;
-                }
-                break;
-            case DIALECT:
-                {
-                alt27=12;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return attr;}
-                NoViableAltException nvae =
-                    new NoViableAltException("526:1: rule_attribute returns [AttributeDescr attr] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );", 27, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt27) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:533:4: a= salience
-                    {
-                    pushFollow(FOLLOW_salience_in_rule_attribute1380);
-                    a=salience();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:4: a= no_loop
-                    {
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute1388);
-                    a=no_loop();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:4: a= agenda_group
-                    {
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1397);
-                    a=agenda_group();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: a= duration
-                    {
-                    pushFollow(FOLLOW_duration_in_rule_attribute1406);
-                    a=duration();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:537:4: a= activation_group
-                    {
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1415);
-                    a=activation_group();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:4: a= auto_focus
-                    {
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1423);
-                    a=auto_focus();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:4: a= date_effective
-                    {
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1431);
-                    a=date_effective();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:4: a= date_expires
-                    {
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1439);
-                    a=date_expires();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:4: a= enabled
-                    {
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1447);
-                    a=enabled();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: a= ruleflow_group
-                    {
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1455);
-                    a=ruleflow_group();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: a= lock_on_active
-                    {
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1463);
-                    a=lock_on_active();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-                case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:4: a= dialect
-                    {
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1470);
-                    a=dialect();
-                    _fsp--;
-                    if (failed) return attr;
-
-                    }
-                    break;
-
-            }
-            if ( backtracking==0 ) {
-
-              		attr = a;
-              	
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return attr;
-    }
-    // $ANTLR end rule_attribute
-
-
-    // $ANTLR start date_effective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:1: date_effective returns [AttributeDescr descr] : DATE_EFFECTIVE STRING ;
-    public final AttributeDescr date_effective() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token STRING13=null;
-        Token DATE_EFFECTIVE14=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:551:2: ( DATE_EFFECTIVE STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:3: DATE_EFFECTIVE STRING
-            {
-            DATE_EFFECTIVE14=(Token)input.LT(1);
-            match(input,DATE_EFFECTIVE,FOLLOW_DATE_EFFECTIVE_in_date_effective1496); if (failed) return descr;
-            STRING13=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1498); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "date-effective", getString( STRING13.getText() ) );
-              			descr.setLocation( offset( DATE_EFFECTIVE14.getLine() ), DATE_EFFECTIVE14.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)DATE_EFFECTIVE14).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)STRING13).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end date_effective
-
-
-    // $ANTLR start date_expires
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:1: date_expires returns [AttributeDescr descr] : DATE_EXPIRES STRING ;
-    public final AttributeDescr date_expires() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token STRING15=null;
-        Token DATE_EXPIRES16=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:2: ( DATE_EXPIRES STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:4: DATE_EXPIRES STRING
-            {
-            DATE_EXPIRES16=(Token)input.LT(1);
-            match(input,DATE_EXPIRES,FOLLOW_DATE_EXPIRES_in_date_expires1527); if (failed) return descr;
-            STRING15=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1529); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "date-expires", getString( STRING15.getText() ) );
-              			descr.setLocation( offset(DATE_EXPIRES16.getLine()), DATE_EXPIRES16.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)DATE_EXPIRES16).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)STRING15).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end date_expires
-
-
-    // $ANTLR start enabled
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:575:1: enabled returns [AttributeDescr descr] : ENABLED BOOL ;
-    public final AttributeDescr enabled() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token BOOL17=null;
-        Token ENABLED18=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579:2: ( ENABLED BOOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579:5: ENABLED BOOL
-            {
-            ENABLED18=(Token)input.LT(1);
-            match(input,ENABLED,FOLLOW_ENABLED_in_enabled1558); if (failed) return descr;
-            BOOL17=(Token)input.LT(1);
-            match(input,BOOL,FOLLOW_BOOL_in_enabled1560); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              				descr = new AttributeDescr( "enabled", BOOL17.getText() );
-              				descr.setLocation( offset(ENABLED18.getLine()), ENABLED18.getCharPositionInLine() );
-              				descr.setStartCharacter( ((CommonToken)ENABLED18).getStartIndex() );
-              				descr.setEndCharacter( ((CommonToken)BOOL17).getStopIndex() );
-              			
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end enabled
-
-
-    // $ANTLR start salience
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:1: salience returns [AttributeDescr descr] : SALIENCE ( INT | txt= paren_chunk ) ;
-    public final AttributeDescr salience() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token SALIENCE19=null;
-        Token INT20=null;
-        paren_chunk_return txt = null;
-
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:2: ( SALIENCE ( INT | txt= paren_chunk ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:3: SALIENCE ( INT | txt= paren_chunk )
-            {
-            SALIENCE19=(Token)input.LT(1);
-            match(input,SALIENCE,FOLLOW_SALIENCE_in_salience1593); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "salience" );
-              			descr.setLocation( offset(SALIENCE19.getLine()), SALIENCE19.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)SALIENCE19).getStartIndex() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:3: ( INT | txt= paren_chunk )
-            int alt28=2;
-            int LA28_0 = input.LA(1);
-
-            if ( (LA28_0==INT) ) {
-                alt28=1;
-            }
-            else if ( (LA28_0==LEFT_PAREN) ) {
-                alt28=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return descr;}
-                NoViableAltException nvae =
-                    new NoViableAltException("599:3: ( INT | txt= paren_chunk )", 28, 0, input);
-
-                throw nvae;
-            }
-            switch (alt28) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:5: INT
-                    {
-                    INT20=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_salience1604); if (failed) return descr;
-                    if ( backtracking==0 ) {
-
-                      			descr.setValue( INT20.getText() );
-                      			descr.setEndCharacter( ((CommonToken)INT20).getStopIndex() );
-                      		
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:5: txt= paren_chunk
-                    {
-                    pushFollow(FOLLOW_paren_chunk_in_salience1619);
-                    txt=paren_chunk();
-                    _fsp--;
-                    if (failed) return descr;
-                    if ( backtracking==0 ) {
-
-                      			descr.setValue( input.toString(txt.start,txt.stop) );
-                      			descr.setEndCharacter( ((CommonToken)((Token)txt.stop)).getStopIndex() );
-                      		
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end salience
-
-
-    // $ANTLR start no_loop
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:1: no_loop returns [AttributeDescr descr] : NO_LOOP ( BOOL )? ;
-    public final AttributeDescr no_loop() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token NO_LOOP21=null;
-        Token BOOL22=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:2: ( NO_LOOP ( BOOL )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:4: NO_LOOP ( BOOL )?
-            {
-            NO_LOOP21=(Token)input.LT(1);
-            match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1649); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "no-loop", "true" );
-              			descr.setLocation( offset(NO_LOOP21.getLine()), NO_LOOP21.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)NO_LOOP21).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)NO_LOOP21).getStopIndex() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:623:3: ( BOOL )?
-            int alt29=2;
-            int LA29_0 = input.LA(1);
-
-            if ( (LA29_0==BOOL) ) {
-                alt29=1;
-            }
-            switch (alt29) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:623:5: BOOL
-                    {
-                    BOOL22=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1662); if (failed) return descr;
-                    if ( backtracking==0 ) {
-
-                      				descr.setValue( BOOL22.getText() );
-                      				descr.setEndCharacter( ((CommonToken)BOOL22).getStopIndex() );
-                      			
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end no_loop
-
-
-    // $ANTLR start auto_focus
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:631:1: auto_focus returns [AttributeDescr descr] : AUTO_FOCUS ( BOOL )? ;
-    public final AttributeDescr auto_focus() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token AUTO_FOCUS23=null;
-        Token BOOL24=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:2: ( AUTO_FOCUS ( BOOL )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:4: AUTO_FOCUS ( BOOL )?
-            {
-            AUTO_FOCUS23=(Token)input.LT(1);
-            match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1697); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "auto-focus", "true" );
-              			descr.setLocation( offset(AUTO_FOCUS23.getLine()), AUTO_FOCUS23.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)AUTO_FOCUS23).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)AUTO_FOCUS23).getStopIndex() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:3: ( BOOL )?
-            int alt30=2;
-            int LA30_0 = input.LA(1);
-
-            if ( (LA30_0==BOOL) ) {
-                alt30=1;
-            }
-            switch (alt30) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:5: BOOL
-                    {
-                    BOOL24=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1710); if (failed) return descr;
-                    if ( backtracking==0 ) {
-
-                      				descr.setValue( BOOL24.getText() );
-                      				descr.setEndCharacter( ((CommonToken)BOOL24).getStopIndex() );
-                      			
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end auto_focus
-
-
-    // $ANTLR start activation_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:1: activation_group returns [AttributeDescr descr] : ACTIVATION_GROUP STRING ;
-    public final AttributeDescr activation_group() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token STRING25=null;
-        Token ACTIVATION_GROUP26=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:2: ( ACTIVATION_GROUP STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:4: ACTIVATION_GROUP STRING
-            {
-            ACTIVATION_GROUP26=(Token)input.LT(1);
-            match(input,ACTIVATION_GROUP,FOLLOW_ACTIVATION_GROUP_in_activation_group1746); if (failed) return descr;
-            STRING25=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1748); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "activation-group", getString( STRING25.getText() ) );
-              			descr.setLocation( offset(ACTIVATION_GROUP26.getLine()), ACTIVATION_GROUP26.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)ACTIVATION_GROUP26).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)STRING25).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end activation_group
-
-
-    // $ANTLR start ruleflow_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:1: ruleflow_group returns [AttributeDescr descr] : RULEFLOW_GROUP STRING ;
-    public final AttributeDescr ruleflow_group() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token STRING27=null;
-        Token RULEFLOW_GROUP28=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:2: ( RULEFLOW_GROUP STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:4: RULEFLOW_GROUP STRING
-            {
-            RULEFLOW_GROUP28=(Token)input.LT(1);
-            match(input,RULEFLOW_GROUP,FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1776); if (failed) return descr;
-            STRING27=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1778); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "ruleflow-group", getString( STRING27.getText() ) );
-              			descr.setLocation( offset(RULEFLOW_GROUP28.getLine()), RULEFLOW_GROUP28.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)RULEFLOW_GROUP28).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)STRING27).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end ruleflow_group
-
-
-    // $ANTLR start agenda_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:1: agenda_group returns [AttributeDescr descr] : AGENDA_GROUP STRING ;
-    public final AttributeDescr agenda_group() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token STRING29=null;
-        Token AGENDA_GROUP30=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:2: ( AGENDA_GROUP STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:4: AGENDA_GROUP STRING
-            {
-            AGENDA_GROUP30=(Token)input.LT(1);
-            match(input,AGENDA_GROUP,FOLLOW_AGENDA_GROUP_in_agenda_group1806); if (failed) return descr;
-            STRING29=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1808); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "agenda-group", getString( STRING29.getText() ) );
-              			descr.setLocation( offset(AGENDA_GROUP30.getLine()), AGENDA_GROUP30.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)AGENDA_GROUP30).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)STRING29).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end agenda_group
-
-
-    // $ANTLR start duration
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:1: duration returns [AttributeDescr descr] : DURATION INT ;
-    public final AttributeDescr duration() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token INT31=null;
-        Token DURATION32=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:2: ( DURATION INT )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: DURATION INT
-            {
-            DURATION32=(Token)input.LT(1);
-            match(input,DURATION,FOLLOW_DURATION_in_duration1836); if (failed) return descr;
-            INT31=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1838); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "duration", INT31.getText() );
-              			descr.setLocation( offset(DURATION32.getLine()), DURATION32.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)DURATION32).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)INT31).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end duration
-
-
-    // $ANTLR start dialect
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:1: dialect returns [AttributeDescr descr] : DIALECT STRING ;
-    public final AttributeDescr dialect() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token STRING33=null;
-        Token DIALECT34=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:2: ( DIALECT STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:4: DIALECT STRING
-            {
-            DIALECT34=(Token)input.LT(1);
-            match(input,DIALECT,FOLLOW_DIALECT_in_dialect1866); if (failed) return descr;
-            STRING33=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect1868); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "dialect", getString( STRING33.getText() ) );
-              			descr.setLocation( offset(DIALECT34.getLine()), DIALECT34.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)DIALECT34).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)STRING33).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end dialect
-
-
-    // $ANTLR start lock_on_active
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:1: lock_on_active returns [AttributeDescr descr] : LOCK_ON_ACTIVE ( BOOL )? ;
-    public final AttributeDescr lock_on_active() throws RecognitionException {
-        AttributeDescr descr = null;
-
-        Token LOCK_ON_ACTIVE35=null;
-        Token BOOL36=null;
-
-
-        		descr = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:2: ( LOCK_ON_ACTIVE ( BOOL )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:4: LOCK_ON_ACTIVE ( BOOL )?
-            {
-            LOCK_ON_ACTIVE35=(Token)input.LT(1);
-            match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1900); if (failed) return descr;
-            if ( backtracking==0 ) {
-
-              			descr = new AttributeDescr( "lock-on-active", "true" );
-              			descr.setLocation( offset(LOCK_ON_ACTIVE35.getLine()), LOCK_ON_ACTIVE35.getCharPositionInLine() );
-              			descr.setStartCharacter( ((CommonToken)LOCK_ON_ACTIVE35).getStartIndex() );
-              			descr.setEndCharacter( ((CommonToken)LOCK_ON_ACTIVE35).getStopIndex() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:3: ( BOOL )?
-            int alt31=2;
-            int LA31_0 = input.LA(1);
-
-            if ( (LA31_0==BOOL) ) {
-                alt31=1;
-            }
-            switch (alt31) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:5: BOOL
-                    {
-                    BOOL36=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1913); if (failed) return descr;
-                    if ( backtracking==0 ) {
-
-                      				descr.setValue( BOOL36.getText() );
-                      				descr.setEndCharacter( ((CommonToken)BOOL36).getStopIndex() );
-                      			
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return descr;
-    }
-    // $ANTLR end lock_on_active
-
-
-    // $ANTLR start normal_lhs_block
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:1: normal_lhs_block[AndDescr descr] : (d= lhs[$descr] )* ;
-    public final void normal_lhs_block(AndDescr descr) throws RecognitionException {
-        BaseDescr d = null;
-
-
-
-        		location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:2: ( (d= lhs[$descr] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:3: (d= lhs[$descr] )*
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:3: (d= lhs[$descr] )*
-            loop32:
-            do {
-                int alt32=2;
-                int LA32_0 = input.LA(1);
-
-                if ( (LA32_0==ID||LA32_0==LEFT_PAREN||(LA32_0>=EXISTS && LA32_0<=FORALL)) ) {
-                    alt32=1;
-                }
-
-
-                switch (alt32) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:5: d= lhs[$descr]
-            	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1952);
-            	    d=lhs(descr);
-            	    _fsp--;
-            	    if (failed) return ;
-            	    if ( backtracking==0 ) {
-            	       if( d != null) descr.addDescr( d ); 
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop32;
-                }
-            } while (true);
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end normal_lhs_block
-
-
-    // $ANTLR start lhs
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:1: lhs[ConditionalElementDescr ce] returns [BaseDescr d] : l= lhs_or ;
-    public final BaseDescr lhs(ConditionalElementDescr ce) throws RecognitionException {
-        BaseDescr d = null;
-
-        BaseDescr l = null;
-
-
-
-        		d =null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:2: (l= lhs_or )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:4: l= lhs_or
-            {
-            pushFollow(FOLLOW_lhs_or_in_lhs1989);
-            l=lhs_or();
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-               d = l; 
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs
-
-
-    // $ANTLR start lhs_or
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:753:1: lhs_or returns [BaseDescr d] : ( LEFT_PAREN OR (lhsand= lhs_and )+ RIGHT_PAREN | left= lhs_and ( ( OR | DOUBLE_PIPE ) right= lhs_and )* );
-    public final BaseDescr lhs_or() throws RecognitionException {
-        BaseDescr d = null;
-
-        BaseDescr lhsand = null;
-
-        BaseDescr left = null;
-
-        BaseDescr right = null;
-
-
-
-        		d = null;
-        		OrDescr or = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:2: ( LEFT_PAREN OR (lhsand= lhs_and )+ RIGHT_PAREN | left= lhs_and ( ( OR | DOUBLE_PIPE ) right= lhs_and )* )
-            int alt35=2;
-            int LA35_0 = input.LA(1);
-
-            if ( (LA35_0==LEFT_PAREN) ) {
-                int LA35_1 = input.LA(2);
-
-                if ( (LA35_1==ID||LA35_1==LEFT_PAREN||LA35_1==AND||(LA35_1>=EXISTS && LA35_1<=FORALL)) ) {
-                    alt35=2;
-                }
-                else if ( (LA35_1==OR) ) {
-                    alt35=1;
-                }
-                else {
-                    if (backtracking>0) {failed=true; return d;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("753:1: lhs_or returns [BaseDescr d] : ( LEFT_PAREN OR (lhsand= lhs_and )+ RIGHT_PAREN | left= lhs_and ( ( OR | DOUBLE_PIPE ) right= lhs_and )* );", 35, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else if ( (LA35_0==ID||(LA35_0>=EXISTS && LA35_0<=FORALL)) ) {
-                alt35=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("753:1: lhs_or returns [BaseDescr d] : ( LEFT_PAREN OR (lhsand= lhs_and )+ RIGHT_PAREN | left= lhs_and ( ( OR | DOUBLE_PIPE ) right= lhs_and )* );", 35, 0, input);
-
-                throw nvae;
-            }
-            switch (alt35) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:4: LEFT_PAREN OR (lhsand= lhs_and )+ RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or2014); if (failed) return d;
-                    match(input,OR,FOLLOW_OR_in_lhs_or2016); if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      			or = new OrDescr();
-                      			d = or;
-                      			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
-                      		
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:3: (lhsand= lhs_and )+
-                    int cnt33=0;
-                    loop33:
-                    do {
-                        int alt33=2;
-                        int LA33_0 = input.LA(1);
-
-                        if ( (LA33_0==ID||LA33_0==LEFT_PAREN||(LA33_0>=EXISTS && LA33_0<=FORALL)) ) {
-                            alt33=1;
-                        }
-
-
-                        switch (alt33) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:5: lhsand= lhs_and
-                    	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or2029);
-                    	    lhsand=lhs_and();
-                    	    _fsp--;
-                    	    if (failed) return d;
-                    	    if ( backtracking==0 ) {
-
-                    	      			or.addDescr( lhsand );
-                    	      		
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    if ( cnt33 >= 1 ) break loop33;
-                    	    if (backtracking>0) {failed=true; return d;}
-                                EarlyExitException eee =
-                                    new EarlyExitException(33, input);
-                                throw eee;
-                        }
-                        cnt33++;
-                    } while (true);
-
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or2040); if (failed) return d;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:770:10: left= lhs_and ( ( OR | DOUBLE_PIPE ) right= lhs_and )*
-                    {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or2058);
-                    left=lhs_and();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = left; 
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771:3: ( ( OR | DOUBLE_PIPE ) right= lhs_and )*
-                    loop34:
-                    do {
-                        int alt34=2;
-                        int LA34_0 = input.LA(1);
-
-                        if ( ((LA34_0>=OR && LA34_0<=DOUBLE_PIPE)) ) {
-                            alt34=1;
-                        }
-
-
-                        switch (alt34) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771:5: ( OR | DOUBLE_PIPE ) right= lhs_and
-                    	    {
-                    	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
-                    	        input.consume();
-                    	        errorRecovery=false;failed=false;
-                    	    }
-                    	    else {
-                    	        if (backtracking>0) {failed=true; return d;}
-                    	        MismatchedSetException mse =
-                    	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or2066);    throw mse;
-                    	    }
-
-                    	    if ( backtracking==0 ) {
-
-                    	      				location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
-                    	      			
-                    	    }
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or2082);
-                    	    right=lhs_and();
-                    	    _fsp--;
-                    	    if (failed) return d;
-                    	    if ( backtracking==0 ) {
-
-                    	      				if ( or == null ) {
-                    	      					or = new OrDescr();
-                    	      					or.addDescr( left );
-                    	      					d = or;
-                    	      				}
-                    	      				
-                    	      				or.addDescr( right );
-                    	      			
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop34;
-                        }
-                    } while (true);
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_or
-
-
-    // $ANTLR start lhs_and
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:788:1: lhs_and returns [BaseDescr d] : ( LEFT_PAREN AND (lhsunary= lhs_unary )+ RIGHT_PAREN | left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* );
-    public final BaseDescr lhs_and() throws RecognitionException {
-        BaseDescr d = null;
-
-        BaseDescr lhsunary = null;
-
-        BaseDescr left = null;
-
-        BaseDescr right = null;
-
-
-
-        		d = null;
-        		AndDescr and = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:2: ( LEFT_PAREN AND (lhsunary= lhs_unary )+ RIGHT_PAREN | left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* )
-            int alt38=2;
-            int LA38_0 = input.LA(1);
-
-            if ( (LA38_0==LEFT_PAREN) ) {
-                int LA38_1 = input.LA(2);
-
-                if ( (LA38_1==AND) ) {
-                    alt38=1;
-                }
-                else if ( (LA38_1==ID||LA38_1==LEFT_PAREN||(LA38_1>=EXISTS && LA38_1<=FORALL)) ) {
-                    alt38=2;
-                }
-                else {
-                    if (backtracking>0) {failed=true; return d;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("788:1: lhs_and returns [BaseDescr d] : ( LEFT_PAREN AND (lhsunary= lhs_unary )+ RIGHT_PAREN | left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* );", 38, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else if ( (LA38_0==ID||(LA38_0>=EXISTS && LA38_0<=FORALL)) ) {
-                alt38=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("788:1: lhs_and returns [BaseDescr d] : ( LEFT_PAREN AND (lhsunary= lhs_unary )+ RIGHT_PAREN | left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* );", 38, 0, input);
-
-                throw nvae;
-            }
-            switch (alt38) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:4: LEFT_PAREN AND (lhsunary= lhs_unary )+ RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and2113); if (failed) return d;
-                    match(input,AND,FOLLOW_AND_in_lhs_and2115); if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      			and = new AndDescr();
-                      			d = and;
-                      			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
-                      		
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:3: (lhsunary= lhs_unary )+
-                    int cnt36=0;
-                    loop36:
-                    do {
-                        int alt36=2;
-                        int LA36_0 = input.LA(1);
-
-                        if ( (LA36_0==ID||LA36_0==LEFT_PAREN||(LA36_0>=EXISTS && LA36_0<=FORALL)) ) {
-                            alt36=1;
-                        }
-
-
-                        switch (alt36) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:4: lhsunary= lhs_unary
-                    	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2127);
-                    	    lhsunary=lhs_unary();
-                    	    _fsp--;
-                    	    if (failed) return d;
-                    	    if ( backtracking==0 ) {
-
-                    	      			and.addDescr( lhsunary );
-                    	      		
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    if ( cnt36 >= 1 ) break loop36;
-                    	    if (backtracking>0) {failed=true; return d;}
-                                EarlyExitException eee =
-                                    new EarlyExitException(36, input);
-                                throw eee;
-                        }
-                        cnt36++;
-                    } while (true);
-
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and2137); if (failed) return d;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:10: left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
-                    {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and2155);
-                    left=lhs_unary();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = left; 
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:3: ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
-                    loop37:
-                    do {
-                        int alt37=2;
-                        int LA37_0 = input.LA(1);
-
-                        if ( ((LA37_0>=AND && LA37_0<=DOUBLE_AMPER)) ) {
-                            alt37=1;
-                        }
-
-
-                        switch (alt37) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:5: ( AND | DOUBLE_AMPER ) right= lhs_unary
-                    	    {
-                    	    if ( (input.LA(1)>=AND && input.LA(1)<=DOUBLE_AMPER) ) {
-                    	        input.consume();
-                    	        errorRecovery=false;failed=false;
-                    	    }
-                    	    else {
-                    	        if (backtracking>0) {failed=true; return d;}
-                    	        MismatchedSetException mse =
-                    	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and2163);    throw mse;
-                    	    }
-
-                    	    if ( backtracking==0 ) {
-
-                    	      				location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_AND_OR );
-                    	      			
-                    	    }
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2179);
-                    	    right=lhs_unary();
-                    	    _fsp--;
-                    	    if (failed) return d;
-                    	    if ( backtracking==0 ) {
-
-                    	      				if ( and == null ) {
-                    	      					and = new AndDescr();
-                    	      					and.addDescr( left );
-                    	      					d = and;
-                    	      				}
-                    	      				
-                    	      				and.addDescr( right );
-                    	      			
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop37;
-                        }
-                    } while (true);
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_and
-
-
-    // $ANTLR start lhs_unary
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:1: lhs_unary returns [BaseDescr d] : ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source ) opt_semicolon ;
-    public final BaseDescr lhs_unary() throws RecognitionException {
-        BaseDescr d = null;
-
-        BaseDescr u = null;
-
-        BaseDescr ps = null;
-
-
-
-        		d = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:2: ( ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source ) opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:4: ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source ) opt_semicolon
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:4: ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source )
-            int alt39=6;
-            int LA39_0 = input.LA(1);
-
-            if ( (LA39_0==EXISTS) && (synpred1())) {
-                alt39=1;
-            }
-            else if ( (LA39_0==NOT) && (synpred2())) {
-                alt39=2;
-            }
-            else if ( (LA39_0==EVAL) && (synpred3())) {
-                alt39=3;
-            }
-            else if ( (LA39_0==FORALL) && (synpred4())) {
-                alt39=4;
-            }
-            else if ( (LA39_0==LEFT_PAREN) && (synpred5())) {
-                alt39=5;
-            }
-            else if ( (LA39_0==ID) ) {
-                alt39=6;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("827:4: ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source )", 39, 0, input);
-
-                throw nvae;
-            }
-            switch (alt39) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:6: ( EXISTS )=>u= lhs_exist
-                    {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary2224);
-                    u=lhs_exist();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:5: ( NOT )=>u= lhs_not
-                    {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary2242);
-                    u=lhs_not();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:5: ( EVAL )=>u= lhs_eval
-                    {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary2261);
-                    u=lhs_eval();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
-
-                    }
-                    break;
-                case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:830:5: ( FORALL )=>u= lhs_forall
-                    {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2280);
-                    u=lhs_forall();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
-
-                    }
-                    break;
-                case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831:5: ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2297); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2301);
-                    u=lhs_or();
-                    _fsp--;
-                    if (failed) return d;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2303); if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
-
-                    }
-                    break;
-                case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:5: ps= pattern_source
-                    {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2314);
-                    ps=pattern_source();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = (BaseDescr) ps; 
-                    }
-
-                    }
-                    break;
-
-            }
-
-            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary2326);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return d;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_unary
-
-
-    // $ANTLR start pattern_source
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:1: pattern_source returns [BaseDescr d] : u= lhs_pattern ( ( ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement ) | FROM ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? ;
-    public final BaseDescr pattern_source() throws RecognitionException {
-        BaseDescr d = null;
-
-        BaseDescr u = null;
-
-        EntryPointDescr ep = null;
-
-        AccumulateDescr ac = null;
-
-        CollectDescr cs = null;
-
-        FromDescr fm = null;
-
-
-
-        		d = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:841:2: (u= lhs_pattern ( ( ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement ) | FROM ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:842:3: u= lhs_pattern ( ( ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement ) | FROM ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )?
-            {
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2353);
-            u=lhs_pattern();
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-               d = u; 
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:3: ( ( ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement ) | FROM ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )?
-            int alt41=3;
-            int LA41_0 = input.LA(1);
-
-            if ( (LA41_0==FROM) ) {
-                int LA41_1 = input.LA(2);
-
-                if ( (LA41_1==ENTRY_POINT) && (synpred6())) {
-                    alt41=1;
-                }
-                else if ( ((LA41_1>=PACKAGE && LA41_1<=ID)||LA41_1==GLOBAL||(LA41_1>=QUERY && LA41_1<=ATTRIBUTES)||LA41_1==ENABLED||LA41_1==SALIENCE||(LA41_1>=DURATION && LA41_1<=DIALECT)||LA41_1==FROM||(LA41_1>=ACCUMULATE && LA41_1<=COLLECT)||LA41_1==IN||(LA41_1>=THEN && LA41_1<=EVENT)) ) {
-                    alt41=2;
-                }
-            }
-            switch (alt41) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:11: ( ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:11: ( ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:13: ( FROM ENTRY_POINT )=> FROM ep= entrypoint_statement
-                    {
-                    match(input,FROM,FOLLOW_FROM_in_pattern_source2404); if (failed) return d;
-                    pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2408);
-                    ep=entrypoint_statement();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       if( d != null ) ((PatternDescr)d).setSource((PatternSourceDescr) ep); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:848:4: FROM ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )
-                    {
-                    match(input,FROM,FOLLOW_FROM_in_pattern_source2428); if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      				location.setType(Location.LOCATION_LHS_FROM);
-                      				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
-                      		        
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853:11: ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )
-                    int alt40=3;
-                    switch ( input.LA(1) ) {
-                    case ACCUMULATE:
-                        {
-                        alt40=1;
-                        }
-                        break;
-                    case COLLECT:
-                        {
-                        alt40=2;
-                        }
-                        break;
-                    case PACKAGE:
-                    case IMPORT:
-                    case FUNCTION:
-                    case ID:
-                    case GLOBAL:
-                    case QUERY:
-                    case END:
-                    case TEMPLATE:
-                    case RULE:
-                    case WHEN:
-                    case ATTRIBUTES:
-                    case ENABLED:
-                    case SALIENCE:
-                    case DURATION:
-                    case DIALECT:
-                    case FROM:
-                    case INIT:
-                    case ACTION:
-                    case REVERSE:
-                    case RESULT:
-                    case IN:
-                    case THEN:
-                    case EVENT:
-                        {
-                        alt40=3;
-                        }
-                        break;
-                    default:
-                        if (backtracking>0) {failed=true; return d;}
-                        NoViableAltException nvae =
-                            new NoViableAltException("853:11: ( options {k=1; backtrack=true; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )", 40, 0, input);
-
-                        throw nvae;
-                    }
-
-                    switch (alt40) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:854:13: (ac= accumulate_statement )
-                            {
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:854:13: (ac= accumulate_statement )
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:854:15: ac= accumulate_statement
-                            {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2486);
-                            ac=accumulate_statement();
-                            _fsp--;
-                            if (failed) return d;
-                            if ( backtracking==0 ) {
-                               if( d != null ) ((PatternDescr)d).setSource((PatternSourceDescr) ac); 
-                            }
-
-                            }
-
-
-                            }
-                            break;
-                        case 2 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:15: (cs= collect_statement )
-                            {
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:15: (cs= collect_statement )
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:17: cs= collect_statement
-                            {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source2509);
-                            cs=collect_statement();
-                            _fsp--;
-                            if (failed) return d;
-                            if ( backtracking==0 ) {
-                               if( d != null ) ((PatternDescr)d).setSource((PatternSourceDescr) cs); 
-                            }
-
-                            }
-
-
-                            }
-                            break;
-                        case 3 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:15: (fm= from_statement )
-                            {
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:15: (fm= from_statement )
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:17: fm= from_statement
-                            {
-                            pushFollow(FOLLOW_from_statement_in_pattern_source2546);
-                            fm=from_statement();
-                            _fsp--;
-                            if (failed) return d;
-                            if ( backtracking==0 ) {
-                               if( d != null ) ((PatternDescr)d).setSource((PatternSourceDescr) fm); 
-                            }
-
-                            }
-
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end pattern_source
-
-
-    // $ANTLR start lhs_exist
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:862:1: lhs_exist returns [BaseDescr d] : EXISTS ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) ;
-    public final BaseDescr lhs_exist() throws RecognitionException {
-        BaseDescr d = null;
-
-        Token EXISTS37=null;
-        Token RIGHT_PAREN38=null;
-        BaseDescr or = null;
-
-        BaseDescr pattern = null;
-
-
-
-        		d = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:2: ( EXISTS ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:4: EXISTS ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
-            {
-            EXISTS37=(Token)input.LT(1);
-            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist2589); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              			d = new ExistsDescr( ); 
-              			d.setLocation( offset(EXISTS37.getLine()), EXISTS37.getCharPositionInLine() );
-              			d.setStartCharacter( ((CommonToken)EXISTS37).getStartIndex() );
-              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:10: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
-            int alt42=2;
-            int LA42_0 = input.LA(1);
-
-            if ( (LA42_0==LEFT_PAREN) ) {
-                alt42=1;
-            }
-            else if ( (LA42_0==ID) ) {
-                alt42=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("873:10: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )", 42, 0, input);
-
-                throw nvae;
-            }
-            switch (alt42) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:12: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:12: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:14: LEFT_PAREN or= lhs_or RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2609); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2613);
-                    or=lhs_or();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       if ( or != null ) ((ExistsDescr)d).addDescr( or ); 
-                    }
-                    RIGHT_PAREN38=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2643); if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d.setEndCharacter( ((CommonToken)RIGHT_PAREN38).getStopIndex() ); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:12: pattern= lhs_pattern
-                    {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2693);
-                    pattern=lhs_pattern();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      	                	if ( pattern != null ) {
-                      	                		((ExistsDescr)d).addDescr( pattern );
-                      	                		d.setEndCharacter( pattern.getEndCharacter() );
-                      	                	}
-                      	                
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_exist
-
-
-    // $ANTLR start lhs_not
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888:1: lhs_not returns [NotDescr d] : NOT ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) ;
-    public final NotDescr lhs_not() throws RecognitionException {
-        NotDescr d = null;
-
-        Token NOT39=null;
-        Token RIGHT_PAREN40=null;
-        BaseDescr or = null;
-
-        BaseDescr pattern = null;
-
-
-
-        		d = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:2: ( NOT ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:4: NOT ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
-            {
-            NOT39=(Token)input.LT(1);
-            match(input,NOT,FOLLOW_NOT_in_lhs_not2745); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              			d = new NotDescr( ); 
-              			d.setLocation( offset(NOT39.getLine()), NOT39.getCharPositionInLine() );
-              			d.setStartCharacter( ((CommonToken)NOT39).getStartIndex() );
-              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:3: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
-            int alt43=2;
-            int LA43_0 = input.LA(1);
-
-            if ( (LA43_0==LEFT_PAREN) ) {
-                alt43=1;
-            }
-            else if ( (LA43_0==ID) ) {
-                alt43=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("899:3: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )", 43, 0, input);
-
-                throw nvae;
-            }
-            switch (alt43) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:5: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:5: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:7: LEFT_PAREN or= lhs_or RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2758); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2762);
-                    or=lhs_or();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       if ( or != null ) d.addDescr( or ); 
-                    }
-                    RIGHT_PAREN40=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2793); if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d.setEndCharacter( ((CommonToken)RIGHT_PAREN40).getStopIndex() ); 
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:905:3: pattern= lhs_pattern
-                    {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2830);
-                    pattern=lhs_pattern();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      	                	if ( pattern != null ) {
-                      	                		d.addDescr( pattern );
-                      	                		d.setEndCharacter( pattern.getEndCharacter() );
-                      	                	}
-                      	                
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_not
-
-
-    // $ANTLR start lhs_eval
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:1: lhs_eval returns [BaseDescr d] : EVAL c= paren_chunk ;
-    public final BaseDescr lhs_eval() throws RecognitionException {
-        BaseDescr d = null;
-
-        Token EVAL41=null;
-        paren_chunk_return c = null;
-
-
-
-        		d = new EvalDescr( );
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:2: ( EVAL c= paren_chunk )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:3: EVAL c= paren_chunk
-            {
-            EVAL41=(Token)input.LT(1);
-            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval2876); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              			location.setType( Location.LOCATION_LHS_INSIDE_EVAL );
-              		
-            }
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2887);
-            c=paren_chunk();
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-               
-              			d.setStartCharacter( ((CommonToken)EVAL41).getStartIndex() );
-              		        if( input.toString(c.start,c.stop) != null ) {
-              	  		    this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-              		            String body = safeSubstring( input.toString(c.start,c.stop), 1, input.toString(c.start,c.stop).length()-1 );
-              			    checkTrailingSemicolon( body, offset(EVAL41.getLine()) );
-              			    ((EvalDescr) d).setContent( body );
-              			    location.setProperty(Location.LOCATION_EVAL_CONTENT, body);
-              			}
-              			if( ((Token)c.stop) != null ) {
-              			    d.setEndCharacter( ((CommonToken)((Token)c.stop)).getStopIndex() );
-              			}
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_eval
-
-
-    // $ANTLR start lhs_forall
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:1: lhs_forall returns [ForallDescr d] : FORALL LEFT_PAREN base= lhs_pattern (pattern= lhs_pattern )* RIGHT_PAREN ;
-    public final ForallDescr lhs_forall() throws RecognitionException {
-        ForallDescr d = null;
-
-        Token FORALL42=null;
-        Token RIGHT_PAREN43=null;
-        BaseDescr base = null;
-
-        BaseDescr pattern = null;
-
-
-
-        		d = factory.createForall();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:2: ( FORALL LEFT_PAREN base= lhs_pattern (pattern= lhs_pattern )* RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:4: FORALL LEFT_PAREN base= lhs_pattern (pattern= lhs_pattern )* RIGHT_PAREN
-            {
-            FORALL42=(Token)input.LT(1);
-            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall2913); if (failed) return d;
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2915); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2919);
-            base=lhs_pattern();
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-
-              			d.setStartCharacter( ((CommonToken)FORALL42).getStartIndex() );
-              		        // adding the base pattern
-              		        d.addDescr( base );
-              			d.setLocation( offset(FORALL42.getLine()), FORALL42.getCharPositionInLine() );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:3: (pattern= lhs_pattern )*
-            loop44:
-            do {
-                int alt44=2;
-                int LA44_0 = input.LA(1);
-
-                if ( (LA44_0==ID) ) {
-                    alt44=1;
-                }
-
-
-                switch (alt44) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:5: pattern= lhs_pattern
-            	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2934);
-            	    pattern=lhs_pattern();
-            	    _fsp--;
-            	    if (failed) return d;
-            	    if ( backtracking==0 ) {
-
-            	      		        // adding additional patterns
-            	      			d.addDescr( pattern );
-            	      		   
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop44;
-                }
-            } while (true);
-
-            RIGHT_PAREN43=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2950); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              		        d.setEndCharacter( ((CommonToken)RIGHT_PAREN43).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_forall
-
-
-    // $ANTLR start lhs_pattern
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );
-    public final BaseDescr lhs_pattern() throws RecognitionException {
-        BaseDescr d = null;
-
-        BaseDescr f = null;
-
-
-
-        		d =null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:2: (f= fact_binding | f= fact[null] )
-            int alt45=2;
-            int LA45_0 = input.LA(1);
-
-            if ( (LA45_0==ID) ) {
-                int LA45_1 = input.LA(2);
-
-                if ( (LA45_1==78) ) {
-                    alt45=1;
-                }
-                else if ( (LA45_1==DOT||LA45_1==LEFT_PAREN||LA45_1==LEFT_SQUARE) ) {
-                    alt45=2;
-                }
-                else {
-                    if (backtracking>0) {failed=true; return d;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("963:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );", 45, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("963:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );", 45, 0, input);
-
-                throw nvae;
-            }
-            switch (alt45) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:4: f= fact_binding
-                    {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2983);
-                    f=fact_binding();
-                    _fsp--;
-                    if (failed) return d;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:4: f= fact[null]
-                    {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern2991);
-                    f=fact(null);
-                    _fsp--;
-                    if (failed) return d;
-
-                    }
-                    break;
-
-            }
-            if ( backtracking==0 ) {
-
-              		d =f;
-              	
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end lhs_pattern
-
-
-    // $ANTLR start from_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:1: from_statement returns [FromDescr d] : ds= from_source[$d] ;
-    public final FromDescr from_statement() throws RecognitionException {
-        FromDescr d = null;
-
-        DeclarativeInvokerDescr ds = null;
-
-
-
-        		d =factory.createFrom();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:2: (ds= from_source[$d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:2: ds= from_source[$d]
-            {
-            pushFollow(FOLLOW_from_source_in_from_statement3018);
-            ds=from_source(d);
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-
-              		d.setDataSource( ds );
-              	
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end from_statement
-
-
-    // $ANTLR start accumulate_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:1: accumulate_statement returns [AccumulateDescr d] : ACCUMULATE LEFT_PAREN inputCE= lhs_or ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN ;
-    public final AccumulateDescr accumulate_statement() throws RecognitionException {
-        AccumulateDescr d = null;
-
-        Token id=null;
-        Token ACCUMULATE44=null;
-        Token RIGHT_PAREN45=null;
-        BaseDescr inputCE = null;
-
-        paren_chunk_return text = null;
-
-
-
-        		d = factory.createAccumulate();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:2: ( ACCUMULATE LEFT_PAREN inputCE= lhs_or ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:10: ACCUMULATE LEFT_PAREN inputCE= lhs_or ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN
-            {
-            ACCUMULATE44=(Token)input.LT(1);
-            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement3055); if (failed) return d;
-            if ( backtracking==0 ) {
-               
-              			d.setLocation( offset(ACCUMULATE44.getLine()), ACCUMULATE44.getCharPositionInLine() );
-              			d.setStartCharacter( ((CommonToken)ACCUMULATE44).getStartIndex() );
-              			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE );
-              		
-            }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement3065); if (failed) return d;
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement3069);
-            inputCE=lhs_or();
-            _fsp--;
-            if (failed) return d;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:997:29: ( COMMA )?
-            int alt46=2;
-            int LA46_0 = input.LA(1);
-
-            if ( (LA46_0==COMMA) ) {
-                alt46=1;
-            }
-            switch (alt46) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:997:29: COMMA
-                    {
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement3071); if (failed) return d;
-
-                    }
-                    break;
-
-            }
-
-            if ( backtracking==0 ) {
-
-              		        d.setInput( inputCE );
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1001:3: ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) )
-            int alt51=2;
-            int LA51_0 = input.LA(1);
-
-            if ( (LA51_0==INIT) ) {
-                alt51=1;
-            }
-            else if ( (LA51_0==ID) ) {
-                alt51=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1001:3: ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) )", 51, 0, input);
-
-                throw nvae;
-            }
-            switch (alt51) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1001:5: ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1001:5: ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:4: INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk
-                    {
-                    match(input,INIT,FOLLOW_INIT_in_accumulate_statement3089); if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      				location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_INIT );
-                      			
-                    }
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement3102);
-                    text=paren_chunk();
-                    _fsp--;
-                    if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:21: ( COMMA )?
-                    int alt47=2;
-                    int LA47_0 = input.LA(1);
-
-                    if ( (LA47_0==COMMA) ) {
-                        alt47=1;
-                    }
-                    switch (alt47) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:21: COMMA
-                            {
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement3104); if (failed) return d;
-
-                            }
-                            break;
-
-                    }
-
-                    if ( backtracking==0 ) {
-
-                      				if( input.toString(text.start,text.stop) != null ) {
-                      				        d.setInitCode( safeSubstring( input.toString(text.start,text.stop), 1, input.toString(text.start,text.stop).length()-1 ) );
-                      					location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_INIT_CONTENT, d.getInitCode());
-                      					location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION );
-                      				}
-                      			
-                    }
-                    match(input,ACTION,FOLLOW_ACTION_in_accumulate_statement3115); if (failed) return d;
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement3119);
-                    text=paren_chunk();
-                    _fsp--;
-                    if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:28: ( COMMA )?
-                    int alt48=2;
-                    int LA48_0 = input.LA(1);
-
-                    if ( (LA48_0==COMMA) ) {
-                        alt48=1;
-                    }
-                    switch (alt48) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:28: COMMA
-                            {
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement3121); if (failed) return d;
-
-                            }
-                            break;
-
-                    }
-
-                    if ( backtracking==0 ) {
-
-                      				if( input.toString(text.start,text.stop) != null ) {
-                      				        d.setActionCode( safeSubstring( input.toString(text.start,text.stop), 1, input.toString(text.start,text.stop).length()-1 ) );
-                      	       				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_ACTION_CONTENT, d.getActionCode());
-                      					location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE );
-                      				}
-                      			
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:4: ( REVERSE text= paren_chunk ( COMMA )? )?
-                    int alt50=2;
-                    int LA50_0 = input.LA(1);
-
-                    if ( (LA50_0==REVERSE) ) {
-                        alt50=1;
-                    }
-                    switch (alt50) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:6: REVERSE text= paren_chunk ( COMMA )?
-                            {
-                            match(input,REVERSE,FOLLOW_REVERSE_in_accumulate_statement3134); if (failed) return d;
-                            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement3138);
-                            text=paren_chunk();
-                            _fsp--;
-                            if (failed) return d;
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:31: ( COMMA )?
-                            int alt49=2;
-                            int LA49_0 = input.LA(1);
-
-                            if ( (LA49_0==COMMA) ) {
-                                alt49=1;
-                            }
-                            switch (alt49) {
-                                case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:31: COMMA
-                                    {
-                                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement3140); if (failed) return d;
-
-                                    }
-                                    break;
-
-                            }
-
-                            if ( backtracking==0 ) {
-
-                              				if( input.toString(text.start,text.stop) != null ) {
-                              				        d.setReverseCode( safeSubstring( input.toString(text.start,text.stop), 1, input.toString(text.start,text.stop).length()-1 ) );
-                              	       				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_REVERSE_CONTENT, d.getReverseCode());
-                              					location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT );
-                              				}
-                              			
-                            }
-
-                            }
-                            break;
-
-                    }
-
-                    match(input,RESULT,FOLLOW_RESULT_in_accumulate_statement3157); if (failed) return d;
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement3161);
-                    text=paren_chunk();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      				if( input.toString(text.start,text.stop) != null ) {
-                      				        d.setResultCode( safeSubstring( input.toString(text.start,text.stop), 1, input.toString(text.start,text.stop).length()-1 ) );
-                      					location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_RESULT_CONTENT, d.getResultCode());
-                      				}
-                      			
-                    }
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1040:3: (id= ID text= paren_chunk )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1040:3: (id= ID text= paren_chunk )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:4: id= ID text= paren_chunk
-                    {
-                    id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_accumulate_statement3187); if (failed) return d;
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement3191);
-                    text=paren_chunk();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                      				if( id.getText() != null ) {
-                      				        d.setExternalFunction( true );
-                      					d.setFunctionIdentifier( id.getText() );
-                      				}
-                      				if( input.toString(text.start,text.stop) != null ) {
-                      				        d.setExpression( safeSubstring( input.toString(text.start,text.stop), 1, input.toString(text.start,text.stop).length()-1 ) );
-                      	       				location.setProperty(Location.LOCATION_PROPERTY_FROM_ACCUMULATE_EXPRESSION_CONTENT, d.getExpression());
-                      				}
-                      			
-                    }
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-            RIGHT_PAREN45=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement3208); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-              			d.setEndCharacter( ((CommonToken)RIGHT_PAREN45).getStopIndex() );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end accumulate_statement
-
-
-    // $ANTLR start from_source
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )? ;
-    public final DeclarativeInvokerDescr from_source(FromDescr from) throws RecognitionException {
-        DeclarativeInvokerDescr ds = null;
-
-        identifier_return ident = null;
-
-        paren_chunk_return args = null;
-
-
-
-        		ds = null;
-        		AccessorDescr ad = null;
-        		FunctionCallDescr fc = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:2: (ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:4: ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )?
-            {
-            pushFollow(FOLLOW_identifier_in_from_source3239);
-            ident=identifier();
-            _fsp--;
-            if (failed) return ds;
-            if ( backtracking==0 ) {
-
-              			ad = new AccessorDescr(ident.start.getText());	
-              			ad.setLocation( offset(ident.start.getLine()), ident.start.getCharPositionInLine() );
-              			ad.setStartCharacter( ((CommonToken)ident.start).getStartIndex() );
-              			ad.setEndCharacter( ((CommonToken)ident.start).getStopIndex() );
-              			ds = ad;
-              			location.setProperty(Location.LOCATION_FROM_CONTENT, ident.start.getText());
-              		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:3: ( options {k=1; } : args= paren_chunk )?
-            int alt52=2;
-            int LA52_0 = input.LA(1);
-
-            if ( (LA52_0==LEFT_PAREN) ) {
-                alt52=1;
-            }
-            switch (alt52) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:5: args= paren_chunk
-                    {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source3267);
-                    args=paren_chunk();
-                    _fsp--;
-                    if (failed) return ds;
-                    if ( backtracking==0 ) {
-
-                      			if( input.toString(args.start,args.stop) != null ) {
-                      				ad.setVariableName( null );
-                      				fc = new FunctionCallDescr(((Token)ident.start).getText());
-                      				fc.setLocation( offset(((Token)ident.start).getLine()), ((Token)ident.start).getCharPositionInLine() );			
-                      				fc.setArguments(input.toString(args.start,args.stop));
-                      				fc.setStartCharacter( ((CommonToken)((Token)ident.start)).getStartIndex() );
-                      				fc.setEndCharacter( ((CommonToken)((Token)ident.start)).getStopIndex() );
-                      				location.setProperty(Location.LOCATION_FROM_CONTENT, input.toString(args.start,args.stop));
-                      				from.setEndCharacter( ((CommonToken)((Token)args.stop)).getStopIndex() );
-                      			}
-                      		
-                    }
-
-                    }
-                    break;
-
-            }
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:3: ( expression_chain[$from, ad] )?
-            int alt53=2;
-            int LA53_0 = input.LA(1);
-
-            if ( (LA53_0==DOT) ) {
-                alt53=1;
-            }
-            switch (alt53) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:3: expression_chain[$from, ad]
-                    {
-                    pushFollow(FOLLOW_expression_chain_in_from_source3280);
-                    expression_chain(from,  ad);
-                    _fsp--;
-                    if (failed) return ds;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            		if( ad != null ) {
-            			if( fc != null ) {
-            				ad.addFirstInvoker( fc );
-            			}
-            			location.setProperty(Location.LOCATION_FROM_CONTENT, ad.toString() );
-            		}
-            	
-        }
-        return ds;
-    }
-    // $ANTLR end from_source
-
-
-    // $ANTLR start expression_chain
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1108:1: expression_chain[FromDescr from, AccessorDescr as] : ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? ) ;
-    public final void expression_chain(FromDescr from, AccessorDescr as) throws RecognitionException {
-        identifier_return field = null;
-
-        square_chunk_return sqarg = null;
-
-        paren_chunk_return paarg = null;
-
-
-
-          		FieldAccessDescr fa = null;
-        	    	MethodAccessDescr ma = null;	
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:2: ( ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:2: ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:2: ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:4: DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )?
-            {
-            match(input,DOT,FOLLOW_DOT_in_expression_chain3311); if (failed) return ;
-            pushFollow(FOLLOW_identifier_in_expression_chain3315);
-            field=identifier();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-              	        fa = new FieldAccessDescr(((Token)field.start).getText());	
-              		fa.setLocation( offset(((Token)field.start).getLine()), ((Token)field.start).getCharPositionInLine() );
-              		fa.setStartCharacter( ((CommonToken)((Token)field.start)).getStartIndex() );
-              		fa.setEndCharacter( ((CommonToken)((Token)field.start)).getStopIndex() );
-              	    
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )?
-            int alt54=3;
-            alt54 = dfa54.predict(input);
-            switch (alt54) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:6: ( LEFT_SQUARE )=>sqarg= square_chunk
-                    {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain3346);
-                    sqarg=square_chunk();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      	          fa.setArgument( input.toString(sqarg.start,sqarg.stop) );	
-                      		  from.setEndCharacter( ((CommonToken)((Token)sqarg.stop)).getStopIndex() );
-                      	      
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1128:6: ( LEFT_PAREN )=>paarg= paren_chunk
-                    {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain3379);
-                    paarg=paren_chunk();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      	    	  ma = new MethodAccessDescr( ((Token)field.start).getText(), input.toString(paarg.start,paarg.stop) );	
-                      		  ma.setLocation( offset(((Token)field.start).getLine()), ((Token)field.start).getCharPositionInLine() );
-                      		  ma.setStartCharacter( ((CommonToken)((Token)field.start)).getStartIndex() );
-                      		  from.setEndCharacter( ((CommonToken)((Token)paarg.stop)).getStopIndex() );
-                      		
-                    }
-
-                    }
-                    break;
-
-            }
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:4: ( expression_chain[from, as] )?
-            int alt55=2;
-            int LA55_0 = input.LA(1);
-
-            if ( (LA55_0==DOT) ) {
-                alt55=1;
-            }
-            switch (alt55) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:4: expression_chain[from, as]
-                    {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain3394);
-                    expression_chain(from,  as);
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            		// must be added to the start, since it is a recursive rule
-            		if( ma != null ) {
-            			as.addFirstInvoker( ma );
-            		} else {
-            			as.addFirstInvoker( fa );
-            		}
-            	
-        }
-        return ;
-    }
-    // $ANTLR end expression_chain
-
-
-    // $ANTLR start collect_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:1: collect_statement returns [CollectDescr d] : COLLECT LEFT_PAREN pattern= pattern_source RIGHT_PAREN ;
-    public final CollectDescr collect_statement() throws RecognitionException {
-        CollectDescr d = null;
-
-        Token COLLECT46=null;
-        Token RIGHT_PAREN47=null;
-        BaseDescr pattern = null;
-
-
-
-        		d = factory.createCollect();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:2: ( COLLECT LEFT_PAREN pattern= pattern_source RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1155:10: COLLECT LEFT_PAREN pattern= pattern_source RIGHT_PAREN
-            {
-            COLLECT46=(Token)input.LT(1);
-            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement3445); if (failed) return d;
-            if ( backtracking==0 ) {
-               
-              			d.setLocation( offset(COLLECT46.getLine()), COLLECT46.getCharPositionInLine() );
-              			d.setStartCharacter( ((CommonToken)COLLECT46).getStartIndex() );
-              			location.setType( Location.LOCATION_LHS_FROM_COLLECT );
-              		
-            }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement3455); if (failed) return d;
-            pushFollow(FOLLOW_pattern_source_in_collect_statement3459);
-            pattern=pattern_source();
-            _fsp--;
-            if (failed) return d;
-            RIGHT_PAREN47=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement3461); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              		        d.setInputPattern( (PatternDescr) pattern );
-              			d.setEndCharacter( ((CommonToken)RIGHT_PAREN47).getStopIndex() );
-              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end collect_statement
-
-
-    // $ANTLR start entrypoint_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1169:1: entrypoint_statement returns [EntryPointDescr d] : ENTRY_POINT id= name ;
-    public final EntryPointDescr entrypoint_statement() throws RecognitionException {
-        EntryPointDescr d = null;
-
-        Token ENTRY_POINT48=null;
-        name_return id = null;
-
-
-
-        		d = factory.createEntryPoint();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1173:2: ( ENTRY_POINT id= name )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1174:10: ENTRY_POINT id= name
-            {
-            ENTRY_POINT48=(Token)input.LT(1);
-            match(input,ENTRY_POINT,FOLLOW_ENTRY_POINT_in_entrypoint_statement3498); if (failed) return d;
-            if ( backtracking==0 ) {
-               
-              			d.setLocation( offset(ENTRY_POINT48.getLine()), ENTRY_POINT48.getCharPositionInLine() );
-              			d.setStartCharacter( ((CommonToken)ENTRY_POINT48).getStartIndex() );
-              			location.setType( Location.LOCATION_LHS_FROM_ENTRY_POINT );
-              		
-            }
-            pushFollow(FOLLOW_name_in_entrypoint_statement3510);
-            id=name();
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-
-              		        d.setEntryId( id.name );
-              			d.setEndCharacter( ((CommonToken)((Token)id.stop)).getStopIndex() );
-              			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end entrypoint_statement
-
-
-    // $ANTLR start fact_binding
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:1: fact_binding returns [BaseDescr d] : ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN ) ;
-    public final BaseDescr fact_binding() throws RecognitionException {
-        BaseDescr d = null;
-
-        Token ID49=null;
-        BaseDescr fe = null;
-
-        BaseDescr left = null;
-
-        BaseDescr right = null;
-
-
-
-        		d =null;
-        		OrDescr or = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1193:3: ( ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1194:4: ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )
-            {
-            ID49=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_fact_binding3542); if (failed) return d;
-            match(input,78,FOLLOW_78_in_fact_binding3544); if (failed) return d;
-            if ( backtracking==0 ) {
-
-               		        // handling incomplete parsing
-               		        d = new PatternDescr( );
-               		        ((PatternDescr) d).setIdentifier( ID49.getText() );
-               		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:3: (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )
-            int alt57=2;
-            int LA57_0 = input.LA(1);
-
-            if ( (LA57_0==ID) ) {
-                alt57=1;
-            }
-            else if ( (LA57_0==LEFT_PAREN) ) {
-                alt57=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return d;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1200:3: (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )", 57, 0, input);
-
-                throw nvae;
-            }
-            switch (alt57) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:5: fe= fact[$ID.text]
-                    {
-                    pushFollow(FOLLOW_fact_in_fact_binding3558);
-                    fe=fact(ID49.getText());
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                       		        // override previously instantiated pattern
-                       			d =fe;
-                       			if( d != null ) {
-                         			    d.setStartCharacter( ((CommonToken)ID49).getStartIndex() );
-                         			}
-                       		
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:4: LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding3574); if (failed) return d;
-                    pushFollow(FOLLOW_fact_in_fact_binding3578);
-                    left=fact(ID49.getText());
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-
-                       		        // override previously instantiated pattern
-                       			d =left;
-                       			if( d != null ) {
-                         			    d.setStartCharacter( ((CommonToken)ID49).getStartIndex() );
-                         			}
-                       		
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1217:4: ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )*
-                    loop56:
-                    do {
-                        int alt56=2;
-                        int LA56_0 = input.LA(1);
-
-                        if ( ((LA56_0>=OR && LA56_0<=DOUBLE_PIPE)) ) {
-                            alt56=1;
-                        }
-
-
-                        switch (alt56) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1217:6: ( OR | DOUBLE_PIPE ) right= fact[$ID.text]
-                    	    {
-                    	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
-                    	        input.consume();
-                    	        errorRecovery=false;failed=false;
-                    	    }
-                    	    else {
-                    	        if (backtracking>0) {failed=true; return d;}
-                    	        MismatchedSetException mse =
-                    	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_binding3591);    throw mse;
-                    	    }
-
-                    	    pushFollow(FOLLOW_fact_in_fact_binding3603);
-                    	    right=fact(ID49.getText());
-                    	    _fsp--;
-                    	    if (failed) return d;
-                    	    if ( backtracking==0 ) {
-
-                    	      				if ( or == null ) {
-                    	      					or = new OrDescr();
-                    	      					or.addDescr( left );
-                    	      					d = or;
-                    	      				}
-                    	      				or.addDescr( right );
-                    	       			
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop56;
-                        }
-                    } while (true);
-
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding3621); if (failed) return d;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end fact_binding
-
-
-    // $ANTLR start fact
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1232:1: fact[String ident] returns [BaseDescr d] : id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN ( EOF )? ;
-    public final BaseDescr fact(String ident) throws RecognitionException {
-        BaseDescr d = null;
-
-        Token LEFT_PAREN50=null;
-        Token RIGHT_PAREN51=null;
-        qualified_id_return id = null;
-
-
-
-        		d =null;
-        		PatternDescr pattern = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1237:3: (id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN ( EOF )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1238:11: id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN ( EOF )?
-            {
-            if ( backtracking==0 ) {
-
-               			pattern = new PatternDescr( );
-               			if( ident != null ) {
-               				pattern.setIdentifier( ident );
-               			}
-               			d = pattern; 
-               	        
-            }
-            pushFollow(FOLLOW_qualified_id_in_fact3676);
-            id=qualified_id();
-            _fsp--;
-            if (failed) return d;
-            if ( backtracking==0 ) {
-               
-               			if( id != null ) {
-              	 		        pattern.setObjectType( id.text );
-               			        pattern.setEndCharacter( -1 );
-              				pattern.setStartCharacter( ((CommonToken)((Token)id.start)).getStartIndex() );
-               			}
-               		
-            }
-            LEFT_PAREN50=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3686); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              		        location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START );
-                          		location.setProperty( Location.LOCATION_PROPERTY_CLASS_NAME, id.text );
-               				
-               			pattern.setLocation( offset(LEFT_PAREN50.getLine()), LEFT_PAREN50.getCharPositionInLine() );
-               			pattern.setLeftParentCharacter( ((CommonToken)LEFT_PAREN50).getStartIndex() );
-               		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1261:4: ( constraints[pattern] )?
-            int alt58=2;
-            int LA58_0 = input.LA(1);
-
-            if ( ((LA58_0>=PACKAGE && LA58_0<=ID)||(LA58_0>=GLOBAL && LA58_0<=LEFT_PAREN)||(LA58_0>=QUERY && LA58_0<=ATTRIBUTES)||LA58_0==ENABLED||LA58_0==SALIENCE||(LA58_0>=DURATION && LA58_0<=DIALECT)||LA58_0==FROM||LA58_0==EVAL||(LA58_0>=INIT && LA58_0<=RESULT)||LA58_0==IN||(LA58_0>=THEN && LA58_0<=EVENT)) ) {
-                alt58=1;
-            }
-            switch (alt58) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1261:4: constraints[pattern]
-                    {
-                    pushFollow(FOLLOW_constraints_in_fact3698);
-                    constraints(pattern);
-                    _fsp--;
-                    if (failed) return d;
-
-                    }
-                    break;
-
-            }
-
-            RIGHT_PAREN51=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3705); if (failed) return d;
-            if ( backtracking==0 ) {
-
-              		        if( ")".equals( RIGHT_PAREN51.getText() ) ) {
-              				this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
-              				pattern.setEndLocation( offset(RIGHT_PAREN51.getLine()), RIGHT_PAREN51.getCharPositionInLine() );	
-              				pattern.setEndCharacter( ((CommonToken)RIGHT_PAREN51).getStopIndex() );
-              		        	pattern.setRightParentCharacter( ((CommonToken)RIGHT_PAREN51).getStartIndex() );
-              		        }
-               		
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1271:4: ( EOF )?
-            int alt59=2;
-            int LA59_0 = input.LA(1);
-
-            if ( (LA59_0==EOF) ) {
-                alt59=1;
-            }
-            switch (alt59) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1271:4: EOF
-                    {
-                    match(input,EOF,FOLLOW_EOF_in_fact3714); if (failed) return d;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return d;
-    }
-    // $ANTLR end fact
-
-
-    // $ANTLR start constraints
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1275:1: constraints[PatternDescr pattern] : constraint[$pattern] ( COMMA constraint[$pattern] )* ;
-    public final void constraints(PatternDescr pattern) throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:2: ( constraint[$pattern] ( COMMA constraint[$pattern] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:4: constraint[$pattern] ( COMMA constraint[$pattern] )*
-            {
-            pushFollow(FOLLOW_constraint_in_constraints3732);
-            constraint(pattern);
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1277:3: ( COMMA constraint[$pattern] )*
-            loop60:
-            do {
-                int alt60=2;
-                int LA60_0 = input.LA(1);
-
-                if ( (LA60_0==COMMA) ) {
-                    alt60=1;
-                }
-
-
-                switch (alt60) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1277:5: COMMA constraint[$pattern]
-            	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3739); if (failed) return ;
-            	    if ( backtracking==0 ) {
-            	       location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START ); 
-            	    }
-            	    pushFollow(FOLLOW_constraint_in_constraints3748);
-            	    constraint(pattern);
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop60;
-                }
-            } while (true);
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end constraints
-
-
-    // $ANTLR start constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1282:1: constraint[PatternDescr pattern] : or_constr[top] ;
-    public final void constraint(PatternDescr pattern) throws RecognitionException {
-
-        		ConditionalElementDescr top = null;
-        		location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
-        		location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, input.LT(1).getText() );
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1288:2: ( or_constr[top] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1289:3: or_constr[top]
-            {
-            if ( backtracking==0 ) {
-
-              			top = pattern.getConstraint();
-              		
-            }
-            pushFollow(FOLLOW_or_constr_in_constraint3781);
-            or_constr(top);
-            _fsp--;
-            if (failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end constraint
-
-
-    // $ANTLR start or_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1295:1: or_constr[ConditionalElementDescr base] : and_constr[or] ( DOUBLE_PIPE and_constr[or] )* ;
-    public final void or_constr(ConditionalElementDescr base) throws RecognitionException {
-
-        		OrDescr or = new OrDescr();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1299:2: ( and_constr[or] ( DOUBLE_PIPE and_constr[or] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:3: and_constr[or] ( DOUBLE_PIPE and_constr[or] )*
-            {
-            pushFollow(FOLLOW_and_constr_in_or_constr3804);
-            and_constr(or);
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:3: ( DOUBLE_PIPE and_constr[or] )*
-            loop61:
-            do {
-                int alt61=2;
-                int LA61_0 = input.LA(1);
-
-                if ( (LA61_0==DOUBLE_PIPE) ) {
-                    alt61=1;
-                }
-
-
-                switch (alt61) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:5: DOUBLE_PIPE and_constr[or]
-            	    {
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3812); if (failed) return ;
-            	    if ( backtracking==0 ) {
-
-            	      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
-            	      		
-            	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr3821);
-            	    and_constr(or);
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop61;
-                }
-            } while (true);
-
-            if ( backtracking==0 ) {
-
-              		        if( or.getDescrs().size() == 1 ) {
-              		                base.addOrMerge( (BaseDescr) or.getDescrs().get(0) );
-              		        } else if ( or.getDescrs().size() > 1 ) {
-              		        	base.addDescr( or );
-              		        }
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end or_constr
-
-
-    // $ANTLR start and_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1316:1: and_constr[ConditionalElementDescr base] : unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )* ;
-    public final void and_constr(ConditionalElementDescr base) throws RecognitionException {
-
-        		AndDescr and = new AndDescr();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:2: ( unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1321:3: unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )*
-            {
-            pushFollow(FOLLOW_unary_constr_in_and_constr3853);
-            unary_constr(and);
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1322:3: ( DOUBLE_AMPER unary_constr[and] )*
-            loop62:
-            do {
-                int alt62=2;
-                int LA62_0 = input.LA(1);
-
-                if ( (LA62_0==DOUBLE_AMPER) ) {
-                    alt62=1;
-                }
-
-
-                switch (alt62) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1322:5: DOUBLE_AMPER unary_constr[and]
-            	    {
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3861); if (failed) return ;
-            	    if ( backtracking==0 ) {
-
-            	      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
-            	      		
-            	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr3870);
-            	    unary_constr(and);
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop62;
-                }
-            } while (true);
-
-            if ( backtracking==0 ) {
-
-              		        if( and.getDescrs().size() == 1) {
-              		                base.addOrMerge( (BaseDescr) and.getDescrs().get(0) );
-              		        } else if( and.getDescrs().size() > 1) {
-              		        	base.addDescr( and );
-              		        }
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end and_constr
-
-
-    // $ANTLR start unary_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1337:1: unary_constr[ConditionalElementDescr base] : ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] ) ;
-    public final void unary_constr(ConditionalElementDescr base) throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1338:2: ( ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1339:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1339:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )
-            int alt63=3;
-            switch ( input.LA(1) ) {
-            case PACKAGE:
-            case IMPORT:
-            case FUNCTION:
-            case ID:
-            case GLOBAL:
-            case QUERY:
-            case END:
-            case TEMPLATE:
-            case RULE:
-            case WHEN:
-            case ATTRIBUTES:
-            case ENABLED:
-            case SALIENCE:
-            case DURATION:
-            case DIALECT:
-            case FROM:
-            case INIT:
-            case ACTION:
-            case REVERSE:
-            case RESULT:
-            case IN:
-            case THEN:
-            case EVENT:
-                {
-                alt63=1;
-                }
-                break;
-            case LEFT_PAREN:
-                {
-                alt63=2;
-                }
-                break;
-            case EVAL:
-                {
-                alt63=3;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1339:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )", 63, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt63) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1339:5: field_constraint[$base]
-                    {
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr3898);
-                    field_constraint(base);
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1340:5: LEFT_PAREN or_constr[$base] RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3906); if (failed) return ;
-                    pushFollow(FOLLOW_or_constr_in_unary_constr3908);
-                    or_constr(base);
-                    _fsp--;
-                    if (failed) return ;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3911); if (failed) return ;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1341:5: EVAL predicate[$base]
-                    {
-                    match(input,EVAL,FOLLOW_EVAL_in_unary_constr3917); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_unary_constr3919);
-                    predicate(base);
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end unary_constr
-
-
-    // $ANTLR start field_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1345:1: field_constraint[ConditionalElementDescr base] : ( ( ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )? ) | (f= accessor_path or_restr_connective[top] ) );
-    public final void field_constraint(ConditionalElementDescr base) throws RecognitionException {
-        Token ID52=null;
-        accessor_path_return f = null;
-
-
-
-        		FieldBindingDescr fbd = null;
-        		FieldConstraintDescr fc = null;
-        		RestrictionConnectiveDescr top = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1351:2: ( ( ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )? ) | (f= accessor_path or_restr_connective[top] ) )
-            int alt65=2;
-            int LA65_0 = input.LA(1);
-
-            if ( (LA65_0==ID) ) {
-                int LA65_1 = input.LA(2);
-
-                if ( (LA65_1==78) ) {
-                    alt65=1;
-                }
-                else if ( (LA65_1==DOT||LA65_1==LEFT_PAREN||LA65_1==NOT||(LA65_1>=CONTAINS && LA65_1<=IN)||LA65_1==LEFT_SQUARE||(LA65_1>=80 && LA65_1<=85)) ) {
-                    alt65=2;
-                }
-                else {
-                    if (backtracking>0) {failed=true; return ;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("1345:1: field_constraint[ConditionalElementDescr base] : ( ( ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )? ) | (f= accessor_path or_restr_connective[top] ) );", 65, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else if ( ((LA65_0>=PACKAGE && LA65_0<=FUNCTION)||LA65_0==GLOBAL||(LA65_0>=QUERY && LA65_0<=ATTRIBUTES)||LA65_0==ENABLED||LA65_0==SALIENCE||(LA65_0>=DURATION && LA65_0<=DIALECT)||LA65_0==FROM||(LA65_0>=INIT && LA65_0<=RESULT)||LA65_0==IN||(LA65_0>=THEN && LA65_0<=EVENT)) ) {
-                alt65=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1345:1: field_constraint[ConditionalElementDescr base] : ( ( ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )? ) | (f= accessor_path or_restr_connective[top] ) );", 65, 0, input);
-
-                throw nvae;
-            }
-            switch (alt65) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1352:10: ( ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )? )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1352:10: ( ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )? )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1353:3: ID ':' f= accessor_path ( or_restr_connective[top] | '->' predicate[$base] )?
-                    {
-                    ID52=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_field_constraint3958); if (failed) return ;
-                    match(input,78,FOLLOW_78_in_field_constraint3960); if (failed) return ;
-                    if ( backtracking==0 ) {
-                       
-                      			fbd = new FieldBindingDescr();
-                      			fbd.setIdentifier( ID52.getText() );
-                      			fbd.setLocation( offset(ID52.getLine()), ID52.getCharPositionInLine() );
-                      			fbd.setStartCharacter( ((CommonToken)ID52).getStartIndex() );
-                      			base.addDescr( fbd );
-
-                      		    
-                    }
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint3979);
-                    f=accessor_path();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      		    // use ((Token)f.start) to get token matched in identifier
-                      		    // or use f.text to get text.
-                      		    if( f.text != null ) {
-                      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-                      			location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, f.text);
-                      		    
-                      			if ( fbd != null ) {
-                      			    fbd.setFieldName( f.text );
-                      			    // may have been overwritten
-                      			    fbd.setStartCharacter( ((CommonToken)ID52).getStartIndex() );
-                      			} 
-                      			fc = new FieldConstraintDescr(f.text);
-                      			fc.setLocation( offset(((Token)f.start).getLine()), ((Token)f.start).getCharPositionInLine() );
-                      			fc.setStartCharacter( ((CommonToken)((Token)f.start)).getStartIndex() );
-                      			top = fc.getRestriction();
-                      			
-                      			// it must be a field constraint, as it is not a binding
-                      			if( ID52 == null ) {
-                      			    base.addDescr( fc );
-                      			}
-                      		    }
-                      		
-                    }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:3: ( or_restr_connective[top] | '->' predicate[$base] )?
-                    int alt64=3;
-                    int LA64_0 = input.LA(1);
-
-                    if ( (LA64_0==LEFT_PAREN||LA64_0==NOT||(LA64_0>=CONTAINS && LA64_0<=IN)||(LA64_0>=80 && LA64_0<=85)) ) {
-                        alt64=1;
-                    }
-                    else if ( (LA64_0==79) ) {
-                        alt64=2;
-                    }
-                    switch (alt64) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:4: or_restr_connective[top]
-                            {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint3993);
-                            or_restr_connective(top);
-                            _fsp--;
-                            if (failed) return ;
-                            if ( backtracking==0 ) {
-
-                              				// we must add now as we didn't before
-                              				if( ID52 != null) {
-                              				    base.addDescr( fc );
-                              				}
-                              			
-                            }
-
-                            }
-                            break;
-                        case 2 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1396:4: '->' predicate[$base]
-                            {
-                            match(input,79,FOLLOW_79_in_field_constraint4008); if (failed) return ;
-                            pushFollow(FOLLOW_predicate_in_field_constraint4010);
-                            predicate(base);
-                            _fsp--;
-                            if (failed) return ;
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1400:3: (f= accessor_path or_restr_connective[top] )
-                    {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1400:3: (f= accessor_path or_restr_connective[top] )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1401:3: f= accessor_path or_restr_connective[top]
-                    {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint4036);
-                    f=accessor_path();
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      		    // use ((Token)f.start) to get token matched in identifier
-                      		    // or use f.text to get text.
-                      		    if( f.text != null ) {
-                      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-                      			location.setProperty(Location.LOCATION_PROPERTY_PROPERTY_NAME, f.text);
-                      		    
-                      			fc = new FieldConstraintDescr(f.text);
-                      			fc.setLocation( offset(((Token)f.start).getLine()), ((Token)f.start).getCharPositionInLine() );
-                      			fc.setStartCharacter( ((CommonToken)((Token)f.start)).getStartIndex() );
-                      			top = fc.getRestriction();
-                      			
-                      			base.addDescr( fc );
-                      		    }
-                      		
-                    }
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint4045);
-                    or_restr_connective(top);
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-        }
-        catch ( NoViableAltException nvae ) {
-
-            	    if( input.LT(1) != null ) {
-            	                // in case of incomplete parsing, build as much as possible of the AST
-            	                // so that IDE requirements can be met
-            			fc = new FieldConstraintDescr( input.LT(1).getText() );
-            			fc.setLocation( offset(input.LT(1).getLine()), input.LT(1).getCharPositionInLine() );
-            			fc.setStartCharacter( ((CommonToken)input.LT(1)).getStartIndex() );
-            			base.addDescr( fc );
-            	    }
-            	    throw nvae;
-            	
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end field_constraint
-
-
-    // $ANTLR start or_restr_connective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:1: or_restr_connective[ RestrictionConnectiveDescr base ] options {backtrack=true; } : and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )* ;
-    public final void or_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
-
-        		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1440:2: ( and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1441:3: and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*
-            {
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective4092);
-            and_restr_connective(or);
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1442:3: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*
-            loop66:
-            do {
-                int alt66=2;
-                int LA66_0 = input.LA(1);
-
-                if ( (LA66_0==DOUBLE_PIPE) ) {
-                    switch ( input.LA(2) ) {
-                    case IN:
-                        {
-                        int LA66_3 = input.LA(3);
-
-                        if ( (LA66_3==LEFT_PAREN) ) {
-                            int LA66_6 = input.LA(4);
-
-                            if ( (synpred11()) ) {
-                                alt66=1;
-                            }
-
-
-                        }
-
-
-                        }
-                        break;
-                    case LEFT_PAREN:
-                        {
-                        int LA66_4 = input.LA(3);
-
-                        if ( (synpred11()) ) {
-                            alt66=1;
-                        }
-
-
-                        }
-                        break;
-                    case NOT:
-                    case CONTAINS:
-                    case EXCLUDES:
-                    case MATCHES:
-                    case SOUNDSLIKE:
-                    case MEMBEROF:
-                    case TILDE:
-                    case 80:
-                    case 81:
-                    case 82:
-                    case 83:
-                    case 84:
-                    case 85:
-                        {
-                        alt66=1;
-                        }
-                        break;
-
-                    }
-
-                }
-
-
-                switch (alt66) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:4: DOUBLE_PIPE and_restr_connective[or]
-            	    {
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective4116); if (failed) return ;
-            	    if ( backtracking==0 ) {
-
-            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-            	      			
-            	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective4127);
-            	    and_restr_connective(or);
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop66;
-                }
-            } while (true);
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	        if( or.getRestrictions().size() == 1 ) {
-            	                base.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
-            	        } else if ( or.getRestrictions().size() > 1 ) {
-            	        	base.addRestriction( or );
-            	        }
-            	
-        }
-        return ;
-    }
-    // $ANTLR end or_restr_connective
-
-
-    // $ANTLR start and_restr_connective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1459:1: and_restr_connective[ RestrictionConnectiveDescr base ] : constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )* ;
-    public final void and_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
-        Token t=null;
-
-
-        		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1463:2: ( constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1464:3: constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*
-            {
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective4159);
-            constraint_expression(and);
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1465:3: ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*
-            loop67:
-            do {
-                int alt67=2;
-                int LA67_0 = input.LA(1);
-
-                if ( (LA67_0==DOUBLE_AMPER) ) {
-                    switch ( input.LA(2) ) {
-                    case IN:
-                        {
-                        int LA67_3 = input.LA(3);
-
-                        if ( (LA67_3==LEFT_PAREN) ) {
-                            switch ( input.LA(4) ) {
-                            case IN:
-                                {
-                                int LA67_9 = input.LA(5);
-
-                                if ( (LA67_9==DOT||(LA67_9>=COMMA && LA67_9<=RIGHT_PAREN)||LA67_9==LEFT_SQUARE) ) {
-                                    alt67=1;
-                                }
-
-
-                                }
-                                break;
-                            case PACKAGE:
-                            case IMPORT:
-                            case FUNCTION:
-                            case ID:
-                            case GLOBAL:
-                            case STRING:
-                            case QUERY:
-                            case END:
-                            case TEMPLATE:
-                            case RULE:
-                            case WHEN:
-                            case ATTRIBUTES:
-                            case ENABLED:
-                            case BOOL:
-                            case SALIENCE:
-                            case INT:
-                            case DURATION:
-                            case DIALECT:
-                            case FROM:
-                            case INIT:
-                            case ACTION:
-                            case REVERSE:
-                            case RESULT:
-                            case FLOAT:
-                            case NULL:
-                            case THEN:
-                            case EVENT:
-                                {
-                                alt67=1;
-                                }
-                                break;
-                            case LEFT_PAREN:
-                                {
-                                int LA67_10 = input.LA(5);
-
-                                if ( (synpred12()) ) {
-                                    alt67=1;
-                                }
-
-
-                                }
-                                break;
-
-                            }
-
-                        }
-
-
-                        }
-                        break;
-                    case NOT:
-                    case CONTAINS:
-                    case EXCLUDES:
-                    case MATCHES:
-                    case SOUNDSLIKE:
-                    case MEMBEROF:
-                    case TILDE:
-                    case 80:
-                    case 81:
-                    case 82:
-                    case 83:
-                    case 84:
-                    case 85:
-                        {
-                        alt67=1;
-                        }
-                        break;
-                    case LEFT_PAREN:
-                        {
-                        switch ( input.LA(3) ) {
-                        case IN:
-                            {
-                            int LA67_7 = input.LA(4);
-
-                            if ( (LA67_7==LEFT_PAREN) ) {
-                                int LA67_11 = input.LA(5);
-
-                                if ( (synpred12()) ) {
-                                    alt67=1;
-                                }
-
-
-                            }
-
-
-                            }
-                            break;
-                        case LEFT_PAREN:
-                            {
-                            int LA67_8 = input.LA(4);
-
-                            if ( (synpred12()) ) {
-                                alt67=1;
-                            }
-
-
-                            }
-                            break;
-                        case NOT:
-                        case CONTAINS:
-                        case EXCLUDES:
-                        case MATCHES:
-                        case SOUNDSLIKE:
-                        case MEMBEROF:
-                        case TILDE:
-                        case 80:
-                        case 81:
-                        case 82:
-                        case 83:
-                        case 84:
-                        case 85:
-                            {
-                            alt67=1;
-                            }
-                            break;
-
-                        }
-
-                        }
-                        break;
-
-                    }
-
-                }
-
-
-                switch (alt67) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1466:5: t= DOUBLE_AMPER constraint_expression[and]
-            	    {
-            	    t=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective4179); if (failed) return ;
-            	    if ( backtracking==0 ) {
-
-            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-            	      			
-            	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective4190);
-            	    constraint_expression(and);
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop67;
-                }
-            } while (true);
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	        if( and.getRestrictions().size() == 1) {
-            	                base.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
-            	        } else if ( and.getRestrictions().size() > 1 ) {
-            	        	base.addRestriction( and );
-            	        }
-            	
-        }
-        return ;
-    }
-    // $ANTLR end and_restr_connective
-
-
-    // $ANTLR start constraint_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1481:1: constraint_expression[RestrictionConnectiveDescr base] : ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN ) ;
-    public final void constraint_expression(RestrictionConnectiveDescr base) throws RecognitionException {
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1482:9: ( ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1483:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1483:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )
-            int alt68=3;
-            switch ( input.LA(1) ) {
-            case IN:
-                {
-                alt68=1;
-                }
-                break;
-            case NOT:
-                {
-                int LA68_2 = input.LA(2);
-
-                if ( (LA68_2==CONTAINS||LA68_2==MATCHES||(LA68_2>=MEMBEROF && LA68_2<=TILDE)) ) {
-                    alt68=2;
-                }
-                else if ( (LA68_2==IN) ) {
-                    alt68=1;
-                }
-                else {
-                    if (backtracking>0) {failed=true; return ;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("1483:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )", 68, 2, input);
-
-                    throw nvae;
-                }
-                }
-                break;
-            case CONTAINS:
-            case EXCLUDES:
-            case MATCHES:
-            case SOUNDSLIKE:
-            case MEMBEROF:
-            case TILDE:
-            case 80:
-            case 81:
-            case 82:
-            case 83:
-            case 84:
-            case 85:
-                {
-                alt68=2;
-                }
-                break;
-            case LEFT_PAREN:
-                {
-                alt68=3;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1483:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )", 68, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt68) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1483:5: compound_operator[$base]
-                    {
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression4227);
-                    compound_operator(base);
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1484:5: simple_operator[$base]
-                    {
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression4234);
-                    simple_operator(base);
-                    _fsp--;
-                    if (failed) return ;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1485:5: LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression4242); if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-                      		
-                    }
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression4251);
-                    or_restr_connective(base);
-                    _fsp--;
-                    if (failed) return ;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression4256); if (failed) return ;
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end constraint_expression
-
-
-    // $ANTLR start simple_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1494:1: simple_operator[RestrictionConnectiveDescr base] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | t= SOUNDSLIKE | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF | TILDE t= ID (param= square_chunk )? | n= NOT TILDE t= ID (param= square_chunk )? ) rd= expression_value[$base, op, isNegated, paramText] ;
-    public final void simple_operator(RestrictionConnectiveDescr base) throws RecognitionException {
-        Token t=null;
-        Token n=null;
-        square_chunk_return param = null;
-
-        RestrictionDescr rd = null;
-
-
-
-        		String op = null;
-        		String paramText = null;
-        		boolean isNegated = false;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1500:2: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | t= SOUNDSLIKE | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF | TILDE t= ID (param= square_chunk )? | n= NOT TILDE t= ID (param= square_chunk )? ) rd= expression_value[$base, op, isNegated, paramText] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | t= SOUNDSLIKE | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF | TILDE t= ID (param= square_chunk )? | n= NOT TILDE t= ID (param= square_chunk )? ) rd= expression_value[$base, op, isNegated, paramText]
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | t= SOUNDSLIKE | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF | TILDE t= ID (param= square_chunk )? | n= NOT TILDE t= ID (param= square_chunk )? )
-            int alt71=16;
-            switch ( input.LA(1) ) {
-            case 80:
-                {
-                alt71=1;
-                }
-                break;
-            case 81:
-                {
-                alt71=2;
-                }
-                break;
-            case 82:
-                {
-                alt71=3;
-                }
-                break;
-            case 83:
-                {
-                alt71=4;
-                }
-                break;
-            case 84:
-                {
-                alt71=5;
-                }
-                break;
-            case 85:
-                {
-                alt71=6;
-                }
-                break;
-            case CONTAINS:
-                {
-                alt71=7;
-                }
-                break;
-            case NOT:
-                {
-                switch ( input.LA(2) ) {
-                case TILDE:
-                    {
-                    alt71=16;
-                    }
-                    break;
-                case MATCHES:
-                    {
-                    alt71=12;
-                    }
-                    break;
-                case CONTAINS:
-                    {
-                    alt71=8;
-                    }
-                    break;
-                case MEMBEROF:
-                    {
-                    alt71=14;
-                    }
-                    break;
-                default:
-                    if (backtracking>0) {failed=true; return ;}
-                    NoViableAltException nvae =
-                        new NoViableAltException("1501:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | t= SOUNDSLIKE | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF | TILDE t= ID (param= square_chunk )? | n= NOT TILDE t= ID (param= square_chunk )? )", 71, 8, input);
-
-                    throw nvae;
-                }
-
-                }
-                break;
-            case EXCLUDES:
-                {
-                alt71=9;
-                }
-                break;
-            case MATCHES:
-                {
-                alt71=10;
-                }
-                break;
-            case SOUNDSLIKE:
-                {
-                alt71=11;
-                }
-                break;
-            case MEMBEROF:
-                {
-                alt71=13;
-                }
-                break;
-            case TILDE:
-                {
-                alt71=15;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1501:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | t= SOUNDSLIKE | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF | TILDE t= ID (param= square_chunk )? | n= NOT TILDE t= ID (param= square_chunk )? )", 71, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt71) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:5: t= '=='
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,80,FOLLOW_80_in_simple_operator4287); if (failed) return ;
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1502:5: t= '>'
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,81,FOLLOW_81_in_simple_operator4295); if (failed) return ;
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1503:5: t= '>='
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,82,FOLLOW_82_in_simple_operator4303); if (failed) return ;
-
-                    }
-                    break;
-                case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1504:5: t= '<'
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,83,FOLLOW_83_in_simple_operator4311); if (failed) return ;
-
-                    }
-                    break;
-                case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:5: t= '<='
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,84,FOLLOW_84_in_simple_operator4319); if (failed) return ;
-
-                    }
-                    break;
-                case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1506:5: t= '!='
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,85,FOLLOW_85_in_simple_operator4327); if (failed) return ;
-
-                    }
-                    break;
-                case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1507:25: t= CONTAINS
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator4355); if (failed) return ;
-
-                    }
-                    break;
-                case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1508:25: n= NOT t= CONTAINS
-                    {
-                    n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator4383); if (failed) return ;
-                    t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator4387); if (failed) return ;
-
-                    }
-                    break;
-                case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1509:25: t= EXCLUDES
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator4415); if (failed) return ;
-
-                    }
-                    break;
-                case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:25: t= MATCHES
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator4443); if (failed) return ;
-
-                    }
-                    break;
-                case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1511:25: t= SOUNDSLIKE
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,SOUNDSLIKE,FOLLOW_SOUNDSLIKE_in_simple_operator4471); if (failed) return ;
-
-                    }
-                    break;
-                case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1512:25: n= NOT t= MATCHES
-                    {
-                    n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator4499); if (failed) return ;
-                    t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator4503); if (failed) return ;
-
-                    }
-                    break;
-                case 13 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1513:25: t= MEMBEROF
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator4531); if (failed) return ;
-
-                    }
-                    break;
-                case 14 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:25: n= NOT t= MEMBEROF
-                    {
-                    n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator4559); if (failed) return ;
-                    t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator4563); if (failed) return ;
-
-                    }
-                    break;
-                case 15 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:5: TILDE t= ID (param= square_chunk )?
-                    {
-                    match(input,TILDE,FOLLOW_TILDE_in_simple_operator4569); if (failed) return ;
-                    t=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator4573); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:21: (param= square_chunk )?
-                    int alt69=2;
-                    int LA69_0 = input.LA(1);
-
-                    if ( (LA69_0==LEFT_SQUARE) ) {
-                        alt69=1;
-                    }
-                    switch (alt69) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:21: param= square_chunk
-                            {
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator4577);
-                            param=square_chunk();
-                            _fsp--;
-                            if (failed) return ;
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-                case 16 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1516:5: n= NOT TILDE t= ID (param= square_chunk )?
-                    {
-                    n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator4586); if (failed) return ;
-                    match(input,TILDE,FOLLOW_TILDE_in_simple_operator4588); if (failed) return ;
-                    t=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator4592); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1516:27: (param= square_chunk )?
-                    int alt70=2;
-                    int LA70_0 = input.LA(1);
-
-                    if ( (LA70_0==LEFT_SQUARE) ) {
-                        alt70=1;
-                    }
-                    switch (alt70) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1516:27: param= square_chunk
-                            {
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator4596);
-                            param=square_chunk();
-                            _fsp--;
-                            if (failed) return ;
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-            if ( backtracking==0 ) {
-
-                		    location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-                                  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, t.getText());
-               	            op = t.getText();
-               	            isNegated = n != null;
-               	            if( param != null ) {
-                                      paramText = safeSubstring( input.toString(param.start,param.stop), 1, input.toString(param.start,param.stop).length()-1 );
-               	            } 
-              		
-            }
-            pushFollow(FOLLOW_expression_value_in_simple_operator4611);
-            rd=expression_value(base,  op,  isNegated,  paramText);
-            _fsp--;
-            if (failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            		if ( rd == null && op != null ) {
-            		        base.addRestriction( new LiteralRestrictionDescr(op, false, null) );
-            		}
-            	
-        }
-        return ;
-    }
-    // $ANTLR end simple_operator
-
-
-    // $ANTLR start compound_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1535:1: compound_operator[RestrictionConnectiveDescr base] : ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op, false, null] ( COMMA rd= expression_value[group, op, false, null] )* RIGHT_PAREN ;
-    public final void compound_operator(RestrictionConnectiveDescr base) throws RecognitionException {
-        RestrictionDescr rd = null;
-
-
-
-        		String op = null;
-        		RestrictionConnectiveDescr group = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:2: ( ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op, false, null] ( COMMA rd= expression_value[group, op, false, null] )* RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1541:3: ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op, false, null] ( COMMA rd= expression_value[group, op, false, null] )* RIGHT_PAREN
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1541:3: ( IN | NOT IN )
-            int alt72=2;
-            int LA72_0 = input.LA(1);
-
-            if ( (LA72_0==IN) ) {
-                alt72=1;
-            }
-            else if ( (LA72_0==NOT) ) {
-                alt72=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1541:3: ( IN | NOT IN )", 72, 0, input);
-
-                throw nvae;
-            }
-            switch (alt72) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1541:5: IN
-                    {
-                    match(input,IN,FOLLOW_IN_in_compound_operator4641); if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      			  op = "==";
-                      			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
-                      			  base.addRestriction( group );
-                        		    	  location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-                                          	  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, "in");
-                      			
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1549:5: NOT IN
-                    {
-                    match(input,NOT,FOLLOW_NOT_in_compound_operator4653); if (failed) return ;
-                    match(input,IN,FOLLOW_IN_in_compound_operator4655); if (failed) return ;
-                    if ( backtracking==0 ) {
-
-                      			  op = "!=";
-                      			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
-                      			  base.addRestriction( group );
-                        		    	  location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT);
-                                          	  location.setProperty(Location.LOCATION_PROPERTY_OPERATOR, "in");
-                      			
-                    }
-
-                    }
-                    break;
-
-            }
-
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator4670); if (failed) return ;
-            pushFollow(FOLLOW_expression_value_in_compound_operator4674);
-            rd=expression_value(group,  op,  false,  null);
-            _fsp--;
-            if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1559:3: ( COMMA rd= expression_value[group, op, false, null] )*
-            loop73:
-            do {
-                int alt73=2;
-                int LA73_0 = input.LA(1);
-
-                if ( (LA73_0==COMMA) ) {
-                    alt73=1;
-                }
-
-
-                switch (alt73) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1559:5: COMMA rd= expression_value[group, op, false, null]
-            	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator4681); if (failed) return ;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator4685);
-            	    rd=expression_value(group,  op,  false,  null);
-            	    _fsp--;
-            	    if (failed) return ;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop73;
-                }
-            } while (true);
-
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator4694); if (failed) return ;
-            if ( backtracking==0 ) {
-
-              			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end compound_operator
-
-
-    // $ANTLR start expression_value
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1566:1: expression_value[RestrictionConnectiveDescr base, String op, boolean isNegated, String paramText] returns [RestrictionDescr rd] : (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk ) ;
-    public final RestrictionDescr expression_value(RestrictionConnectiveDescr base, String op, boolean isNegated, String paramText) throws RecognitionException {
-        RestrictionDescr rd = null;
-
-        accessor_path_return ap = null;
-
-        literal_constraint_return lc = null;
-
-        paren_chunk_return rvc = null;
-
-
-
-        		rd = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1570:2: ( (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1571:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1571:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )
-            int alt74=3;
-            switch ( input.LA(1) ) {
-            case PACKAGE:
-            case IMPORT:
-            case FUNCTION:
-            case ID:
-            case GLOBAL:
-            case QUERY:
-            case END:
-            case TEMPLATE:
-            case RULE:
-            case WHEN:
-            case ATTRIBUTES:
-            case ENABLED:
-            case SALIENCE:
-            case DURATION:
-            case DIALECT:
-            case FROM:
-            case INIT:
-            case ACTION:
-            case REVERSE:
-            case RESULT:
-            case IN:
-            case THEN:
-            case EVENT:
-                {
-                alt74=1;
-                }
-                break;
-            case STRING:
-            case BOOL:
-            case INT:
-            case FLOAT:
-            case NULL:
-                {
-                alt74=2;
-                }
-                break;
-            case LEFT_PAREN:
-                {
-                alt74=3;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return rd;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1571:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )", 74, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt74) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1571:5: ap= accessor_path
-                    {
-                    pushFollow(FOLLOW_accessor_path_in_expression_value4728);
-                    ap=accessor_path();
-                    _fsp--;
-                    if (failed) return rd;
-                    if ( backtracking==0 ) {
-                       
-                      			        if( ap.text.indexOf( '.' ) > -1 || ap.text.indexOf( '[' ) > -1) {
-                      					rd = new QualifiedIdentifierRestrictionDescr(op, isNegated, paramText, ap.text);
-                      				} else {
-                      					rd = new VariableRestrictionDescr(op, isNegated, paramText, ap.text);
-                      				}
-                      			
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:5: lc= literal_constraint
-                    {
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value4748);
-                    lc=literal_constraint();
-                    _fsp--;
-                    if (failed) return rd;
-                    if ( backtracking==0 ) {
-                       
-                      				rd = new LiteralRestrictionDescr(op, isNegated, paramText, lc.text, lc.type );
-                      			
-                    }
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:5: rvc= paren_chunk
-                    {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value4762);
-                    rvc=paren_chunk();
-                    _fsp--;
-                    if (failed) return rd;
-                    if ( backtracking==0 ) {
-                       
-                      				rd = new ReturnValueRestrictionDescr(op, isNegated, paramText, safeSubstring( input.toString(rvc.start,rvc.stop), 1, input.toString(rvc.start,rvc.stop).length()-1) );							
-                      			
-                    }
-
-                    }
-                    break;
-
-            }
-
-            if ( backtracking==0 ) {
-
-              			if( rd != null ) {
-              				base.addRestriction( rd );
-              			}
-              			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return rd;
-    }
-    // $ANTLR end expression_value
-
-    public static class literal_constraint_return extends ParserRuleReturnScope {
-        public String text;
-        public int type;
-    };
-
-    // $ANTLR start literal_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:1: literal_constraint returns [String text, int type] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
-    public final literal_constraint_return literal_constraint() throws RecognitionException {
-        literal_constraint_return retval = new literal_constraint_return();
-        retval.start = input.LT(1);
-
-        Token t=null;
-
-
-        		retval.text = null;
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:2: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
-            {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
-            int alt75=5;
-            switch ( input.LA(1) ) {
-            case STRING:
-                {
-                alt75=1;
-                }
-                break;
-            case INT:
-                {
-                alt75=2;
-                }
-                break;
-            case FLOAT:
-                {
-                alt75=3;
-                }
-                break;
-            case BOOL:
-                {
-                alt75=4;
-                }
-                break;
-            case NULL:
-                {
-                alt75=5;
-                }
-                break;
-            default:
-                if (backtracking>0) {failed=true; return retval;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1600:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 75, 0, input);
-
-                throw nvae;
-            }
-
-            switch (alt75) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:6: t= STRING
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint4805); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.text = getString( t.getText() ); retval.type = LiteralRestrictionDescr.TYPE_STRING; 
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:5: t= INT
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint4816); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.text = t.getText(); retval.type = LiteralRestrictionDescr.TYPE_NUMBER; 
-                    }
-
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1602:5: t= FLOAT
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint4829); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.text = t.getText(); retval.type = LiteralRestrictionDescr.TYPE_NUMBER; 
-                    }
-
-                    }
-                    break;
-                case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:5: t= BOOL
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint4840); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.text = t.getText(); retval.type = LiteralRestrictionDescr.TYPE_BOOLEAN; 
-                    }
-
-                    }
-                    break;
-                case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:5: t= NULL
-                    {
-                    t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_literal_constraint4852); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.text = null; retval.type = LiteralRestrictionDescr.TYPE_NULL; 
-                    }
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            retval.stop = input.LT(-1);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end literal_constraint
-
-
-    // $ANTLR start predicate
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1608:1: predicate[ConditionalElementDescr base] : text= paren_chunk ;
-    public final void predicate(ConditionalElementDescr base) throws RecognitionException {
-        paren_chunk_return text = null;
-
-
-
-        		PredicateDescr d = null;
-                
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:2: (text= paren_chunk )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1613:3: text= paren_chunk
-            {
-            pushFollow(FOLLOW_paren_chunk_in_predicate4890);
-            text=paren_chunk();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-              		        if( input.toString(text.start,text.stop) != null ) {
-              				d = new PredicateDescr( );
-              			        d.setContent( safeSubstring( input.toString(text.start,text.stop), 1, input.toString(text.start,text.stop).length()-1 ) );
-              				d.setEndCharacter( ((CommonToken)((Token)text.stop)).getStopIndex() );
-              				base.addDescr( d );
-              		        }
-              		
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end predicate
-
-    public static class curly_chunk_return extends ParserRuleReturnScope {
-    };
-
-    // $ANTLR start curly_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1625:1: curly_chunk : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY ;
-    public final curly_chunk_return curly_chunk() throws RecognitionException {
-        curly_chunk_return retval = new curly_chunk_return();
-        retval.start = input.LT(1);
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:3: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY
-            {
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk4908); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:14: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )*
-            loop76:
-            do {
-                int alt76=3;
-                int LA76_0 = input.LA(1);
-
-                if ( ((LA76_0>=PACKAGE && LA76_0<=DECLARE)||(LA76_0>=STRING && LA76_0<=85)) ) {
-                    alt76=1;
-                }
-                else if ( (LA76_0==LEFT_CURLY) ) {
-                    alt76=2;
-                }
-
-
-                switch (alt76) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
-            	    {
-            	    if ( (input.LA(1)>=PACKAGE && input.LA(1)<=DECLARE)||(input.LA(1)>=STRING && input.LA(1)<=85) ) {
-            	        input.consume();
-            	        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_chunk4912);    throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-            	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:44: curly_chunk
-            	    {
-            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk4921);
-            	    curly_chunk();
-            	    _fsp--;
-            	    if (failed) return retval;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop76;
-                }
-            } while (true);
-
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk4926); if (failed) return retval;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end curly_chunk
-
-    public static class paren_chunk_return extends ParserRuleReturnScope {
-    };
-
-    // $ANTLR start paren_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:1: paren_chunk : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN ;
-    public final paren_chunk_return paren_chunk() throws RecognitionException {
-        paren_chunk_return retval = new paren_chunk_return();
-        retval.start = input.LT(1);
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:3: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN
-            {
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk4940); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:14: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )*
-            loop77:
-            do {
-                int alt77=3;
-                int LA77_0 = input.LA(1);
-
-                if ( ((LA77_0>=PACKAGE && LA77_0<=GLOBAL)||LA77_0==COMMA||(LA77_0>=DECLARE && LA77_0<=85)) ) {
-                    alt77=1;
-                }
-                else if ( (LA77_0==LEFT_PAREN) ) {
-                    alt77=2;
-                }
-
-
-                switch (alt77) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
-            	    {
-            	    if ( (input.LA(1)>=PACKAGE && input.LA(1)<=GLOBAL)||input.LA(1)==COMMA||(input.LA(1)>=DECLARE && input.LA(1)<=85) ) {
-            	        input.consume();
-            	        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_chunk4944);    throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-            	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:44: paren_chunk
-            	    {
-            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk4953);
-            	    paren_chunk();
-            	    _fsp--;
-            	    if (failed) return retval;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop77;
-                }
-            } while (true);
-
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk4958); if (failed) return retval;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end paren_chunk
-
-    public static class square_chunk_return extends ParserRuleReturnScope {
-    };
-
-    // $ANTLR start square_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1635:1: square_chunk : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE ;
-    public final square_chunk_return square_chunk() throws RecognitionException {
-        square_chunk_return retval = new square_chunk_return();
-        retval.start = input.LT(1);
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:3: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE
-            {
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk4971); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:15: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )*
-            loop78:
-            do {
-                int alt78=3;
-                int LA78_0 = input.LA(1);
-
-                if ( ((LA78_0>=PACKAGE && LA78_0<=NULL)||(LA78_0>=THEN && LA78_0<=85)) ) {
-                    alt78=1;
-                }
-                else if ( (LA78_0==LEFT_SQUARE) ) {
-                    alt78=2;
-                }
-
-
-                switch (alt78) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
-            	    {
-            	    if ( (input.LA(1)>=PACKAGE && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=85) ) {
-            	        input.consume();
-            	        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_chunk4975);    throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-            	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:47: square_chunk
-            	    {
-            	    pushFollow(FOLLOW_square_chunk_in_square_chunk4984);
-            	    square_chunk();
-            	    _fsp--;
-            	    if (failed) return retval;
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop78;
-                }
-            } while (true);
-
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk4989); if (failed) return retval;
-
-            }
-
-            retval.stop = input.LT(-1);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end square_chunk
-
-    public static class qualified_id_return extends ParserRuleReturnScope {
-        public String text;
-    };
-
-    // $ANTLR start qualified_id
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1640:1: qualified_id returns [ String text ] : ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* ;
-    public final qualified_id_return qualified_id() throws RecognitionException {
-        qualified_id_return retval = new qualified_id_return();
-        retval.start = input.LT(1);
-
-        Token ID53=null;
-        identifier_return identifier54 = null;
-
-
-
-        	        StringBuffer buf = new StringBuffer();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:2: ( ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:5: ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )*
-            {
-            ID53=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_qualified_id5018); if (failed) return retval;
-            if ( backtracking==0 ) {
-              buf.append(ID53.getText());
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:32: ( DOT identifier )*
-            loop79:
-            do {
-                int alt79=2;
-                int LA79_0 = input.LA(1);
-
-                if ( (LA79_0==DOT) ) {
-                    alt79=1;
-                }
-
-
-                switch (alt79) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:34: DOT identifier
-            	    {
-            	    match(input,DOT,FOLLOW_DOT_in_qualified_id5024); if (failed) return retval;
-            	    pushFollow(FOLLOW_identifier_in_qualified_id5026);
-            	    identifier54=identifier();
-            	    _fsp--;
-            	    if (failed) return retval;
-            	    if ( backtracking==0 ) {
-            	      buf.append("."+input.toString(identifier54.start,identifier54.stop));
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop79;
-                }
-            } while (true);
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:88: ( LEFT_SQUARE RIGHT_SQUARE )*
-            loop80:
-            do {
-                int alt80=2;
-                int LA80_0 = input.LA(1);
-
-                if ( (LA80_0==LEFT_SQUARE) ) {
-                    alt80=1;
-                }
-
-
-                switch (alt80) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:90: LEFT_SQUARE RIGHT_SQUARE
-            	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_qualified_id5035); if (failed) return retval;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_qualified_id5037); if (failed) return retval;
-            	    if ( backtracking==0 ) {
-            	      buf.append("[]");
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop80;
-                }
-            } while (true);
-
-
-            }
-
-            retval.stop = input.LT(-1);
-
-            if ( backtracking==0 ) {
-
-              	        retval.text = buf != null ? buf.toString() : "";
-              	
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end qualified_id
-
-
-    // $ANTLR start dotted_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1650:1: dotted_name returns [ String text ] : i= identifier ( DOT i= identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* ;
-    public final String dotted_name() throws RecognitionException {
-        String text = null;
-
-        identifier_return i = null;
-
-
-
-        	        StringBuffer buf = new StringBuffer();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1657:2: (i= identifier ( DOT i= identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1657:4: i= identifier ( DOT i= identifier )* ( LEFT_SQUARE RIGHT_SQUARE )*
-            {
-            pushFollow(FOLLOW_identifier_in_dotted_name5071);
-            i=identifier();
-            _fsp--;
-            if (failed) return text;
-            if ( backtracking==0 ) {
-              buf.append(input.toString(i.start,i.stop));
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1657:40: ( DOT i= identifier )*
-            loop81:
-            do {
-                int alt81=2;
-                int LA81_0 = input.LA(1);
-
-                if ( (LA81_0==DOT) ) {
-                    alt81=1;
-                }
-
-
-                switch (alt81) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1657:42: DOT i= identifier
-            	    {
-            	    match(input,DOT,FOLLOW_DOT_in_dotted_name5077); if (failed) return text;
-            	    pushFollow(FOLLOW_identifier_in_dotted_name5081);
-            	    i=identifier();
-            	    _fsp--;
-            	    if (failed) return text;
-            	    if ( backtracking==0 ) {
-            	      buf.append("."+input.toString(i.start,i.stop));
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop81;
-                }
-            } while (true);
-
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1657:89: ( LEFT_SQUARE RIGHT_SQUARE )*
-            loop82:
-            do {
-                int alt82=2;
-                int LA82_0 = input.LA(1);
-
-                if ( (LA82_0==LEFT_SQUARE) ) {
-                    alt82=1;
-                }
-
-
-                switch (alt82) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1657:91: LEFT_SQUARE RIGHT_SQUARE
-            	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name5090); if (failed) return text;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name5092); if (failed) return text;
-            	    if ( backtracking==0 ) {
-            	      buf.append("[]");
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop82;
-                }
-            } while (true);
-
-
-            }
-
-            if ( backtracking==0 ) {
-
-              	        text = buf != null ? buf.toString() : "";
-              	
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return text;
-    }
-    // $ANTLR end dotted_name
-
-    public static class accessor_path_return extends ParserRuleReturnScope {
-        public String text;
-    };
-
-    // $ANTLR start accessor_path
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1660:1: accessor_path returns [ String text ] : a= accessor_element ( DOT a= accessor_element )* ;
-    public final accessor_path_return accessor_path() throws RecognitionException {
-        accessor_path_return retval = new accessor_path_return();
-        retval.start = input.LT(1);
-
-        String a = null;
-
-
-
-        	        StringBuffer buf = new StringBuffer();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:2: (a= accessor_element ( DOT a= accessor_element )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:4: a= accessor_element ( DOT a= accessor_element )*
-            {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path5126);
-            a=accessor_element();
-            _fsp--;
-            if (failed) return retval;
-            if ( backtracking==0 ) {
-              buf.append(a);
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:46: ( DOT a= accessor_element )*
-            loop83:
-            do {
-                int alt83=2;
-                int LA83_0 = input.LA(1);
-
-                if ( (LA83_0==DOT) ) {
-                    alt83=1;
-                }
-
-
-                switch (alt83) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:48: DOT a= accessor_element
-            	    {
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path5132); if (failed) return retval;
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path5136);
-            	    a=accessor_element();
-            	    _fsp--;
-            	    if (failed) return retval;
-            	    if ( backtracking==0 ) {
-            	      buf.append("."+a);
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop83;
-                }
-            } while (true);
-
-
-            }
-
-            retval.stop = input.LT(-1);
-
-            if ( backtracking==0 ) {
-
-              	        retval.text = buf != null ? buf.toString() : "";
-              	
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end accessor_path
-
-
-    // $ANTLR start accessor_element
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1670:1: accessor_element returns [ String text ] : i= identifier (s= square_chunk )* ;
-    public final String accessor_element() throws RecognitionException {
-        String text = null;
-
-        identifier_return i = null;
-
-        square_chunk_return s = null;
-
-
-
-        	        StringBuffer buf = new StringBuffer();
-        	
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1677:2: (i= identifier (s= square_chunk )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:3: i= identifier (s= square_chunk )*
-            {
-            pushFollow(FOLLOW_identifier_in_accessor_element5174);
-            i=identifier();
-            _fsp--;
-            if (failed) return text;
-            if ( backtracking==0 ) {
-              buf.append(input.toString(i.start,i.stop));
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:39: (s= square_chunk )*
-            loop84:
-            do {
-                int alt84=2;
-                int LA84_0 = input.LA(1);
-
-                if ( (LA84_0==LEFT_SQUARE) ) {
-                    alt84=1;
-                }
-
-
-                switch (alt84) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:40: s= square_chunk
-            	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element5181);
-            	    s=square_chunk();
-            	    _fsp--;
-            	    if (failed) return text;
-            	    if ( backtracking==0 ) {
-            	      buf.append(input.toString(s.start,s.stop));
-            	    }
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop84;
-                }
-            } while (true);
-
-
-            }
-
-            if ( backtracking==0 ) {
-
-              	        text = buf != null ? buf.toString() : "";
-              	
-            }
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return text;
-    }
-    // $ANTLR end accessor_element
-
-
-    // $ANTLR start rhs_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:1: rhs_chunk[RuleDescr rule] : THEN (~ END )* loc= END opt_semicolon ;
-    public final void rhs_chunk(RuleDescr rule) throws RecognitionException {
-        Token loc=null;
-        Token THEN55=null;
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1682:2: ( THEN (~ END )* loc= END opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:3: THEN (~ END )* loc= END opt_semicolon
-            {
-            THEN55=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk5202); if (failed) return ;
-            if ( backtracking==0 ) {
-               location.setType( Location.LOCATION_RHS ); 
-            }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1684:3: (~ END )*
-            loop85:
-            do {
-                int alt85=2;
-                int LA85_0 = input.LA(1);
-
-                if ( ((LA85_0>=PACKAGE && LA85_0<=QUERY)||(LA85_0>=TEMPLATE && LA85_0<=85)) ) {
-                    alt85=1;
-                }
-
-
-                switch (alt85) {
-            	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1684:5: ~ END
-            	    {
-            	    if ( (input.LA(1)>=PACKAGE && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=85) ) {
-            	        input.consume();
-            	        errorRecovery=false;failed=false;
-            	    }
-            	    else {
-            	        if (backtracking>0) {failed=true; return ;}
-            	        MismatchedSetException mse =
-            	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk5210);    throw mse;
-            	    }
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop85;
-                }
-            } while (true);
-
-            loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk5234); if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_rhs_chunk5236);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return ;
-            if ( backtracking==0 ) {
-
-                                  // ignoring first line in the consequence
-                                  String buf = input.toString( THEN55, loc );
-                                  // removing final END keyword
-                                  int idx=4;
-                                  while( idx < buf.length()-3 && (buf.charAt(idx) == ' ' || buf.charAt(idx) == '\t') ) {
-                                      idx++;
-                                  }
-                                  if( idx < buf.length()-3 && buf.charAt(idx) == '\r' ) idx++;
-                                  if( idx < buf.length()-3 && buf.charAt(idx) == '\n' ) idx++;
-                                  buf = safeSubstring( buf, idx, buf.length()-3 );
-              		    rule.setConsequence( buf );
-                   		    rule.setConsequenceLocation(offset(THEN55.getLine()), THEN55.getCharPositionInLine());
-               		    rule.setEndCharacter( ((CommonToken)loc).getStopIndex() );
-               		    location.setProperty( Location.LOCATION_RHS_CONTENT, rule.getConsequence() );
-                              
-            }
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end rhs_chunk
-
-    public static class name_return extends ParserRuleReturnScope {
-        public String name;
-    };
-
-    // $ANTLR start name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1704:1: name returns [String name] : ( ID | STRING );
-    public final name_return name() throws RecognitionException {
-        name_return retval = new name_return();
-        retval.start = input.LT(1);
-
-        Token ID56=null;
-        Token STRING57=null;
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:2: ( ID | STRING )
-            int alt86=2;
-            int LA86_0 = input.LA(1);
-
-            if ( (LA86_0==ID) ) {
-                alt86=1;
-            }
-            else if ( (LA86_0==STRING) ) {
-                alt86=2;
-            }
-            else {
-                if (backtracking>0) {failed=true; return retval;}
-                NoViableAltException nvae =
-                    new NoViableAltException("1704:1: name returns [String name] : ( ID | STRING );", 86, 0, input);
-
-                throw nvae;
-            }
-            switch (alt86) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:5: ID
-                    {
-                    ID56=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_name5270); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.name = ID56.getText(); 
-                    }
-
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1706:5: STRING
-                    {
-                    STRING57=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_name5278); if (failed) return retval;
-                    if ( backtracking==0 ) {
-                       retval.name = getString( STRING57.getText() ); 
-                    }
-
-                    }
-                    break;
-
-            }
-            retval.stop = input.LT(-1);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end name
-
-    public static class identifier_return extends ParserRuleReturnScope {
-    };
-
-    // $ANTLR start identifier
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:1: identifier : ( ID | PACKAGE | FUNCTION | GLOBAL | IMPORT | EVENT | RULE | QUERY | TEMPLATE | ATTRIBUTES | ENABLED | SALIENCE | DURATION | DIALECT | FROM | INIT | ACTION | REVERSE | RESULT | WHEN | THEN | END | IN );
-    public final identifier_return identifier() throws RecognitionException {
-        identifier_return retval = new identifier_return();
-        retval.start = input.LT(1);
-
-        try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1710:2: ( ID | PACKAGE | FUNCTION | GLOBAL | IMPORT | EVENT | RULE | QUERY | TEMPLATE | ATTRIBUTES | ENABLED | SALIENCE | DURATION | DIALECT | FROM | INIT | ACTION | REVERSE | RESULT | WHEN | THEN | END | IN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
-            {
-            if ( (input.LA(1)>=PACKAGE && input.LA(1)<=ID)||input.LA(1)==GLOBAL||(input.LA(1)>=QUERY && input.LA(1)<=ATTRIBUTES)||input.LA(1)==ENABLED||input.LA(1)==SALIENCE||(input.LA(1)>=DURATION && input.LA(1)<=DIALECT)||input.LA(1)==FROM||(input.LA(1)>=INIT && input.LA(1)<=RESULT)||input.LA(1)==IN||(input.LA(1)>=THEN && input.LA(1)<=EVENT) ) {
-                input.consume();
-                errorRecovery=false;failed=false;
-            }
-            else {
-                if (backtracking>0) {failed=true; return retval;}
-                MismatchedSetException mse =
-                    new MismatchedSetException(null,input);
-                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_identifier0);    throw mse;
-            }
-
-
-            }
-
-            retval.stop = input.LT(-1);
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return retval;
-    }
-    // $ANTLR end identifier
-
-    // $ANTLR start synpred1
-    public final void synpred1_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:6: ( EXISTS )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:8: EXISTS
-        {
-        match(input,EXISTS,FOLLOW_EXISTS_in_synpred12216); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred1
-
-    // $ANTLR start synpred2
-    public final void synpred2_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:5: ( NOT )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:7: NOT
-        {
-        match(input,NOT,FOLLOW_NOT_in_synpred22234); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred2
-
-    // $ANTLR start synpred3
-    public final void synpred3_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:5: ( EVAL )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:7: EVAL
-        {
-        match(input,EVAL,FOLLOW_EVAL_in_synpred32253); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred3
-
-    // $ANTLR start synpred4
-    public final void synpred4_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:830:5: ( FORALL )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:830:7: FORALL
-        {
-        match(input,FORALL,FOLLOW_FORALL_in_synpred42272); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred4
-
-    // $ANTLR start synpred5
-    public final void synpred5_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831:5: ( LEFT_PAREN )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831:7: LEFT_PAREN
-        {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred52291); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred5
-
-    // $ANTLR start synpred6
-    public final void synpred6_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:13: ( FROM ENTRY_POINT )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:14: FROM ENTRY_POINT
-        {
-        match(input,FROM,FOLLOW_FROM_in_synpred62397); if (failed) return ;
-        match(input,ENTRY_POINT,FOLLOW_ENTRY_POINT_in_synpred62399); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred6
-
-    // $ANTLR start synpred9
-    public final void synpred9_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:6: ( LEFT_SQUARE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:8: LEFT_SQUARE
-        {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred93338); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred9
-
-    // $ANTLR start synpred10
-    public final void synpred10_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1128:6: ( LEFT_PAREN )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1128:8: LEFT_PAREN
-        {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred103371); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred10
-
-    // $ANTLR start synpred11
-    public final void synpred11_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:4: ( DOUBLE_PIPE and_restr_connective[or] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:4: DOUBLE_PIPE and_restr_connective[or]
-        {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred114116); if (failed) return ;
-        pushFollow(FOLLOW_and_restr_connective_in_synpred114127);
-        and_restr_connective(or);
-        _fsp--;
-        if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred11
-
-    // $ANTLR start synpred12
-    public final void synpred12_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1466:5: ( DOUBLE_AMPER constraint_expression[and] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1466:5: DOUBLE_AMPER constraint_expression[and]
-        {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred124179); if (failed) return ;
-        pushFollow(FOLLOW_constraint_expression_in_synpred124190);
-        constraint_expression(and);
-        _fsp--;
-        if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred12
-
-    public final boolean synpred9() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred9_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred5() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred5_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred6() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred6_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred10() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred10_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred1() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred1_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred11() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred11_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred2() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred2_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred12() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred12_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred3() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred3_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-    public final boolean synpred4() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred4_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
-
-
-    protected DFA8 dfa8 = new DFA8(this);
-    protected DFA9 dfa9 = new DFA9(this);
-    protected DFA19 dfa19 = new DFA19(this);
-    protected DFA54 dfa54 = new DFA54(this);
-    static final String DFA8_eotS =
-        "\6\uffff";
-    static final String DFA8_eofS =
-        "\6\uffff";
-    static final String DFA8_minS =
-        "\2\4\1\77\2\uffff\1\4";
-    static final String DFA8_maxS =
-        "\2\101\1\77\2\uffff\1\101";
-    static final String DFA8_acceptS =
-        "\3\uffff\1\2\1\1\1\uffff";
-    static final String DFA8_specialS =
-        "\6\uffff}>";
-    static final String[] DFA8_transitionS = {
-            "\4\1\1\uffff\1\1\7\uffff\6\1\2\uffff\1\1\1\uffff\1\1\6\uffff"+
-            "\2\1\5\uffff\1\1\5\uffff\4\1\10\uffff\1\1\4\uffff\2\1",
-            "\6\4\1\uffff\2\3\4\uffff\6\4\2\uffff\1\4\1\uffff\1\4\6\uffff"+
-            "\2\4\5\uffff\1\4\5\uffff\4\4\10\uffff\1\4\2\uffff\1\2\1\uffff"+
-            "\2\4",
-            "\1\5",
-            "",
-            "",
-            "\4\4\1\uffff\1\4\1\uffff\2\3\4\uffff\6\4\2\uffff\1\4\1\uffff"+
-            "\1\4\6\uffff\2\4\5\uffff\1\4\5\uffff\4\4\10\uffff\1\4\2\uffff"+
-            "\1\2\1\uffff\2\4"
-    };
-
-    static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS);
-    static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS);
-    static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS);
-    static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS);
-    static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS);
-    static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS);
-    static final short[][] DFA8_transition;
-
-    static {
-        int numStates = DFA8_transitionS.length;
-        DFA8_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA8_transition[i] = DFA.unpackEncodedString(DFA8_transitionS[i]);
-        }
-    }
-
-    class DFA8 extends DFA {
-
-        public DFA8(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 8;
-            this.eot = DFA8_eot;
-            this.eof = DFA8_eof;
-            this.min = DFA8_min;
-            this.max = DFA8_max;
-            this.accept = DFA8_accept;
-            this.special = DFA8_special;
-            this.transition = DFA8_transition;
-        }
-        public String getDescription() {
-            return "345:15: (paramType= dotted_name )?";
-        }
-    }
-    static final String DFA9_eotS =
-        "\6\uffff";
-    static final String DFA9_eofS =
-        "\6\uffff";
-    static final String DFA9_minS =
-        "\2\4\1\uffff\1\77\1\uffff\1\4";
-    static final String DFA9_maxS =
-        "\2\101\1\uffff\1\77\1\uffff\1\101";
-    static final String DFA9_acceptS =
-        "\2\uffff\1\1\1\uffff\1\2\1\uffff";
-    static final String DFA9_specialS =
-        "\6\uffff}>";
-    static final String[] DFA9_transitionS = {
-            "\4\1\1\uffff\1\1\7\uffff\6\1\2\uffff\1\1\1\uffff\1\1\6\uffff"+
-            "\2\1\5\uffff\1\1\5\uffff\4\1\10\uffff\1\1\4\uffff\2\1",
-            "\6\2\1\uffff\2\4\4\uffff\6\2\2\uffff\1\2\1\uffff\1\2\6\uffff"+
-            "\2\2\5\uffff\1\2\5\uffff\4\2\10\uffff\1\2\2\uffff\1\3\1\uffff"+
-            "\2\2",
-            "",
-            "\1\5",
-            "",
-            "\4\2\1\uffff\1\2\1\uffff\2\4\4\uffff\6\2\2\uffff\1\2\1\uffff"+
-            "\1\2\6\uffff\2\2\5\uffff\1\2\5\uffff\4\2\10\uffff\1\2\2\uffff"+
-            "\1\3\1\uffff\2\2"
-    };
-
-    static final short[] DFA9_eot = DFA.unpackEncodedString(DFA9_eotS);
-    static final short[] DFA9_eof = DFA.unpackEncodedString(DFA9_eofS);
-    static final char[] DFA9_min = DFA.unpackEncodedStringToUnsignedChars(DFA9_minS);
-    static final char[] DFA9_max = DFA.unpackEncodedStringToUnsignedChars(DFA9_maxS);
-    static final short[] DFA9_accept = DFA.unpackEncodedString(DFA9_acceptS);
-    static final short[] DFA9_special = DFA.unpackEncodedString(DFA9_specialS);
-    static final short[][] DFA9_transition;
-
-    static {
-        int numStates = DFA9_transitionS.length;
-        DFA9_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA9_transition[i] = DFA.unpackEncodedString(DFA9_transitionS[i]);
-        }
-    }
-
-    class DFA9 extends DFA {
-
-        public DFA9(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 9;
-            this.eot = DFA9_eot;
-            this.eof = DFA9_eof;
-            this.min = DFA9_min;
-            this.max = DFA9_max;
-            this.accept = DFA9_accept;
-            this.special = DFA9_special;
-            this.transition = DFA9_transition;
-        }
-        public String getDescription() {
-            return "350:22: (paramType= dotted_name )?";
-        }
-    }
-    static final String DFA19_eotS =
-        "\11\uffff";
-    static final String DFA19_eofS =
-        "\11\uffff";
-    static final String DFA19_minS =
-        "\2\7\1\uffff\1\7\1\uffff\1\4\1\77\2\7";
-    static final String DFA19_maxS =
-        "\2\55\1\uffff\1\116\1\uffff\1\101\1\77\2\76";
-    static final String DFA19_acceptS =
-        "\2\uffff\1\2\1\uffff\1\1\4\uffff";
-    static final String DFA19_specialS =
-        "\11\uffff}>";
-    static final String[] DFA19_transitionS = {
-            "\1\2\2\uffff\1\1\7\uffff\1\2\27\uffff\4\2",
-            "\1\3\2\uffff\1\2\1\uffff\1\4\30\uffff\1\2\1\uffff\1\2\2\uffff"+
-            "\4\2",
-            "",
-            "\1\4\1\5\1\uffff\1\2\2\4\61\uffff\1\6\17\uffff\1\2",
-            "",
-            "\4\7\1\uffff\1\7\7\uffff\6\7\2\uffff\1\7\1\uffff\1\7\6\uffff"+
-            "\2\7\5\uffff\1\7\5\uffff\4\7\10\uffff\1\7\4\uffff\2\7",
-            "\1\10",
-            "\1\4\1\5\1\uffff\1\2\63\uffff\1\6",
-            "\1\4\2\uffff\1\2\63\uffff\1\6"
-    };
-
-    static final short[] DFA19_eot = DFA.unpackEncodedString(DFA19_eotS);
-    static final short[] DFA19_eof = DFA.unpackEncodedString(DFA19_eofS);
-    static final char[] DFA19_min = DFA.unpackEncodedStringToUnsignedChars(DFA19_minS);
-    static final char[] DFA19_max = DFA.unpackEncodedStringToUnsignedChars(DFA19_maxS);
-    static final short[] DFA19_accept = DFA.unpackEncodedString(DFA19_acceptS);
-    static final short[] DFA19_special = DFA.unpackEncodedString(DFA19_specialS);
-    static final short[][] DFA19_transition;
-
-    static {
-        int numStates = DFA19_transitionS.length;
-        DFA19_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA19_transition[i] = DFA.unpackEncodedString(DFA19_transitionS[i]);
-        }
-    }
-
-    class DFA19 extends DFA {
-
-        public DFA19(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 19;
-            this.eot = DFA19_eot;
-            this.eof = DFA19_eof;
-            this.min = DFA19_min;
-            this.max = DFA19_max;
-            this.accept = DFA19_accept;
-            this.special = DFA19_special;
-            this.transition = DFA19_transition;
-        }
-        public String getDescription() {
-            return "418:3: ( LEFT_PAREN ( ( (paramType= qualified_id )? paramName= ID ) ( COMMA (paramType= qualified_id )? paramName= ID )* )? RIGHT_PAREN )?";
-        }
-    }
-    static final String DFA54_eotS =
-        "\150\uffff";
-    static final String DFA54_eofS =
-        "\150\uffff";
-    static final String DFA54_minS =
-        "\1\7\1\uffff\1\4\1\uffff\2\4\1\0\5\4\2\uffff\4\4\1\0\1\4\1\0\5\4"+
-        "\1\0\1\4\1\0\1\4\2\0\3\4\1\0\1\4\2\0\1\4\2\0\3\4\1\0\1\4\2\0\1\4"+
-        "\2\0\3\4\1\0\3\4\1\0\3\4\1\0\1\4\1\0\1\4\1\uffff\44\0";
-    static final String DFA54_maxS =
-        "\1\114\1\uffff\1\125\1\uffff\2\125\1\0\5\125\2\uffff\4\125\1\0\1"+
-        "\125\1\0\5\125\1\0\1\125\1\0\1\125\2\0\3\125\1\0\1\125\2\0\1\125"+
-        "\2\0\3\125\1\0\1\125\2\0\1\125\2\0\3\125\1\0\3\125\1\0\3\125\1\0"+
-        "\1\125\1\0\1\125\1\uffff\44\0";
-    static final String DFA54_acceptS =
-        "\1\uffff\1\1\1\uffff\1\3\10\uffff\2\2\65\uffff\1\2\44\uffff";
-    static final String DFA54_specialS =
-        "\1\53\1\uffff\1\24\1\uffff\1\43\1\47\1\70\1\6\1\22\1\15\1\76\1\3"+
-        "\2\uffff\1\50\1\66\1\41\1\37\1\10\1\21\1\26\1\54\1\35\1\62\1\33"+
-        "\1\30\1\65\1\2\1\52\1\1\1\36\1\7\1\44\1\72\1\11\1\4\1\20\1\67\1"+
-        "\61\1\17\1\0\1\60\1\63\1\14\1\71\1\75\1\27\1\56\1\51\1\31\1\16\1"+
-        "\40\1\23\1\55\1\57\1\34\1\45\1\73\1\12\1\25\1\46\1\74\1\13\1\5\1"+
-        "\32\1\42\1\64\45\uffff}>";
-    static final String[] DFA54_transitionS = {
-            "\2\3\1\uffff\1\2\2\3\5\uffff\1\3\22\uffff\4\3\1\uffff\4\3\1"+
-            "\uffff\1\3\16\uffff\1\1\1\uffff\1\3\13\uffff\1\3",
-            "",
-            "\3\14\1\13\2\14\1\6\1\14\1\15\30\14\1\5\1\14\1\4\2\14\1\7\1"+
-            "\10\1\11\1\12\50\14",
-            "",
-            "\3\14\1\23\2\14\1\22\1\14\1\15\35\14\1\16\1\17\1\20\1\21\50"+
-            "\14",
-            "\3\14\1\31\2\14\1\24\1\14\1\15\35\14\1\25\1\26\1\27\1\30\50"+
-            "\14",
-            "\1\uffff",
-            "\3\14\1\33\2\14\1\32\1\14\1\15\111\14",
-            "\3\14\1\35\2\14\1\34\1\14\1\15\111\14",
-            "\6\14\1\36\1\14\1\15\111\14",
-            "\6\14\1\37\1\14\1\15\111\14",
-            "\4\14\1\41\1\14\1\43\1\14\1\15\61\14\1\42\17\14\1\40\7\14",
-            "",
-            "",
-            "\3\14\1\44\2\14\1\45\1\14\1\15\111\14",
-            "\3\14\1\47\2\14\1\46\1\14\1\15\111\14",
-            "\6\14\1\50\1\14\1\15\111\14",
-            "\6\14\1\51\1\14\1\15\111\14",
-            "\1\uffff",
-            "\4\14\1\53\1\14\1\55\1\14\1\15\61\14\1\54\17\14\1\52\7\14",
-            "\1\uffff",
-            "\3\14\1\56\2\14\1\57\1\14\1\15\111\14",
-            "\3\14\1\61\2\14\1\60\1\14\1\15\111\14",
-            "\6\14\1\62\1\14\1\15\111\14",
-            "\6\14\1\63\1\14\1\15\111\14",
-            "\4\14\1\65\1\14\1\67\1\14\1\15\61\14\1\66\17\14\1\64\7\14",
-            "\1\uffff",
-            "\4\14\1\71\1\14\1\73\1\14\1\15\61\14\1\72\17\14\1\70\7\14",
-            "\1\uffff",
-            "\4\14\1\75\1\14\1\77\1\14\1\15\61\14\1\76\17\14\1\74\7\14",
-            "\1\uffff",
-            "\1\uffff",
-            "\3\14\1\100\2\14\1\101\1\14\1\15\111\14",
-            "\4\102\1\14\1\102\1\103\1\14\1\15\4\14\6\102\2\14\1\102\1\14"+
-            "\1\102\6\14\2\102\5\14\1\102\5\14\4\102\10\14\1\102\4\14\2\102"+
-            "\24\14",
-            "\6\14\1\103\1\14\1\15\62\14\1\104\26\14",
-            "\1\uffff",
-            "\4\14\1\106\1\14\1\110\1\14\1\15\61\14\1\107\17\14\1\105\7\14",
-            "\1\uffff",
-            "\1\uffff",
-            "\4\14\1\112\1\14\1\114\1\14\1\15\61\14\1\113\17\14\1\111\7\14",
-            "\1\uffff",
-            "\1\uffff",
-            "\3\14\1\115\2\14\1\116\1\14\1\15\111\14",
-            "\4\117\1\14\1\117\1\103\1\14\1\15\4\14\6\117\2\14\1\117\1\14"+
-            "\1\117\6\14\2\117\5\14\1\117\5\14\4\117\10\14\1\117\4\14\2\117"+
-            "\24\14",
-            "\6\14\1\103\1\14\1\15\62\14\1\120\26\14",
-            "\1\uffff",
-            "\4\14\1\122\1\14\1\124\1\14\1\15\61\14\1\123\17\14\1\121\7\14",
-            "\1\uffff",
-            "\1\uffff",
-            "\4\14\1\126\1\14\1\130\1\14\1\15\61\14\1\127\17\14\1\125\7\14",
-            "\1\uffff",
-            "\1\uffff",
-            "\3\14\1\131\2\14\1\132\1\14\1\15\111\14",
-            "\4\133\1\14\1\133\1\103\1\14\1\15\4\14\6\133\2\14\1\133\1\14"+
-            "\1\133\6\14\2\133\5\14\1\133\5\14\4\133\10\14\1\133\4\14\2\133"+
-            "\24\14",
-            "\6\14\1\103\1\14\1\15\62\14\1\134\26\14",
-            "\1\uffff",
-            "\3\14\1\135\2\14\1\136\1\14\1\15\111\14",
-            "\4\137\1\14\1\137\1\103\1\14\1\15\4\14\6\137\2\14\1\137\1\14"+
-            "\1\137\6\14\2\137\5\14\1\137\5\14\4\137\10\14\1\137\4\14\2\137"+
-            "\24\14",
-            "\6\14\1\103\1\14\1\15\62\14\1\140\26\14",
-            "\1\uffff",
-            "\3\14\1\141\2\14\1\142\1\14\1\15\111\14",
-            "\4\143\1\14\1\143\1\103\1\14\1\15\4\14\6\143\2\14\1\143\1\14"+
-            "\1\143\6\14\2\143\5\14\1\143\5\14\4\143\10\14\1\143\4\14\2\143"+
-            "\24\14",
-            "\6\14\1\103\1\14\1\15\62\14\1\144\26\14",
-            "\1\uffff",
-            "\4\14\1\145\1\14\1\147\1\14\1\15\61\14\1\146\27\14",
-            "\1\uffff",
-            "\4\14\1\41\1\14\1\43\1\14\1\15\61\14\1\42\27\14",
-            "",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff"
-    };
-
-    static final short[] DFA54_eot = DFA.unpackEncodedString(DFA54_eotS);
-    static final short[] DFA54_eof = DFA.unpackEncodedString(DFA54_eofS);
-    static final char[] DFA54_min = DFA.unpackEncodedStringToUnsignedChars(DFA54_minS);
-    static final char[] DFA54_max = DFA.unpackEncodedStringToUnsignedChars(DFA54_maxS);
-    static final short[] DFA54_accept = DFA.unpackEncodedString(DFA54_acceptS);
-    static final short[] DFA54_special = DFA.unpackEncodedString(DFA54_specialS);
-    static final short[][] DFA54_transition;
-
-    static {
-        int numStates = DFA54_transitionS.length;
-        DFA54_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA54_transition[i] = DFA.unpackEncodedString(DFA54_transitionS[i]);
-        }
-    }
-
-    class DFA54 extends DFA {
-
-        public DFA54(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 54;
-            this.eot = DFA54_eot;
-            this.eof = DFA54_eof;
-            this.min = DFA54_min;
-            this.max = DFA54_max;
-            this.accept = DFA54_accept;
-            this.special = DFA54_special;
-            this.transition = DFA54_transition;
-        }
-        public String getDescription() {
-            return "1121:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )?";
-        }
-        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA54_40 = input.LA(1);
-
-                         
-                        int index54_40 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_40);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA54_29 = input.LA(1);
-
-                         
-                        int index54_29 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_29==78) ) {s = 60;}
-
-                        else if ( (LA54_29==DOT) ) {s = 61;}
-
-                        else if ( (LA54_29==LEFT_SQUARE) ) {s = 62;}
-
-                        else if ( (LA54_29==LEFT_PAREN) ) {s = 63;}
-
-                        else if ( (LA54_29==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_29>=PACKAGE && LA54_29<=ID)||LA54_29==GLOBAL||LA54_29==COMMA||(LA54_29>=DECLARE && LA54_29<=NULL)||(LA54_29>=RIGHT_SQUARE && LA54_29<=77)||(LA54_29>=79 && LA54_29<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_29);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA54_27 = input.LA(1);
-
-                         
-                        int index54_27 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_27==78) ) {s = 56;}
-
-                        else if ( (LA54_27==DOT) ) {s = 57;}
-
-                        else if ( (LA54_27==LEFT_SQUARE) ) {s = 58;}
-
-                        else if ( (LA54_27==LEFT_PAREN) ) {s = 59;}
-
-                        else if ( (LA54_27==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_27>=PACKAGE && LA54_27<=ID)||LA54_27==GLOBAL||LA54_27==COMMA||(LA54_27>=DECLARE && LA54_27<=NULL)||(LA54_27>=RIGHT_SQUARE && LA54_27<=77)||(LA54_27>=79 && LA54_27<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_27);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA54_11 = input.LA(1);
-
-                         
-                        int index54_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_11==78) ) {s = 32;}
-
-                        else if ( (LA54_11==DOT) ) {s = 33;}
-
-                        else if ( (LA54_11==LEFT_SQUARE) ) {s = 34;}
-
-                        else if ( (LA54_11==LEFT_PAREN) ) {s = 35;}
-
-                        else if ( (LA54_11==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_11>=PACKAGE && LA54_11<=ID)||LA54_11==GLOBAL||LA54_11==COMMA||(LA54_11>=DECLARE && LA54_11<=NULL)||(LA54_11>=RIGHT_SQUARE && LA54_11<=77)||(LA54_11>=79 && LA54_11<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_11);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA54_35 = input.LA(1);
-
-                         
-                        int index54_35 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_35);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA54_63 = input.LA(1);
-
-                         
-                        int index54_63 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_63);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA54_7 = input.LA(1);
-
-                         
-                        int index54_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_7==LEFT_PAREN) ) {s = 26;}
-
-                        else if ( (LA54_7==ID) ) {s = 27;}
-
-                        else if ( (LA54_7==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_7>=PACKAGE && LA54_7<=FUNCTION)||(LA54_7>=DOT && LA54_7<=GLOBAL)||LA54_7==COMMA||(LA54_7>=DECLARE && LA54_7<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA54_31 = input.LA(1);
-
-                         
-                        int index54_31 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_31);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA54_18 = input.LA(1);
-
-                         
-                        int index54_18 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_18);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA54_34 = input.LA(1);
-
-                         
-                        int index54_34 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_34==RIGHT_SQUARE) ) {s = 68;}
-
-                        else if ( (LA54_34==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_34>=PACKAGE && LA54_34<=GLOBAL)||LA54_34==COMMA||(LA54_34>=DECLARE && LA54_34<=LEFT_SQUARE)||(LA54_34>=THEN && LA54_34<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_34==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_34);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
-                        int LA54_58 = input.LA(1);
-
-                         
-                        int index54_58 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_58==RIGHT_SQUARE) ) {s = 96;}
-
-                        else if ( (LA54_58==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_58>=PACKAGE && LA54_58<=GLOBAL)||LA54_58==COMMA||(LA54_58>=DECLARE && LA54_58<=LEFT_SQUARE)||(LA54_58>=THEN && LA54_58<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_58==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_58);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA54_62 = input.LA(1);
-
-                         
-                        int index54_62 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_62==RIGHT_SQUARE) ) {s = 100;}
-
-                        else if ( (LA54_62==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_62>=PACKAGE && LA54_62<=GLOBAL)||LA54_62==COMMA||(LA54_62>=DECLARE && LA54_62<=LEFT_SQUARE)||(LA54_62>=THEN && LA54_62<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_62==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_62);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 12 : 
-                        int LA54_43 = input.LA(1);
-
-                         
-                        int index54_43 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA54_43>=PACKAGE && LA54_43<=ID)||LA54_43==GLOBAL||(LA54_43>=QUERY && LA54_43<=ATTRIBUTES)||LA54_43==ENABLED||LA54_43==SALIENCE||(LA54_43>=DURATION && LA54_43<=DIALECT)||LA54_43==FROM||(LA54_43>=INIT && LA54_43<=RESULT)||LA54_43==IN||(LA54_43>=THEN && LA54_43<=EVENT)) ) {s = 79;}
-
-                        else if ( (LA54_43==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_43==DOT||LA54_43==COMMA||(LA54_43>=DECLARE && LA54_43<=STRING)||(LA54_43>=DATE_EFFECTIVE && LA54_43<=DATE_EXPIRES)||LA54_43==BOOL||(LA54_43>=INT && LA54_43<=AGENDA_GROUP)||(LA54_43>=LOCK_ON_ACTIVE && LA54_43<=DOUBLE_AMPER)||(LA54_43>=EXISTS && LA54_43<=ACCUMULATE)||(LA54_43>=COLLECT && LA54_43<=TILDE)||(LA54_43>=FLOAT && LA54_43<=RIGHT_SQUARE)||(LA54_43>=EOL && LA54_43<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_43==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_43);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 13 : 
-                        int LA54_9 = input.LA(1);
-
-                         
-                        int index54_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_9==LEFT_PAREN) ) {s = 30;}
-
-                        else if ( (LA54_9==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_9>=PACKAGE && LA54_9<=GLOBAL)||LA54_9==COMMA||(LA54_9>=DECLARE && LA54_9<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 14 : 
-                        int LA54_50 = input.LA(1);
-
-                         
-                        int index54_50 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_50);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 15 : 
-                        int LA54_39 = input.LA(1);
-
-                         
-                        int index54_39 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_39==78) ) {s = 73;}
-
-                        else if ( (LA54_39==DOT) ) {s = 74;}
-
-                        else if ( (LA54_39==LEFT_SQUARE) ) {s = 75;}
-
-                        else if ( (LA54_39==LEFT_PAREN) ) {s = 76;}
-
-                        else if ( (LA54_39==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_39>=PACKAGE && LA54_39<=ID)||LA54_39==GLOBAL||LA54_39==COMMA||(LA54_39>=DECLARE && LA54_39<=NULL)||(LA54_39>=RIGHT_SQUARE && LA54_39<=77)||(LA54_39>=79 && LA54_39<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_39);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 16 : 
-                        int LA54_36 = input.LA(1);
-
-                         
-                        int index54_36 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_36==78) ) {s = 69;}
-
-                        else if ( (LA54_36==DOT) ) {s = 70;}
-
-                        else if ( (LA54_36==LEFT_SQUARE) ) {s = 71;}
-
-                        else if ( (LA54_36==LEFT_PAREN) ) {s = 72;}
-
-                        else if ( (LA54_36==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_36>=PACKAGE && LA54_36<=ID)||LA54_36==GLOBAL||LA54_36==COMMA||(LA54_36>=DECLARE && LA54_36<=NULL)||(LA54_36>=RIGHT_SQUARE && LA54_36<=77)||(LA54_36>=79 && LA54_36<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_36);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 17 : 
-                        int LA54_19 = input.LA(1);
-
-                         
-                        int index54_19 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_19==78) ) {s = 42;}
-
-                        else if ( (LA54_19==DOT) ) {s = 43;}
-
-                        else if ( (LA54_19==LEFT_SQUARE) ) {s = 44;}
-
-                        else if ( (LA54_19==LEFT_PAREN) ) {s = 45;}
-
-                        else if ( (LA54_19==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_19>=PACKAGE && LA54_19<=ID)||LA54_19==GLOBAL||LA54_19==COMMA||(LA54_19>=DECLARE && LA54_19<=NULL)||(LA54_19>=RIGHT_SQUARE && LA54_19<=77)||(LA54_19>=79 && LA54_19<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_19);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 18 : 
-                        int LA54_8 = input.LA(1);
-
-                         
-                        int index54_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_8==LEFT_PAREN) ) {s = 28;}
-
-                        else if ( (LA54_8==ID) ) {s = 29;}
-
-                        else if ( (LA54_8==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_8>=PACKAGE && LA54_8<=FUNCTION)||(LA54_8>=DOT && LA54_8<=GLOBAL)||LA54_8==COMMA||(LA54_8>=DECLARE && LA54_8<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 19 : 
-                        int LA54_52 = input.LA(1);
-
-                         
-                        int index54_52 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_52==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_52==ID) ) {s = 89;}
-
-                        else if ( (LA54_52==LEFT_PAREN) ) {s = 90;}
-
-                        else if ( ((LA54_52>=PACKAGE && LA54_52<=FUNCTION)||(LA54_52>=DOT && LA54_52<=GLOBAL)||LA54_52==COMMA||(LA54_52>=DECLARE && LA54_52<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_52);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 20 : 
-                        int LA54_2 = input.LA(1);
-
-                         
-                        int index54_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_2==AND) ) {s = 4;}
-
-                        else if ( (LA54_2==OR) ) {s = 5;}
-
-                        else if ( (LA54_2==LEFT_PAREN) ) {s = 6;}
-
-                        else if ( (LA54_2==EXISTS) ) {s = 7;}
-
-                        else if ( (LA54_2==NOT) ) {s = 8;}
-
-                        else if ( (LA54_2==EVAL) ) {s = 9;}
-
-                        else if ( (LA54_2==FORALL) ) {s = 10;}
-
-                        else if ( (LA54_2==ID) ) {s = 11;}
-
-                        else if ( ((LA54_2>=PACKAGE && LA54_2<=FUNCTION)||(LA54_2>=DOT && LA54_2<=GLOBAL)||LA54_2==COMMA||(LA54_2>=DECLARE && LA54_2<=LOCK_ON_ACTIVE)||LA54_2==DOUBLE_PIPE||(LA54_2>=DOUBLE_AMPER && LA54_2<=FROM)||(LA54_2>=ACCUMULATE && LA54_2<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_2==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                         
-                        input.seek(index54_2);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 21 : 
-                        int LA54_59 = input.LA(1);
-
-                         
-                        int index54_59 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_59);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 22 : 
-                        int LA54_20 = input.LA(1);
-
-                         
-                        int index54_20 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_20);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 23 : 
-                        int LA54_46 = input.LA(1);
-
-                         
-                        int index54_46 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_46==78) ) {s = 81;}
-
-                        else if ( (LA54_46==DOT) ) {s = 82;}
-
-                        else if ( (LA54_46==LEFT_SQUARE) ) {s = 83;}
-
-                        else if ( (LA54_46==LEFT_PAREN) ) {s = 84;}
-
-                        else if ( (LA54_46==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_46>=PACKAGE && LA54_46<=ID)||LA54_46==GLOBAL||LA54_46==COMMA||(LA54_46>=DECLARE && LA54_46<=NULL)||(LA54_46>=RIGHT_SQUARE && LA54_46<=77)||(LA54_46>=79 && LA54_46<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_46);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 24 : 
-                        int LA54_25 = input.LA(1);
-
-                         
-                        int index54_25 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_25==78) ) {s = 52;}
-
-                        else if ( (LA54_25==DOT) ) {s = 53;}
-
-                        else if ( (LA54_25==LEFT_SQUARE) ) {s = 54;}
-
-                        else if ( (LA54_25==LEFT_PAREN) ) {s = 55;}
-
-                        else if ( (LA54_25==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_25>=PACKAGE && LA54_25<=ID)||LA54_25==GLOBAL||LA54_25==COMMA||(LA54_25>=DECLARE && LA54_25<=NULL)||(LA54_25>=RIGHT_SQUARE && LA54_25<=77)||(LA54_25>=79 && LA54_25<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_25);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 25 : 
-                        int LA54_49 = input.LA(1);
-
-                         
-                        int index54_49 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_49==78) ) {s = 85;}
-
-                        else if ( (LA54_49==DOT) ) {s = 86;}
-
-                        else if ( (LA54_49==LEFT_SQUARE) ) {s = 87;}
-
-                        else if ( (LA54_49==LEFT_PAREN) ) {s = 88;}
-
-                        else if ( (LA54_49==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_49>=PACKAGE && LA54_49<=ID)||LA54_49==GLOBAL||LA54_49==COMMA||(LA54_49>=DECLARE && LA54_49<=NULL)||(LA54_49>=RIGHT_SQUARE && LA54_49<=77)||(LA54_49>=79 && LA54_49<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_49);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 26 : 
-                        int LA54_64 = input.LA(1);
-
-                         
-                        int index54_64 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_64==DOT) ) {s = 101;}
-
-                        else if ( (LA54_64==LEFT_SQUARE) ) {s = 102;}
-
-                        else if ( (LA54_64==LEFT_PAREN) ) {s = 103;}
-
-                        else if ( (LA54_64==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_64>=PACKAGE && LA54_64<=ID)||LA54_64==GLOBAL||LA54_64==COMMA||(LA54_64>=DECLARE && LA54_64<=NULL)||(LA54_64>=RIGHT_SQUARE && LA54_64<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_64);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 27 : 
-                        int LA54_24 = input.LA(1);
-
-                         
-                        int index54_24 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_24==LEFT_PAREN) ) {s = 51;}
-
-                        else if ( (LA54_24==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_24>=PACKAGE && LA54_24<=GLOBAL)||LA54_24==COMMA||(LA54_24>=DECLARE && LA54_24<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_24);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 28 : 
-                        int LA54_55 = input.LA(1);
-
-                         
-                        int index54_55 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_55);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 29 : 
-                        int LA54_22 = input.LA(1);
-
-                         
-                        int index54_22 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_22==LEFT_PAREN) ) {s = 48;}
-
-                        else if ( (LA54_22==ID) ) {s = 49;}
-
-                        else if ( (LA54_22==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_22>=PACKAGE && LA54_22<=FUNCTION)||(LA54_22>=DOT && LA54_22<=GLOBAL)||LA54_22==COMMA||(LA54_22>=DECLARE && LA54_22<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_22);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 30 : 
-                        int LA54_30 = input.LA(1);
-
-                         
-                        int index54_30 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_30);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 31 : 
-                        int LA54_17 = input.LA(1);
-
-                         
-                        int index54_17 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_17==LEFT_PAREN) ) {s = 41;}
-
-                        else if ( (LA54_17==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_17>=PACKAGE && LA54_17<=GLOBAL)||LA54_17==COMMA||(LA54_17>=DECLARE && LA54_17<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_17);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 32 : 
-                        int LA54_51 = input.LA(1);
-
-                         
-                        int index54_51 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_51);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 33 : 
-                        int LA54_16 = input.LA(1);
-
-                         
-                        int index54_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_16==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_16>=PACKAGE && LA54_16<=GLOBAL)||LA54_16==COMMA||(LA54_16>=DECLARE && LA54_16<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_16==LEFT_PAREN) ) {s = 40;}
-
-                         
-                        input.seek(index54_16);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 34 : 
-                        int LA54_65 = input.LA(1);
-
-                         
-                        int index54_65 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_65);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 35 : 
-                        int LA54_4 = input.LA(1);
-
-                         
-                        int index54_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_4==EXISTS) ) {s = 14;}
-
-                        else if ( (LA54_4==NOT) ) {s = 15;}
-
-                        else if ( (LA54_4==EVAL) ) {s = 16;}
-
-                        else if ( (LA54_4==FORALL) ) {s = 17;}
-
-                        else if ( (LA54_4==LEFT_PAREN) ) {s = 18;}
-
-                        else if ( (LA54_4==ID) ) {s = 19;}
-
-                        else if ( (LA54_4==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_4>=PACKAGE && LA54_4<=FUNCTION)||(LA54_4>=DOT && LA54_4<=GLOBAL)||LA54_4==COMMA||(LA54_4>=DECLARE && LA54_4<=FROM)||(LA54_4>=ACCUMULATE && LA54_4<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 36 : 
-                        int LA54_32 = input.LA(1);
-
-                         
-                        int index54_32 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_32==ID) ) {s = 64;}
-
-                        else if ( (LA54_32==LEFT_PAREN) ) {s = 65;}
-
-                        else if ( (LA54_32==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_32>=PACKAGE && LA54_32<=FUNCTION)||(LA54_32>=DOT && LA54_32<=GLOBAL)||LA54_32==COMMA||(LA54_32>=DECLARE && LA54_32<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_32);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 37 : 
-                        int LA54_56 = input.LA(1);
-
-                         
-                        int index54_56 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_56==ID) ) {s = 93;}
-
-                        else if ( (LA54_56==LEFT_PAREN) ) {s = 94;}
-
-                        else if ( (LA54_56==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_56>=PACKAGE && LA54_56<=FUNCTION)||(LA54_56>=DOT && LA54_56<=GLOBAL)||LA54_56==COMMA||(LA54_56>=DECLARE && LA54_56<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_56);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 38 : 
-                        int LA54_60 = input.LA(1);
-
-                         
-                        int index54_60 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_60==ID) ) {s = 97;}
-
-                        else if ( (LA54_60==LEFT_PAREN) ) {s = 98;}
-
-                        else if ( (LA54_60==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_60>=PACKAGE && LA54_60<=FUNCTION)||(LA54_60>=DOT && LA54_60<=GLOBAL)||LA54_60==COMMA||(LA54_60>=DECLARE && LA54_60<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_60);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 39 : 
-                        int LA54_5 = input.LA(1);
-
-                         
-                        int index54_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_5==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA54_5==EXISTS) ) {s = 21;}
-
-                        else if ( (LA54_5==NOT) ) {s = 22;}
-
-                        else if ( (LA54_5==EVAL) ) {s = 23;}
-
-                        else if ( (LA54_5==FORALL) ) {s = 24;}
-
-                        else if ( (LA54_5==ID) ) {s = 25;}
-
-                        else if ( (LA54_5==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_5>=PACKAGE && LA54_5<=FUNCTION)||(LA54_5>=DOT && LA54_5<=GLOBAL)||LA54_5==COMMA||(LA54_5>=DECLARE && LA54_5<=FROM)||(LA54_5>=ACCUMULATE && LA54_5<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 40 : 
-                        int LA54_14 = input.LA(1);
-
-                         
-                        int index54_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_14==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_14==ID) ) {s = 36;}
-
-                        else if ( (LA54_14==LEFT_PAREN) ) {s = 37;}
-
-                        else if ( ((LA54_14>=PACKAGE && LA54_14<=FUNCTION)||(LA54_14>=DOT && LA54_14<=GLOBAL)||LA54_14==COMMA||(LA54_14>=DECLARE && LA54_14<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 41 : 
-                        int LA54_48 = input.LA(1);
-
-                         
-                        int index54_48 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_48);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 42 : 
-                        int LA54_28 = input.LA(1);
-
-                         
-                        int index54_28 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_28);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 43 : 
-                        int LA54_0 = input.LA(1);
-
-                         
-                        int index54_0 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_0==LEFT_SQUARE) && (synpred9())) {s = 1;}
-
-                        else if ( (LA54_0==LEFT_PAREN) ) {s = 2;}
-
-                        else if ( ((LA54_0>=ID && LA54_0<=DOT)||(LA54_0>=COMMA && LA54_0<=RIGHT_PAREN)||LA54_0==END||(LA54_0>=OR && LA54_0<=DOUBLE_AMPER)||(LA54_0>=EXISTS && LA54_0<=FORALL)||LA54_0==INIT||LA54_0==THEN||LA54_0==76) ) {s = 3;}
-
-                         
-                        input.seek(index54_0);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 44 : 
-                        int LA54_21 = input.LA(1);
-
-                         
-                        int index54_21 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_21==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_21==ID) ) {s = 46;}
-
-                        else if ( (LA54_21==LEFT_PAREN) ) {s = 47;}
-
-                        else if ( ((LA54_21>=PACKAGE && LA54_21<=FUNCTION)||(LA54_21>=DOT && LA54_21<=GLOBAL)||LA54_21==COMMA||(LA54_21>=DECLARE && LA54_21<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_21);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 45 : 
-                        int LA54_53 = input.LA(1);
-
-                         
-                        int index54_53 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA54_53>=PACKAGE && LA54_53<=ID)||LA54_53==GLOBAL||(LA54_53>=QUERY && LA54_53<=ATTRIBUTES)||LA54_53==ENABLED||LA54_53==SALIENCE||(LA54_53>=DURATION && LA54_53<=DIALECT)||LA54_53==FROM||(LA54_53>=INIT && LA54_53<=RESULT)||LA54_53==IN||(LA54_53>=THEN && LA54_53<=EVENT)) ) {s = 91;}
-
-                        else if ( (LA54_53==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_53==DOT||LA54_53==COMMA||(LA54_53>=DECLARE && LA54_53<=STRING)||(LA54_53>=DATE_EFFECTIVE && LA54_53<=DATE_EXPIRES)||LA54_53==BOOL||(LA54_53>=INT && LA54_53<=AGENDA_GROUP)||(LA54_53>=LOCK_ON_ACTIVE && LA54_53<=DOUBLE_AMPER)||(LA54_53>=EXISTS && LA54_53<=ACCUMULATE)||(LA54_53>=COLLECT && LA54_53<=TILDE)||(LA54_53>=FLOAT && LA54_53<=RIGHT_SQUARE)||(LA54_53>=EOL && LA54_53<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_53==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_53);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 46 : 
-                        int LA54_47 = input.LA(1);
-
-                         
-                        int index54_47 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_47);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 47 : 
-                        int LA54_54 = input.LA(1);
-
-                         
-                        int index54_54 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_54==RIGHT_SQUARE) ) {s = 92;}
-
-                        else if ( (LA54_54==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_54>=PACKAGE && LA54_54<=GLOBAL)||LA54_54==COMMA||(LA54_54>=DECLARE && LA54_54<=LEFT_SQUARE)||(LA54_54>=THEN && LA54_54<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_54==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_54);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 48 : 
-                        int LA54_41 = input.LA(1);
-
-                         
-                        int index54_41 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_41);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 49 : 
-                        int LA54_38 = input.LA(1);
-
-                         
-                        int index54_38 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_38);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 50 : 
-                        int LA54_23 = input.LA(1);
-
-                         
-                        int index54_23 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_23==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_23>=PACKAGE && LA54_23<=GLOBAL)||LA54_23==COMMA||(LA54_23>=DECLARE && LA54_23<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_23==LEFT_PAREN) ) {s = 50;}
-
-                         
-                        input.seek(index54_23);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 51 : 
-                        int LA54_42 = input.LA(1);
-
-                         
-                        int index54_42 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_42==ID) ) {s = 77;}
-
-                        else if ( (LA54_42==LEFT_PAREN) ) {s = 78;}
-
-                        else if ( (LA54_42==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_42>=PACKAGE && LA54_42<=FUNCTION)||(LA54_42>=DOT && LA54_42<=GLOBAL)||LA54_42==COMMA||(LA54_42>=DECLARE && LA54_42<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_42);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 52 : 
-                        int LA54_66 = input.LA(1);
-
-                         
-                        int index54_66 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_66==LEFT_SQUARE) ) {s = 34;}
-
-                        else if ( (LA54_66==LEFT_PAREN) ) {s = 35;}
-
-                        else if ( (LA54_66==DOT) ) {s = 33;}
-
-                        else if ( (LA54_66==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_66>=PACKAGE && LA54_66<=ID)||LA54_66==GLOBAL||LA54_66==COMMA||(LA54_66>=DECLARE && LA54_66<=NULL)||(LA54_66>=RIGHT_SQUARE && LA54_66<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_66);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 53 : 
-                        int LA54_26 = input.LA(1);
-
-                         
-                        int index54_26 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_26);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 54 : 
-                        int LA54_15 = input.LA(1);
-
-                         
-                        int index54_15 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_15==LEFT_PAREN) ) {s = 38;}
-
-                        else if ( (LA54_15==ID) ) {s = 39;}
-
-                        else if ( (LA54_15==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_15>=PACKAGE && LA54_15<=FUNCTION)||(LA54_15>=DOT && LA54_15<=GLOBAL)||LA54_15==COMMA||(LA54_15>=DECLARE && LA54_15<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_15);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 55 : 
-                        int LA54_37 = input.LA(1);
-
-                         
-                        int index54_37 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_37);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 56 : 
-                        int LA54_6 = input.LA(1);
-
-                         
-                        int index54_6 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 13;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_6);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 57 : 
-                        int LA54_44 = input.LA(1);
-
-                         
-                        int index54_44 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_44==RIGHT_SQUARE) ) {s = 80;}
-
-                        else if ( (LA54_44==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_44>=PACKAGE && LA54_44<=GLOBAL)||LA54_44==COMMA||(LA54_44>=DECLARE && LA54_44<=LEFT_SQUARE)||(LA54_44>=THEN && LA54_44<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_44==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_44);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 58 : 
-                        int LA54_33 = input.LA(1);
-
-                         
-                        int index54_33 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA54_33>=PACKAGE && LA54_33<=ID)||LA54_33==GLOBAL||(LA54_33>=QUERY && LA54_33<=ATTRIBUTES)||LA54_33==ENABLED||LA54_33==SALIENCE||(LA54_33>=DURATION && LA54_33<=DIALECT)||LA54_33==FROM||(LA54_33>=INIT && LA54_33<=RESULT)||LA54_33==IN||(LA54_33>=THEN && LA54_33<=EVENT)) ) {s = 66;}
-
-                        else if ( (LA54_33==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_33==DOT||LA54_33==COMMA||(LA54_33>=DECLARE && LA54_33<=STRING)||(LA54_33>=DATE_EFFECTIVE && LA54_33<=DATE_EXPIRES)||LA54_33==BOOL||(LA54_33>=INT && LA54_33<=AGENDA_GROUP)||(LA54_33>=LOCK_ON_ACTIVE && LA54_33<=DOUBLE_AMPER)||(LA54_33>=EXISTS && LA54_33<=ACCUMULATE)||(LA54_33>=COLLECT && LA54_33<=TILDE)||(LA54_33>=FLOAT && LA54_33<=RIGHT_SQUARE)||(LA54_33>=EOL && LA54_33<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_33==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_33);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 59 : 
-                        int LA54_57 = input.LA(1);
-
-                         
-                        int index54_57 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA54_57>=PACKAGE && LA54_57<=ID)||LA54_57==GLOBAL||(LA54_57>=QUERY && LA54_57<=ATTRIBUTES)||LA54_57==ENABLED||LA54_57==SALIENCE||(LA54_57>=DURATION && LA54_57<=DIALECT)||LA54_57==FROM||(LA54_57>=INIT && LA54_57<=RESULT)||LA54_57==IN||(LA54_57>=THEN && LA54_57<=EVENT)) ) {s = 95;}
-
-                        else if ( (LA54_57==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( (LA54_57==DOT||LA54_57==COMMA||(LA54_57>=DECLARE && LA54_57<=STRING)||(LA54_57>=DATE_EFFECTIVE && LA54_57<=DATE_EXPIRES)||LA54_57==BOOL||(LA54_57>=INT && LA54_57<=AGENDA_GROUP)||(LA54_57>=LOCK_ON_ACTIVE && LA54_57<=DOUBLE_AMPER)||(LA54_57>=EXISTS && LA54_57<=ACCUMULATE)||(LA54_57>=COLLECT && LA54_57<=TILDE)||(LA54_57>=FLOAT && LA54_57<=RIGHT_SQUARE)||(LA54_57>=EOL && LA54_57<=85)) && (synpred10())) {s = 12;}
-
-                        else if ( (LA54_57==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                         
-                        input.seek(index54_57);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 60 : 
-                        int LA54_61 = input.LA(1);
-
-                         
-                        int index54_61 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_61==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_61>=PACKAGE && LA54_61<=ID)||LA54_61==GLOBAL||(LA54_61>=QUERY && LA54_61<=ATTRIBUTES)||LA54_61==ENABLED||LA54_61==SALIENCE||(LA54_61>=DURATION && LA54_61<=DIALECT)||LA54_61==FROM||(LA54_61>=INIT && LA54_61<=RESULT)||LA54_61==IN||(LA54_61>=THEN && LA54_61<=EVENT)) ) {s = 99;}
-
-                        else if ( (LA54_61==LEFT_PAREN) && (synpred10())) {s = 67;}
-
-                        else if ( (LA54_61==DOT||LA54_61==COMMA||(LA54_61>=DECLARE && LA54_61<=STRING)||(LA54_61>=DATE_EFFECTIVE && LA54_61<=DATE_EXPIRES)||LA54_61==BOOL||(LA54_61>=INT && LA54_61<=AGENDA_GROUP)||(LA54_61>=LOCK_ON_ACTIVE && LA54_61<=DOUBLE_AMPER)||(LA54_61>=EXISTS && LA54_61<=ACCUMULATE)||(LA54_61>=COLLECT && LA54_61<=TILDE)||(LA54_61>=FLOAT && LA54_61<=RIGHT_SQUARE)||(LA54_61>=EOL && LA54_61<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_61);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 61 : 
-                        int LA54_45 = input.LA(1);
-
-                         
-                        int index54_45 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 67;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index54_45);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 62 : 
-                        int LA54_10 = input.LA(1);
-
-                         
-                        int index54_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA54_10==LEFT_PAREN) ) {s = 31;}
-
-                        else if ( (LA54_10==RIGHT_PAREN) && (synpred10())) {s = 13;}
-
-                        else if ( ((LA54_10>=PACKAGE && LA54_10<=GLOBAL)||LA54_10==COMMA||(LA54_10>=DECLARE && LA54_10<=85)) && (synpred10())) {s = 12;}
-
-                         
-                        input.seek(index54_10);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 54, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
- 
-
-    public static final BitSet FOLLOW_76_in_opt_semicolon39 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_prolog_in_compilation_unit57 = new BitSet(new long[]{0x0000001FEB9A2260L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit62 = new BitSet(new long[]{0x0000001FEB9A2260L});
-    public static final BitSet FOLLOW_EOF_in_compilation_unit67 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_package_statement_in_prolog96 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_attribute_in_statement121 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_statement128 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_statement134 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_statement140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_statement146 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_in_statement160 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_in_statement169 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_in_statement181 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_type_declaration_in_statement196 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_PACKAGE_in_package_statement222 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_dotted_name_in_package_statement226 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_package_statement228 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_import_statement259 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_import_name_in_import_statement282 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_import_statement285 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_function_import_statement309 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_FUNCTION_in_function_import_statement311 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement334 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_function_import_statement337 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_name362 = new BitSet(new long[]{0x0000000000000102L,0x0000000000002000L});
-    public static final BitSet FOLLOW_DOT_in_import_name374 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_import_name378 = new BitSet(new long[]{0x0000000000000102L,0x0000000000002000L});
-    public static final BitSet FOLLOW_77_in_import_name402 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_GLOBAL_in_global436 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_dotted_name_in_global447 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_global458 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_global460 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_function485 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_dotted_name_in_function489 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_function494 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_function503 = new BitSet(new long[]{0x0807820C0A7E12F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_dotted_name_in_function512 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_argument_in_function517 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_COMMA_in_function531 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_dotted_name_in_function535 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_argument_in_function540 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_function564 = new BitSet(new long[]{0x0000000000004000L});
-    public static final BitSet FOLLOW_curly_chunk_in_function570 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_argument597 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument603 = new BitSet(new long[]{0x8000000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument605 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_DECLARE_in_type_declaration645 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_type_declaration649 = new BitSet(new long[]{0x0000000000004000L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_type_declaration694 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_type_decl_attribute_in_type_declaration720 = new BitSet(new long[]{0x0000000000008800L});
-    public static final BitSet FOLLOW_COMMA_in_type_declaration725 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_type_decl_attribute_in_type_declaration727 = new BitSet(new long[]{0x0000000000008800L});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_type_declaration749 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_type_decl_attribute785 = new BitSet(new long[]{0x0807820C0A7F02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_STRING_in_type_decl_attribute808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_type_decl_attribute849 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUERY_in_query922 = new BitSet(new long[]{0x0000000000010080L});
-    public static final BitSet FOLLOW_name_in_query926 = new BitSet(new long[]{0x00003C0000040480L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_query936 = new BitSet(new long[]{0x0000000000001080L});
-    public static final BitSet FOLLOW_qualified_id_in_query971 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_ID_in_query976 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_COMMA_in_query997 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_qualified_id_in_query1001 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_ID_in_query1006 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_query1056 = new BitSet(new long[]{0x00003C0000040480L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query1085 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_END_in_query1090 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_query1092 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TEMPLATE_in_template1120 = new BitSet(new long[]{0x0000000000010080L});
-    public static final BitSet FOLLOW_name_in_template1124 = new BitSet(new long[]{0x0000000000000080L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_template1126 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_template_slot_in_template1141 = new BitSet(new long[]{0x0000000000040080L});
-    public static final BitSet FOLLOW_END_in_template1156 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_template1158 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_qualified_id_in_template_slot1204 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_template_slot1220 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_template_slot1222 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_in_rule1253 = new BitSet(new long[]{0x0000000000010080L});
-    public static final BitSet FOLLOW_name_in_rule1257 = new BitSet(new long[]{0x0000001FEBE00000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule1266 = new BitSet(new long[]{0x0000000000200000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_WHEN_in_rule1278 = new BitSet(new long[]{0x00003C0000000480L,0x0000000000004001L});
-    public static final BitSet FOLLOW_78_in_rule1280 = new BitSet(new long[]{0x00003C0000000480L,0x0000000000000001L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_rule1291 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_rhs_chunk_in_rule1301 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_rule_attributes1321 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
-    public static final BitSet FOLLOW_78_in_rule_attributes1323 = new BitSet(new long[]{0x0000001FEB800000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1331 = new BitSet(new long[]{0x0000001FEB800802L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes1338 = new BitSet(new long[]{0x0000001FEB800000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1343 = new BitSet(new long[]{0x0000001FEB800802L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1380 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1388 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1397 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1406 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1415 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1423 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1431 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1439 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1447 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1455 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1463 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1470 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DATE_EFFECTIVE_in_date_effective1496 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1498 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DATE_EXPIRES_in_date_expires1527 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1529 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENABLED_in_enabled1558 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1560 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SALIENCE_in_salience1593 = new BitSet(new long[]{0x0000000010000400L});
-    public static final BitSet FOLLOW_INT_in_salience1604 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_salience1619 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NO_LOOP_in_no_loop1649 = new BitSet(new long[]{0x0000000004000002L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1662 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AUTO_FOCUS_in_auto_focus1697 = new BitSet(new long[]{0x0000000004000002L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1710 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACTIVATION_GROUP_in_activation_group1746 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1748 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1776 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1778 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AGENDA_GROUP_in_agenda_group1806 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DURATION_in_duration1836 = new BitSet(new long[]{0x0000000010000000L});
-    public static final BitSet FOLLOW_INT_in_duration1838 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DIALECT_in_dialect1866 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_STRING_in_dialect1868 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1900 = new BitSet(new long[]{0x0000000004000002L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active1913 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1952 = new BitSet(new long[]{0x00003C0000000482L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1989 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or2014 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_OR_in_lhs_or2016 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2029 = new BitSet(new long[]{0x00003C0000001480L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or2040 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2058 = new BitSet(new long[]{0x0000006000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_or2066 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2082 = new BitSet(new long[]{0x0000006000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and2113 = new BitSet(new long[]{0x0000008000000000L});
-    public static final BitSet FOLLOW_AND_in_lhs_and2115 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2127 = new BitSet(new long[]{0x00003C0000001480L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and2137 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2155 = new BitSet(new long[]{0x0000018000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_and2163 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2179 = new BitSet(new long[]{0x0000018000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2224 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2242 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2261 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2280 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2297 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2301 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2303 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2314 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary2326 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2353 = new BitSet(new long[]{0x0000020000000002L});
-    public static final BitSet FOLLOW_FROM_in_pattern_source2404 = new BitSet(new long[]{0x0010000000000000L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2408 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FROM_in_pattern_source2428 = new BitSet(new long[]{0x080FC20C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2486 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source2509 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_statement_in_pattern_source2546 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_lhs_exist2589 = new BitSet(new long[]{0x0000000000000480L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2609 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2613 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2643 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2693 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_lhs_not2745 = new BitSet(new long[]{0x0000000000000480L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2758 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2762 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2793 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2830 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_lhs_eval2876 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2887 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_lhs_forall2913 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2915 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2919 = new BitSet(new long[]{0x0000000000001080L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2934 = new BitSet(new long[]{0x0000000000001080L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2950 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2983 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern2991 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_from_statement3018 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement3055 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement3065 = new BitSet(new long[]{0x00003C0000000480L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement3069 = new BitSet(new long[]{0x0000800000000880L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement3071 = new BitSet(new long[]{0x0000800000000080L});
-    public static final BitSet FOLLOW_INIT_in_accumulate_statement3089 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement3102 = new BitSet(new long[]{0x0001000000000800L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement3104 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_ACTION_in_accumulate_statement3115 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement3119 = new BitSet(new long[]{0x0006000000000800L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement3121 = new BitSet(new long[]{0x0006000000000000L});
-    public static final BitSet FOLLOW_REVERSE_in_accumulate_statement3134 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement3138 = new BitSet(new long[]{0x0004000000000800L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement3140 = new BitSet(new long[]{0x0004000000000000L});
-    public static final BitSet FOLLOW_RESULT_in_accumulate_statement3157 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement3161 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_ID_in_accumulate_statement3187 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement3191 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement3208 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_from_source3239 = new BitSet(new long[]{0x0000000000000502L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source3267 = new BitSet(new long[]{0x0000000000000102L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source3280 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain3311 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_expression_chain3315 = new BitSet(new long[]{0x4000000000000502L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain3346 = new BitSet(new long[]{0x0000000000000102L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain3379 = new BitSet(new long[]{0x0000000000000102L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain3394 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_collect_statement3445 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement3455 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement3459 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement3461 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENTRY_POINT_in_entrypoint_statement3498 = new BitSet(new long[]{0x0000000000010080L});
-    public static final BitSet FOLLOW_name_in_entrypoint_statement3510 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding3542 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
-    public static final BitSet FOLLOW_78_in_fact_binding3544 = new BitSet(new long[]{0x0000000000000480L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3558 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding3574 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3578 = new BitSet(new long[]{0x0000006000001000L});
-    public static final BitSet FOLLOW_set_in_fact_binding3591 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3603 = new BitSet(new long[]{0x0000006000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding3621 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_qualified_id_in_fact3676 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3686 = new BitSet(new long[]{0x0807920C0A7E16F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_constraints_in_fact3698 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3705 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EOF_in_fact3714 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints3732 = new BitSet(new long[]{0x0000000000000802L});
-    public static final BitSet FOLLOW_COMMA_in_constraints3739 = new BitSet(new long[]{0x0807920C0A7E06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_constraint_in_constraints3748 = new BitSet(new long[]{0x0000000000000802L});
-    public static final BitSet FOLLOW_or_constr_in_constraint3781 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3804 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3812 = new BitSet(new long[]{0x0807920C0A7E06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3821 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3853 = new BitSet(new long[]{0x0000010000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3861 = new BitSet(new long[]{0x0807920C0A7E06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3870 = new BitSet(new long[]{0x0000010000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr3898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3906 = new BitSet(new long[]{0x0807920C0A7E06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr3908 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3911 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_unary_constr3917 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_predicate_in_unary_constr3919 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_field_constraint3958 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
-    public static final BitSet FOLLOW_78_in_field_constraint3960 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3979 = new BitSet(new long[]{0x0FE0080000000402L,0x00000000003F8000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3993 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_79_in_field_constraint4008 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_predicate_in_field_constraint4010 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint4036 = new BitSet(new long[]{0x0FE0080000000400L,0x00000000003F0000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint4045 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective4092 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective4116 = new BitSet(new long[]{0x0FE0080000000400L,0x00000000003F0000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective4127 = new BitSet(new long[]{0x0000004000000002L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective4159 = new BitSet(new long[]{0x0000010000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective4179 = new BitSet(new long[]{0x0FE0080000000400L,0x00000000003F0000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective4190 = new BitSet(new long[]{0x0000010000000002L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression4227 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression4234 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression4242 = new BitSet(new long[]{0x0FE0080000000400L,0x00000000003F0000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression4251 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression4256 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_80_in_simple_operator4287 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_81_in_simple_operator4295 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_82_in_simple_operator4303 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_83_in_simple_operator4311 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_84_in_simple_operator4319 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_85_in_simple_operator4327 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_CONTAINS_in_simple_operator4355 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator4383 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_CONTAINS_in_simple_operator4387 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator4415 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_MATCHES_in_simple_operator4443 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_SOUNDSLIKE_in_simple_operator4471 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator4499 = new BitSet(new long[]{0x0080000000000000L});
-    public static final BitSet FOLLOW_MATCHES_in_simple_operator4503 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator4531 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator4559 = new BitSet(new long[]{0x0200000000000000L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator4563 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_TILDE_in_simple_operator4569 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_ID_in_simple_operator4573 = new BitSet(new long[]{0x7807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator4577 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator4586 = new BitSet(new long[]{0x0400000000000000L});
-    public static final BitSet FOLLOW_TILDE_in_simple_operator4588 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_ID_in_simple_operator4592 = new BitSet(new long[]{0x7807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator4596 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator4611 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IN_in_compound_operator4641 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_NOT_in_compound_operator4653 = new BitSet(new long[]{0x0800000000000000L});
-    public static final BitSet FOLLOW_IN_in_compound_operator4655 = new BitSet(new long[]{0x0000000000000400L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator4670 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator4674 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator4681 = new BitSet(new long[]{0x3807820C1E7F06F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator4685 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator4694 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value4728 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value4748 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value4762 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint4805 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint4816 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint4829 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint4840 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_literal_constraint4852 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate4890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk4908 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk4912 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk4921 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk4926 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk4940 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk4944 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk4953 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk4958 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk4971 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk4975 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_square_chunk_in_square_chunk4984 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk4989 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_qualified_id5018 = new BitSet(new long[]{0x4000000000000102L});
-    public static final BitSet FOLLOW_DOT_in_qualified_id5024 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_qualified_id5026 = new BitSet(new long[]{0x4000000000000102L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_qualified_id5035 = new BitSet(new long[]{0x8000000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_qualified_id5037 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name5071 = new BitSet(new long[]{0x4000000000000102L});
-    public static final BitSet FOLLOW_DOT_in_dotted_name5077 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name5081 = new BitSet(new long[]{0x4000000000000102L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name5090 = new BitSet(new long[]{0x8000000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name5092 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path5126 = new BitSet(new long[]{0x0000000000000102L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path5132 = new BitSet(new long[]{0x0807820C0A7E02F0L,0x0000000000000003L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path5136 = new BitSet(new long[]{0x0000000000000102L});
-    public static final BitSet FOLLOW_identifier_in_accessor_element5174 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element5181 = new BitSet(new long[]{0x4000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk5202 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk5210 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000003FFFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk5234 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
-    public static final BitSet FOLLOW_opt_semicolon_in_rhs_chunk5236 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_name5270 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_name5278 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_set_in_identifier0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_synpred12216 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_synpred22234 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_synpred32253 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_synpred42272 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred52291 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FROM_in_synpred62397 = new BitSet(new long[]{0x0010000000000000L});
-    public static final BitSet FOLLOW_ENTRY_POINT_in_synpred62399 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred93338 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred103371 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred114116 = new BitSet(new long[]{0x0FE0080000000400L,0x00000000003F0000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_synpred114127 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred124179 = new BitSet(new long[]{0x0FE0080000000400L,0x00000000003F0000L});
-    public static final BitSet FOLLOW_constraint_expression_in_synpred124190 = new BitSet(new long[]{0x0000000000000002L});
-
-}
\ No newline at end of file

Copied: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java (from rev 19914, 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/DRLParser.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-05-19 17:40:22 UTC (rev 20043)
@@ -0,0 +1,20661 @@
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-05-19 14:24:14
+
+	package org.drools.lang;
+	
+	import java.util.Iterator;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.antlr.runtime.tree.*;
+
+public class DRLParser extends Parser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_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=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=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 DRLParser(TokenStream input) {
+            super(input);
+            ruleMemo = new HashMap[139+1];
+         }
+        
+    protected TreeAdaptor adaptor = new CommonTreeAdaptor();
+
+    public void setTreeAdaptor(TreeAdaptor adaptor) {
+        this.adaptor = adaptor;
+    }
+    public TreeAdaptor getTreeAdaptor() {
+        return adaptor;
+    }
+
+    public String[] getTokenNames() { return tokenNames; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
+
+
+    	private List errors = new ArrayList();
+    	private String source = "unknown";
+    	private int lineOffset = 0;
+
+    	private boolean validateLT(int LTNumber, String text){
+    		if (null == input) return false;
+    		if (null == input.LT(LTNumber)) return false;
+    		if (null == input.LT(LTNumber).getText()) return false;
+
+    		String text2Validate = input.LT(LTNumber).getText();
+    		return text2Validate.equalsIgnoreCase(text);
+    	}
+
+    	private boolean validateIdentifierKey(String text){
+    		return validateLT(1, text);
+    	}
+    	
+        void checkTrailingSemicolon(String text, int line) {
+        	if (text.trim().endsWith( ";" ) ) {
+        		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
+        	}
+        }
+
+        private String safeSubstring( String text, int start, int end ) {
+            return text.substring( Math.min( start, text.length() ), Math.min( Math.max( start, end ), text.length() ) );
+        }
+    	
+    	private int offset(int line) {
+    		return line + lineOffset;
+    	}
+
+    	/**
+    	 * This will set the offset to record when reparsing. Normally is zero of course 
+    	 */
+    	public void setLineOffset(int i) {
+    	 	this.lineOffset = i;
+    	}
+    	
+    	public void reportError(RecognitionException ex) {
+    	        // if we've already reported an error and have not matched a token
+                    // yet successfully, don't report any errors.
+                    if ( errorRecovery ) {
+                            return;
+                    }
+                    errorRecovery = true;
+
+    		ex.line = offset(ex.line); //add the offset if there is one
+    		errors.add( ex ); 
+    	}
+         	
+     	/** return the raw RecognitionException errors */
+     	public List getErrors() {
+     		return errors;
+     	}
+     	
+     	/** Return a list of pretty strings summarising the errors */
+     	public List getErrorMessages() {
+     		List messages = new ArrayList();
+    	for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
+     	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
+     	     	}
+     	     	return messages;
+     	}
+     	
+     	/** return true if any parser errors were accumulated */
+     	public boolean hasErrors() {
+    	return ! errors.isEmpty();
+     	}
+     	
+     	/** This will take a RecognitionException, and create a sensible error message out of it */
+     	public String createErrorMessage(RecognitionException e)
+        {
+    	StringBuffer message = new StringBuffer();		
+                message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
+                if ( e instanceof MismatchedTokenException ) {
+                        MismatchedTokenException mte = (MismatchedTokenException)e;
+                        if( mte.expecting >=0 && mte.expecting < tokenNames.length ) {
+                            message.append("mismatched token: "+
+                                                           e.token+
+                                                           "; expecting type "+
+                                                           tokenNames[mte.expecting]);
+                        } else {
+                            message.append("mismatched token: "+
+                                                           e.token+
+                                                           ";");
+                        }
+                }
+                else if ( e instanceof MismatchedTreeNodeException ) {
+                        MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
+                        if( mtne.expecting >=0 && mtne.expecting < tokenNames.length ) {
+                            message.append("mismatched tree node: "+
+                                                           mtne.toString() +
+                                                           "; expecting type "+
+                                                           tokenNames[mtne.expecting]);
+                        } else {
+                            message.append("mismatched tree node: "+
+                                                           mtne.toString() +
+                                                           ";");
+                        }
+                }
+                else if ( e instanceof NoViableAltException ) {
+                        NoViableAltException nvae = (NoViableAltException)e;
+    		message.append( "Unexpected token '" + e.token.getText() + "'" );
+                        /*
+                        message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
+                                                           " state "+nvae.stateNumber+
+                                                           " (decision="+nvae.decisionNumber+
+                                                           ") no viable alt; token="+
+                                                           e.token);
+                                                           */
+                }
+                else if ( e instanceof EarlyExitException ) {
+                        EarlyExitException eee = (EarlyExitException)e;
+                        message.append("required (...)+ loop (decision="+
+                                                           eee.decisionNumber+
+                                                           ") did not match anything; token="+
+                                                           e.token);
+                }
+                else if ( e instanceof MismatchedSetException ) {
+                        MismatchedSetException mse = (MismatchedSetException)e;
+                        message.append("mismatched token '"+
+                                                           e.token+
+                                                           "' expecting set "+mse.expecting);
+                }
+                else if ( e instanceof MismatchedNotSetException ) {
+                        MismatchedNotSetException mse = (MismatchedNotSetException)e;
+                        message.append("mismatched token '"+
+                                                           e.token+
+                                                           "' expecting set "+mse.expecting);
+                }
+                else if ( e instanceof FailedPredicateException ) {
+                        FailedPredicateException fpe = (FailedPredicateException)e;
+                        message.append("rule "+fpe.ruleName+" failed predicate: {"+
+                                                           fpe.predicateText+"}?");
+                } else if (e instanceof GeneralParseException) {
+    		message.append(" " + e.getMessage());
+    	}
+               	return message.toString();
+        }
+
+
+    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/DRL.g:270:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    public final compilation_unit_return compilation_unit() throws RecognitionException {
+        compilation_unit_return retval = new compilation_unit_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token EOF3=null;
+        package_statement_return package_statement1 = null;
+
+        statement_return statement2 = null;
+
+
+        Object EOF3_tree=null;
+        RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
+        RewriteRuleSubtreeStream stream_package_statement=new RewriteRuleSubtreeStream(adaptor,"rule package_statement");
+        RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: ( package_statement )? ( statement )* EOF
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: ( package_statement )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==ID) && (((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("duration"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("package"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date")!
  && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("import"))||(validateIdentifierKey("function"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
+                int LA1_1 = input.LA(2);
+
+                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("query"))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("package"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {
+                    int LA1_4 = input.LA(3);
+
+                    if ( ((validateIdentifierKey("package"))) ) {
+                        alt1=1;
+                    }
+                }
+            }
+            switch (alt1) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: package_statement
+                    {
+                    pushFollow(FOLLOW_package_statement_in_compilation_unit396);
+                    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/DRL.g:272:3: ( statement )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( (LA2_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("import"))||(validateIdentifierKey("duration"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||(validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rulef!
 low") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:3: statement
+            	    {
+            	    pushFollow(FOLLOW_statement_in_compilation_unit401);
+            	    statement2=statement();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_statement.add(statement2.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+            EOF3=(Token)input.LT(1);
+            match(input,EOF,FOLLOW_EOF_in_compilation_unit406); if (failed) return retval;
+            if ( backtracking==0 ) stream_EOF.add(EOF3);
+
+
+            // 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();
+            // 274:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_COMPILATION_UNIT, "VT_COMPILATION_UNIT"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:28: ( package_statement )?
+                if ( stream_package_statement.hasNext() ) {
+                    adaptor.addChild(root_1, stream_package_statement.next());
+
+                }
+                stream_package_statement.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:47: ( statement )*
+                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 e ) {
+
+            		reportError( e );
+            	
+        }
+        catch ( RewriteEmptyStreamException e ) {
+
+            	
+        }
+        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/DRL.g:282: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 SEMICOLON6=null;
+        package_key_return package_key4 = null;
+
+        package_id_return package_id5 = null;
+
+
+        Object SEMICOLON6_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/DRL.g:283:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:4: package_key package_id ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_package_key_in_package_statement446);
+            package_key4=package_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_package_key.add(package_key4.getTree());
+            pushFollow(FOLLOW_package_id_in_package_statement448);
+            package_id5=package_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_package_id.add(package_id5.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:27: ( SEMICOLON )?
+            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/DRL.g:283:27: SEMICOLON
+                    {
+                    SEMICOLON6=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement450); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON6);
+
+
+                    }
+                    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();
+            // 284:3: -> ^( package_key package_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:6: ^( package_key package_id )
+                {
+                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/DRL.g:287: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 ID7=null;
+        Token DOT8=null;
+        Token ID9=null;
+
+        Object ID7_tree=null;
+        Object DOT8_tree=null;
+        Object ID9_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/DRL.g:288:2: ( ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:4: ID ( DOT ID )*
+            {
+            ID7=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_package_id472); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID7);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:7: ( DOT ID )*
+            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/DRL.g:288:9: DOT ID
+            	    {
+            	    DOT8=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_package_id476); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT8);
+
+            	    ID9=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_package_id478); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID9);
+
+
+            	    }
+            	    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();
+            // 289:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:6: ^( VT_PACKAGE_ID ( ID )+ )
+                {
+                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/DRL.g:292: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_attribute10 = null;
+
+        function_import_statement_return function_import_statement11 = null;
+
+        import_statement_return import_statement12 = null;
+
+        global_return global13 = null;
+
+        function_return function14 = null;
+
+        template_return template15 = null;
+
+        rule_return rule16 = null;
+
+        query_return query17 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
+            int alt5=8;
+            alt5 = dfa5.predict(input);
+            switch (alt5) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:4: rule_attribute
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_rule_attribute_in_statement503);
+                    rule_attribute10=rule_attribute();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule_attribute10.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294: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_statement510);
+                    function_import_statement11=function_import_statement();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, function_import_statement11.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:4: import_statement
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_import_statement_in_statement516);
+                    import_statement12=import_statement();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, import_statement12.getTree());
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: global
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_global_in_statement522);
+                    global13=global();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, global13.getTree());
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:4: function
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_function_in_statement528);
+                    function14=function();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, function14.getTree());
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:4: template
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_template_in_statement533);
+                    template15=template();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, template15.getTree());
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:4: rule
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_rule_in_statement538);
+                    rule16=rule();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule16.getTree());
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:4: query
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_query_in_statement543);
+                    query17=query();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, query17.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/DRL.g:303: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 SEMICOLON20=null;
+        import_key_return import_key18 = null;
+
+        import_name_return import_name19 = null;
+
+
+        Object SEMICOLON20_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/DRL.g:304:2: ( import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:4: import_key import_name ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_import_key_in_import_statement554);
+            import_key18=import_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_key.add(import_key18.getTree());
+            pushFollow(FOLLOW_import_name_in_import_statement556);
+            import_name19=import_name();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_name.add(import_name19.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:27: ( SEMICOLON )?
+            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/DRL.g:304:27: SEMICOLON
+                    {
+                    SEMICOLON20=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement558); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON20);
+
+
+                    }
+                    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();
+            // 305:3: -> ^( import_key import_name )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:6: ^( import_key import_name )
+                {
+                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/DRL.g:308:1: function_import_statement : imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
+    public final function_import_statement_return function_import_statement() throws RecognitionException {
+        function_import_statement_return retval = new function_import_statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token SEMICOLON23=null;
+        import_key_return imp = 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/DRL.g:309:2: (imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:4: imp= import_key function_key import_name ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_import_key_in_function_import_statement582);
+            imp=import_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_key.add(imp.getTree());
+            pushFollow(FOLLOW_function_key_in_function_import_statement584);
+            function_key21=function_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_function_key.add(function_key21.getTree());
+            pushFollow(FOLLOW_import_name_in_function_import_statement586);
+            import_name22=import_name();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_import_name.add(import_name22.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:44: ( SEMICOLON )?
+            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/DRL.g:309:44: SEMICOLON
+                    {
+                    SEMICOLON23=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement588); 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();
+            // 310:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FUNCTION_IMPORT, ((Token)imp.start)), 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/DRL.g:313: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/DRL.g:314:2: ( ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:4: ID ( DOT ID )* ( DOT_STAR )?
+            {
+            ID24=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_import_name613); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID24);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:7: ( DOT ID )*
+            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/DRL.g:314:9: DOT ID
+            	    {
+            	    DOT25=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_import_name617); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT25);
+
+            	    ID26=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_import_name619); if (failed) return retval;
+            	    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/DRL.g:314: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/DRL.g:314:19: DOT_STAR
+                    {
+                    DOT_STAR27=(Token)input.LT(1);
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name624); 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();
+            // 315:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+                {
+                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/DRL.g:315: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/DRL.g:318: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/DRL.g:319:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:4: global_key data_type global_id ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_global_key_in_global650);
+            global_key28=global_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_global_key.add(global_key28.getTree());
+            pushFollow(FOLLOW_data_type_in_global652);
+            data_type29=data_type();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_data_type.add(data_type29.getTree());
+            pushFollow(FOLLOW_global_id_in_global654);
+            global_id30=global_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_global_id.add(global_id30.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:35: ( SEMICOLON )?
+            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/DRL.g:319:35: SEMICOLON
+                    {
+                    SEMICOLON31=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global656); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON31);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: global_key, global_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();
+            // 320:3: -> ^( global_key data_type global_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:6: ^( global_key data_type global_id )
+                {
+                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/DRL.g:323: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/DRL.g:324:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:4: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_global_id682); 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();
+            // 325: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/DRL.g:328: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/DRL.g:329:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:4: function_key ( data_type )? function_id parameters curly_chunk
+            {
+            pushFollow(FOLLOW_function_key_in_function700);
+            function_key32=function_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_function_key.add(function_key32.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:17: ( data_type )?
+            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/DRL.g:329:17: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_function702);
+                    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_function705);
+            function_id34=function_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_function_id.add(function_id34.getTree());
+            pushFollow(FOLLOW_parameters_in_function707);
+            parameters35=parameters();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_parameters.add(parameters35.getTree());
+            pushFollow(FOLLOW_curly_chunk_in_function709);
+            curly_chunk36=curly_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk36.getTree());
+
+            // AST REWRITE
+            // elements: parameters, curly_chunk, data_type, function_id, 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();
+            // 330:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_function_key.nextNode(), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:21: ( data_type )?
+                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/DRL.g:333: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/DRL.g:334:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:4: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_function_id739); 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();
+            // 335: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/DRL.g:338:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
+    public final query_return query() throws RecognitionException {
+        query_return retval = new query_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token 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/DRL.g:339:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_query_key_in_query757);
+            query_key37=query_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_query_key.add(query_key37.getTree());
+            pushFollow(FOLLOW_query_id_in_query759);
+            query_id38=query_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_query_id.add(query_id38.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:23: ( parameters )?
+            int alt12=2;
+            alt12 = dfa12.predict(input);
+            switch (alt12) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:23: parameters
+                    {
+                    pushFollow(FOLLOW_parameters_in_query761);
+                    parameters39=parameters();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_parameters.add(parameters39.getTree());
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_normal_lhs_block_in_query764);
+            normal_lhs_block40=normal_lhs_block();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block40.getTree());
+            END41=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_query766); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END41);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:56: ( SEMICOLON )?
+            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/DRL.g:339:56: SEMICOLON
+                    {
+                    SEMICOLON42=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query768); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON42);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: parameters, normal_lhs_block, query_key, END, query_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();
+            // 340:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_query_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_query_id.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:27: ( parameters )?
+                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_1, stream_END.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        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/DRL.g:343: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/DRL.g:344: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("343:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );", 14, 0, input);
+
+                throw nvae;
+            }
+            switch (alt14) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_query_id800); 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();
+                    // 344: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/DRL.g:345:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_query_id813); 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();
+                    // 345: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/DRL.g:348:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
+    public final parameters_return parameters() throws RecognitionException {
+        parameters_return retval = new parameters_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_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/DRL.g:349:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            {
+            LEFT_PAREN43=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters829); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN43);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:4: ( param_definition ( COMMA param_definition )* )?
+            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/DRL.g:350:6: param_definition ( COMMA param_definition )*
+                    {
+                    pushFollow(FOLLOW_param_definition_in_parameters836);
+                    param_definition44=param_definition();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_param_definition.add(param_definition44.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:23: ( COMMA param_definition )*
+                    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/DRL.g:350:24: COMMA param_definition
+                    	    {
+                    	    COMMA45=(Token)input.LT(1);
+                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters839); if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_COMMA.add(COMMA45);
+
+                    	    pushFollow(FOLLOW_param_definition_in_parameters841);
+                    	    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_parameters850); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN47);
+
+
+            // AST REWRITE
+            // elements: RIGHT_PAREN, 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();
+            // 352:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PARAM_LIST, "VT_PARAM_LIST"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:22: ( param_definition )*
+                while ( stream_param_definition.hasNext() ) {
+                    adaptor.addChild(root_1, stream_param_definition.next());
+
+                }
+                stream_param_definition.reset();
+                adaptor.addChild(root_1, stream_RIGHT_PAREN.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 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/DRL.g:355: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/DRL.g:356:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:4: ( data_type )? argument
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:4: ( data_type )?
+            int alt17=2;
+            alt17 = dfa17.predict(input);
+            switch (alt17) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:4: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_param_definition874);
+                    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_definition877);
+            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/DRL.g:359: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/DRL.g:360:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:4: ID ( dimension_definition )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            ID50=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_argument888); if (failed) return retval;
+            if ( backtracking==0 ) {
+            ID50_tree = (Object)adaptor.create(ID50);
+            adaptor.addChild(root_0, ID50_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:7: ( dimension_definition )*
+            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/DRL.g:360:7: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_argument890);
+            	    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/DRL.g:364:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
+    public final template_return template() throws RecognitionException {
+        template_return retval = new template_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token 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/DRL.g:365:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_template_key_in_template903);
+            template_key52=template_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_template_key.add(template_key52.getTree());
+            pushFollow(FOLLOW_template_id_in_template905);
+            template_id53=template_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_template_id.add(template_id53.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:29: ( SEMICOLON )?
+            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/DRL.g:365:29: SEMICOLON
+                    {
+                    SEMICOLON54=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template907); 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/DRL.g:366: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/DRL.g:366:3: template_slot
+            	    {
+            	    pushFollow(FOLLOW_template_slot_in_template912);
+            	    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_template917); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END56);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:7: ( SEMICOLON )?
+            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/DRL.g:367:7: SEMICOLON
+                    {
+                    SEMICOLON57=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template919); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON57);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: template_id, template_slot, template_key, END
+            // 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();
+            // 368:3: -> ^( template_key template_id ( template_slot )+ END )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:6: ^( template_key template_id ( template_slot )+ END )
+                {
+                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_1, stream_END.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        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/DRL.g:371: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/DRL.g:372: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("371:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );", 22, 0, input);
+
+                throw nvae;
+            }
+            switch (alt22) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_template_id949); 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();
+                    // 372: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/DRL.g:373:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_template_id962); 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();
+                    // 373: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/DRL.g:376: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/DRL.g:377:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:5: data_type slot_id ( SEMICOLON )?
+            {
+            pushFollow(FOLLOW_data_type_in_template_slot979);
+            data_type58=data_type();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_data_type.add(data_type58.getTree());
+            pushFollow(FOLLOW_slot_id_in_template_slot981);
+            slot_id59=slot_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_slot_id.add(slot_id59.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:23: ( SEMICOLON )?
+            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/DRL.g:377:23: SEMICOLON
+                    {
+                    SEMICOLON60=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot983); 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();
+            // 378:3: -> ^( VT_SLOT data_type slot_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:6: ^( VT_SLOT data_type slot_id )
+                {
+                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/DRL.g:381: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/DRL.g:381:9: (id= ID -> VT_SLOT_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:11: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_slot_id1008); 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();
+            // 382: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/DRL.g:385:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
+    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/DRL.g:386:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
+            {
+            pushFollow(FOLLOW_rule_key_in_rule1026);
+            rule_key61=rule_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rule_key.add(rule_key61.getTree());
+            pushFollow(FOLLOW_rule_id_in_rule1028);
+            rule_id62=rule_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rule_id.add(rule_id62.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:21: ( rule_attributes )?
+            int alt24=2;
+            alt24 = dfa24.predict(input);
+            switch (alt24) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:21: rule_attributes
+                    {
+                    pushFollow(FOLLOW_rule_attributes_in_rule1030);
+                    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/DRL.g:386: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/DRL.g:386:38: when_part
+                    {
+                    pushFollow(FOLLOW_when_part_in_rule1033);
+                    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_rule1036);
+            rhs_chunk65=rhs_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk65.getTree());
+
+            // AST REWRITE
+            // elements: rule_attributes, rule_id, rule_key, rhs_chunk, when_part
+            // 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();
+            // 387:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_rule_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_rule_id.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:25: ( rule_attributes )?
+                if ( stream_rule_attributes.hasNext() ) {
+                    adaptor.addChild(root_1, stream_rule_attributes.next());
+
+                }
+                stream_rule_attributes.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:42: ( when_part )?
+                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/DRL.g:390: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/DRL.g:391:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:4: when_key ( COLON )? normal_lhs_block
+            {
+            pushFollow(FOLLOW_when_key_in_when_part1065);
+            when_key66=when_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_when_key.add(when_key66.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:13: ( COLON )?
+            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/DRL.g:391:13: COLON
+                    {
+                    COLON67=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_when_part1067); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON67);
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_normal_lhs_block_in_when_part1070);
+            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();
+            // 392: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/DRL.g:395: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/DRL.g:396: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("395:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );", 27, 0, input);
+
+                throw nvae;
+            }
+            switch (alt27) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_rule_id1091); 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();
+                    // 396: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/DRL.g:397:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1104); 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();
+                    // 397: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/DRL.g:400: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/DRL.g:401:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:4: ( attributes_key COLON )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
+                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/DRL.g:401:6: attributes_key COLON
+                    {
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1122);
+                    attributes_key69=attributes_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key69.getTree());
+                    COLON70=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1124); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON70);
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1129);
+            rule_attribute71=rule_attribute();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute71.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:45: ( ( COMMA )? attr= rule_attribute )*
+            loop30:
+            do {
+                int alt30=2;
+                alt30 = dfa30.predict(input);
+                switch (alt30) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:47: ( COMMA )? attr= rule_attribute
+            	    {
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401: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/DRL.g:401:47: COMMA
+            	            {
+            	            COMMA72=(Token)input.LT(1);
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1133); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_COMMA.add(COMMA72);
+
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1138);
+            	    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();
+            // 402:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_RULE_ATTRIBUTES, "VT_RULE_ATTRIBUTES"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:27: ( attributes_key )?
+                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/DRL.g:405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
+    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/DRL.g:406:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
+            int alt31=12;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
+                int LA31_1 = input.LA(2);
+
+                if ( (LA31_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {
+                    int LA31_2 = input.LA(3);
+
+                    if ( (LA31_2==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {
+                        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("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("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("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 10, input);
+
+                                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("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 7, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 2, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA31_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {
+                    int LA31_3 = 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("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 3, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA31_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {
+                    alt31=1;
+                }
+                else if ( (LA31_1==STRING) && ((validateIdentifierKey("dialect")))) {
+                    alt31=12;
+                }
+                else if ( (LA31_1==BOOL) && ((validateIdentifierKey("enabled")))) {
+                    alt31=9;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 0, input);
+
+                throw nvae;
+            }
+            switch (alt31) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:4: salience
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_salience_in_rule_attribute1166);
+                    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/DRL.g:407:4: no_loop
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1172);
+                    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/DRL.g:408:4: agenda_group
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1179);
+                    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/DRL.g:409:4: duration
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_duration_in_rule_attribute1186);
+                    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/DRL.g:410:4: activation_group
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1193);
+                    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/DRL.g:411:4: auto_focus
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1199);
+                    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/DRL.g:412:4: date_effective
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1205);
+                    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/DRL.g:413:4: date_expires
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1211);
+                    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/DRL.g:414:4: enabled
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1217);
+                    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/DRL.g:415:4: ruleflow_group
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1223);
+                    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/DRL.g:416:4: lock_on_active
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1229);
+                    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/DRL.g:417:4: dialect
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1234);
+                    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/DRL.g:420: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/DRL.g:421:2: ( date_effective_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:4: date_effective_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1246);
+            date_effective_key85=date_effective_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key85.getTree(), root_0);
+            STRING86=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_effective1249); if (failed) return retval;
+            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/DRL.g:424: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/DRL.g:425:2: ( date_expires_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:4: date_expires_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1260);
+            date_expires_key87=date_expires_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key87.getTree(), root_0);
+            STRING88=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_expires1263); if (failed) return retval;
+            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/DRL.g:428: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/DRL.g:429:2: ( enabled_key BOOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:4: enabled_key BOOL
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_enabled_key_in_enabled1277);
+            enabled_key89=enabled_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key89.getTree(), root_0);
+            BOOL90=(Token)input.LT(1);
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1280); if (failed) return retval;
+            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/DRL.g:432: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/DRL.g:433:2: ( salience_key ( INT | paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:4: salience_key ( INT | paren_chunk )
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_salience_key_in_salience1292);
+            salience_key91=salience_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key91.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:3: ( INT | paren_chunk )
+            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("434:3: ( INT | paren_chunk )", 32, 0, input);
+
+                throw nvae;
+            }
+            switch (alt32) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:5: INT
+                    {
+                    INT92=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_salience1299); 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/DRL.g:435:5: paren_chunk
+                    {
+                    pushFollow(FOLLOW_paren_chunk_in_salience1308);
+                    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/DRL.g:439: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/DRL.g:440:2: ( no_loop_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: no_loop_key ( BOOL )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1324);
+            no_loop_key94=no_loop_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key94.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:17: ( BOOL )?
+            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/DRL.g:440:17: BOOL
+                    {
+                    BOOL95=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1327); 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/DRL.g:443: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/DRL.g:444:2: ( auto_focus_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:4: auto_focus_key ( BOOL )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1339);
+            auto_focus_key96=auto_focus_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key96.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:20: ( BOOL )?
+            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/DRL.g:444:20: BOOL
+                    {
+                    BOOL97=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1342); 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/DRL.g:447: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/DRL.g:448:2: ( activation_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:4: activation_group_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1356);
+            activation_group_key98=activation_group_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key98.getTree(), root_0);
+            STRING99=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_activation_group1359); if (failed) return retval;
+            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/DRL.g:451: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/DRL.g:452:2: ( ruleflow_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: ruleflow_group_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1370);
+            ruleflow_group_key100=ruleflow_group_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key100.getTree(), root_0);
+            STRING101=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1373); if (failed) return retval;
+            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/DRL.g:455: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/DRL.g:456:2: ( agenda_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:4: agenda_group_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1384);
+            agenda_group_key102=agenda_group_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key102.getTree(), root_0);
+            STRING103=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1387); if (failed) return retval;
+            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/DRL.g:459: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/DRL.g:460:2: ( duration_key INT )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:4: duration_key INT
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_duration_key_in_duration1398);
+            duration_key104=duration_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key104.getTree(), root_0);
+            INT105=(Token)input.LT(1);
+            match(input,INT,FOLLOW_INT_in_duration1401); if (failed) return retval;
+            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/DRL.g:463: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/DRL.g:464:2: ( dialect_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:4: dialect_key STRING
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_dialect_key_in_dialect1415);
+            dialect_key106=dialect_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key106.getTree(), root_0);
+            STRING107=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_dialect1418); if (failed) return retval;
+            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/DRL.g:467: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/DRL.g:468:2: ( lock_on_active_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:4: lock_on_active_key ( BOOL )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1436);
+            lock_on_active_key108=lock_on_active_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key108.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:24: ( BOOL )?
+            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/DRL.g:468:24: BOOL
+                    {
+                    BOOL109=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1439); 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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:471: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 lhs110 = null;
+
+
+        RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
+            loop36:
+            do {
+                int alt36=2;
+                int LA36_0 = input.LA(1);
+
+                if ( (LA36_0==ID||LA36_0==LEFT_PAREN) ) {
+                    alt36=1;
+                }
+
+
+                switch (alt36) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: lhs
+            	    {
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1451);
+            	    lhs110=lhs();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_lhs.add(lhs110.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop36;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: lhs
+            // 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();
+            // 473:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_IMPLICIT, "VT_AND_IMPLICIT"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:23: ( lhs )*
+                while ( stream_lhs.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs.next());
+
+                }
+                stream_lhs.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 normal_lhs_block
+
+    public static class lhs_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476: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_or111 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:5: ( lhs_or )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:7: lhs_or
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_lhs_or_in_lhs1472);
+            lhs_or111=lhs_or();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or111.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 lhs
+
+    public static class lhs_or_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_or
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
+    public final lhs_or_return lhs_or() throws RecognitionException {
+        lhs_or_return retval = new lhs_or_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token pipe=null;
+        Token LEFT_PAREN112=null;
+        Token RIGHT_PAREN114=null;
+        or_key_return or = null;
+
+        or_key_return value = null;
+
+        lhs_and_return lhs_and113 = null;
+
+        lhs_and_return lhs_and115 = null;
+
+        lhs_and_return lhs_and116 = null;
+
+
+        Object pipe_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");
+        RewriteRuleSubtreeStream stream_or_key=new RewriteRuleSubtreeStream(adaptor,"rule or_key");
+        RewriteRuleSubtreeStream stream_lhs_and=new RewriteRuleSubtreeStream(adaptor,"rule lhs_and");
+
+        	Token orToken = null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
+            int alt40=2;
+            int LA40_0 = input.LA(1);
+
+            if ( (LA40_0==LEFT_PAREN) ) {
+                int LA40_1 = input.LA(2);
+
+                if ( (LA40_1==LEFT_PAREN) ) {
+                    alt40=2;
+                }
+                else if ( (LA40_1==ID) ) {
+                    switch ( input.LA(3) ) {
+                    case DOT:
+                    case COLON:
+                    case LEFT_SQUARE:
+                        {
+                        alt40=2;
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        int LA40_4 = input.LA(4);
+
+                        if ( (synpred1()) ) {
+                            alt40=1;
+                        }
+                        else if ( (true) ) {
+                            alt40=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 4, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case ID:
+                        {
+                        int LA40_5 = input.LA(4);
+
+                        if ( (synpred1()) ) {
+                            alt40=1;
+                        }
+                        else if ( (true) ) {
+                            alt40=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 5, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 3, input);
+
+                        throw nvae;
+                    }
+
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA40_0==ID) ) {
+                alt40=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 0, input);
+
+                throw nvae;
+            }
+            switch (alt40) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    {
+                    LEFT_PAREN112=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1493); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN112);
+
+                    pushFollow(FOLLOW_or_key_in_lhs_or1497);
+                    or=or_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_key.add(or.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:48: ( lhs_and )+
+                    int cnt37=0;
+                    loop37:
+                    do {
+                        int alt37=2;
+                        int LA37_0 = input.LA(1);
+
+                        if ( (LA37_0==ID||LA37_0==LEFT_PAREN) ) {
+                            alt37=1;
+                        }
+
+
+                        switch (alt37) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:48: lhs_and
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1499);
+                    	    lhs_and113=lhs_and();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and113.getTree());
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt37 >= 1 ) break loop37;
+                    	    if (backtracking>0) {failed=true; return retval;}
+                                EarlyExitException eee =
+                                    new EarlyExitException(37, input);
+                                throw eee;
+                        }
+                        cnt37++;
+                    } while (true);
+
+                    RIGHT_PAREN114=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1502); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN114);
+
+
+                    // AST REWRITE
+                    // elements: RIGHT_PAREN, lhs_and
+                    // 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();
+                    // 483:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_PREFIX, ((Token)or.start)), root_1);
+
+                        if ( !(stream_lhs_and.hasNext()) ) {
+                            throw new RewriteEarlyExitException();
+                        }
+                        while ( stream_lhs_and.hasNext() ) {
+                            adaptor.addChild(root_1, stream_lhs_and.next());
+
+                        }
+                        stream_lhs_and.reset();
+                        adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    {
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:5: lhs_and
+                    {
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or1523);
+                    lhs_and115=lhs_and();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and115.getTree());
+
+                    // AST REWRITE
+                    // elements: lhs_and
+                    // 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();
+                    // 484:13: -> lhs_and
+                    {
+                        adaptor.addChild(root_0, stream_lhs_and.next());
+
+                    }
+
+                    }
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    loop39:
+                    do {
+                        int alt39=2;
+                        int LA39_0 = input.LA(1);
+
+                        if ( (LA39_0==ID) ) {
+                            int LA39_2 = input.LA(2);
+
+                            if ( ((synpred2()&&(validateIdentifierKey("or")))) ) {
+                                alt39=1;
+                            }
+
+
+                        }
+                        else if ( (LA39_0==DOUBLE_PIPE) ) {
+                            int LA39_3 = input.LA(2);
+
+                            if ( (synpred2()) ) {
+                                alt39=1;
+                            }
+
+
+                        }
+
+
+                        switch (alt39) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    {
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    int alt38=2;
+                    	    int LA38_0 = input.LA(1);
+
+                    	    if ( (LA38_0==ID) && ((validateIdentifierKey("or")))) {
+                    	        alt38=1;
+                    	    }
+                    	    else if ( (LA38_0==DOUBLE_PIPE) ) {
+                    	        alt38=2;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return retval;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("485:28: (value= or_key | pipe= DOUBLE_PIPE )", 38, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt38) {
+                    	        case 1 :
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:29: value= or_key
+                    	            {
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or1545);
+                    	            value=or_key();
+                    	            _fsp--;
+                    	            if (failed) return retval;
+                    	            if ( backtracking==0 ) stream_or_key.add(value.getTree());
+                    	            if ( backtracking==0 ) {
+                    	              orToken = ((Token)value.start);
+                    	            }
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:69: pipe= DOUBLE_PIPE
+                    	            {
+                    	            pipe=(Token)input.LT(1);
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1552); if (failed) return retval;
+                    	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
+
+                    	            if ( backtracking==0 ) {
+                    	              orToken = pipe;
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1557);
+                    	    lhs_and116=lhs_and();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and116.getTree());
+
+                    	    // AST REWRITE
+                    	    // elements: lhs_or, lhs_and
+                    	    // 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();
+                    	    // 486:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    {
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        {
+                    	        Object root_1 = (Object)adaptor.nil();
+                    	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_INFIX, orToken), root_1);
+
+                    	        adaptor.addChild(root_1, stream_retval.next());
+                    	        adaptor.addChild(root_1, stream_lhs_and.next());
+
+                    	        adaptor.addChild(root_0, root_1);
+                    	        }
+
+                    	    }
+
+                    	    }
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop39;
+                        }
+                    } while (true);
+
+
+                    }
+                    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 lhs_or
+
+    public static class lhs_and_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_and
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
+    public final lhs_and_return lhs_and() throws RecognitionException {
+        lhs_and_return retval = new lhs_and_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token amper=null;
+        Token LEFT_PAREN117=null;
+        Token RIGHT_PAREN119=null;
+        and_key_return and = null;
+
+        and_key_return value = null;
+
+        lhs_unary_return lhs_unary118 = null;
+
+        lhs_unary_return lhs_unary120 = null;
+
+        lhs_unary_return lhs_unary121 = null;
+
+
+        Object amper_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");
+        RewriteRuleSubtreeStream stream_and_key=new RewriteRuleSubtreeStream(adaptor,"rule and_key");
+        RewriteRuleSubtreeStream stream_lhs_unary=new RewriteRuleSubtreeStream(adaptor,"rule lhs_unary");
+
+        	Token andToken = null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
+            int alt44=2;
+            int LA44_0 = input.LA(1);
+
+            if ( (LA44_0==LEFT_PAREN) ) {
+                int LA44_1 = input.LA(2);
+
+                if ( (LA44_1==LEFT_PAREN) ) {
+                    alt44=2;
+                }
+                else if ( (LA44_1==ID) ) {
+                    switch ( input.LA(3) ) {
+                    case DOT:
+                    case COLON:
+                    case LEFT_SQUARE:
+                        {
+                        alt44=2;
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        switch ( input.LA(4) ) {
+                        case LEFT_PAREN:
+                            {
+                            int LA44_6 = input.LA(5);
+
+                            if ( (synpred3()) ) {
+                                alt44=1;
+                            }
+                            else if ( (true) ) {
+                                alt44=2;
+                            }
+                            else {
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 6, input);
+
+                                throw nvae;
+                            }
+                            }
+                            break;
+                        case ID:
+                            {
+                            int LA44_7 = input.LA(5);
+
+                            if ( (synpred3()) ) {
+                                alt44=1;
+                            }
+                            else if ( (true) ) {
+                                alt44=2;
+                            }
+                            else {
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 7, input);
+
+                                throw nvae;
+                            }
+                            }
+                            break;
+                        case VT_COMPILATION_UNIT:
+                        case VT_FUNCTION_IMPORT:
+                        case VT_FACT:
+                        case VT_CONSTRAINTS:
+                        case VT_LABEL:
+                        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:
+                        case VT_AND_IMPLICIT:
+                        case VT_AND_PREFIX:
+                        case VT_OR_PREFIX:
+                        case VT_AND_INFIX:
+                        case VT_OR_INFIX:
+                        case VT_ACCUMULATE_INIT_CLAUSE:
+                        case VT_ACCUMULATE_ID_CLAUSE:
+                        case VT_FROM_SOURCE:
+                        case VT_EXPRESSION_CHAIN:
+                        case VT_PATTERN:
+                        case VT_FACT_BINDING:
+                        case VT_FACT_OR:
+                        case VT_BIND_FIELD:
+                        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:
+                        case VK_EXCLUDES:
+                        case VK_SOUNDSLIKE:
+                        case VK_MEMBEROF:
+                        case VK_ENTRY_POINT:
+                        case VK_NOT:
+                        case VK_IN:
+                        case VK_OR:
+                        case VK_AND:
+                        case VK_EXISTS:
+                        case VK_FORALL:
+                        case VK_FROM:
+                        case VK_ACCUMULATE:
+                        case VK_INIT:
+                        case VK_ACTION:
+                        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 ARROW:
+                        case EQUAL:
+                        case GREATER:
+                        case GREATER_EQUAL:
+                        case LESS:
+                        case LESS_EQUAL:
+                        case NOT_EQUAL:
+                        case FLOAT:
+                        case NULL:
+                        case LEFT_SQUARE:
+                        case RIGHT_SQUARE:
+                        case THEN:
+                        case LEFT_CURLY:
+                        case RIGHT_CURLY:
+                        case MISC:
+                        case EOL:
+                        case WS:
+                        case EscapeSequence:
+                        case HexDigit:
+                        case UnicodeEscape:
+                        case OctalEscape:
+                        case SH_STYLE_SINGLE_LINE_COMMENT:
+                        case C_STYLE_SINGLE_LINE_COMMENT:
+                        case MULTI_LINE_COMMENT:
+                            {
+                            alt44=2;
+                            }
+                            break;
+                        default:
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 4, input);
+
+                            throw nvae;
+                        }
+
+                        }
+                        break;
+                    case ID:
+                        {
+                        int LA44_5 = input.LA(4);
+
+                        if ( (synpred3()) ) {
+                            alt44=1;
+                        }
+                        else if ( (true) ) {
+                            alt44=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 5, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 3, input);
+
+                        throw nvae;
+                    }
+
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA44_0==ID) ) {
+                alt44=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 0, input);
+
+                throw nvae;
+            }
+            switch (alt44) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    {
+                    LEFT_PAREN117=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1595); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN117);
+
+                    pushFollow(FOLLOW_and_key_in_lhs_and1599);
+                    and=and_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_and_key.add(and.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:51: ( lhs_unary )+
+                    int cnt41=0;
+                    loop41:
+                    do {
+                        int alt41=2;
+                        int LA41_0 = input.LA(1);
+
+                        if ( (LA41_0==ID||LA41_0==LEFT_PAREN) ) {
+                            alt41=1;
+                        }
+
+
+                        switch (alt41) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:51: lhs_unary
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1601);
+                    	    lhs_unary118=lhs_unary();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary118.getTree());
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt41 >= 1 ) break loop41;
+                    	    if (backtracking>0) {failed=true; return retval;}
+                                EarlyExitException eee =
+                                    new EarlyExitException(41, input);
+                                throw eee;
+                        }
+                        cnt41++;
+                    } while (true);
+
+                    RIGHT_PAREN119=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1604); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN119);
+
+
+                    // AST REWRITE
+                    // elements: RIGHT_PAREN, lhs_unary
+                    // 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();
+                    // 493:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_PREFIX, ((Token)and.start)), root_1);
+
+                        if ( !(stream_lhs_unary.hasNext()) ) {
+                            throw new RewriteEarlyExitException();
+                        }
+                        while ( stream_lhs_unary.hasNext() ) {
+                            adaptor.addChild(root_1, stream_lhs_unary.next());
+
+                        }
+                        stream_lhs_unary.reset();
+                        adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    {
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:5: lhs_unary
+                    {
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1625);
+                    lhs_unary120=lhs_unary();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary120.getTree());
+
+                    // AST REWRITE
+                    // elements: lhs_unary
+                    // 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();
+                    // 494:15: -> lhs_unary
+                    {
+                        adaptor.addChild(root_0, stream_lhs_unary.next());
+
+                    }
+
+                    }
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    loop43:
+                    do {
+                        int alt43=2;
+                        int LA43_0 = input.LA(1);
+
+                        if ( (LA43_0==ID) ) {
+                            int LA43_2 = input.LA(2);
+
+                            if ( ((synpred4()&&(validateIdentifierKey("and")))) ) {
+                                alt43=1;
+                            }
+
+
+                        }
+                        else if ( (LA43_0==DOUBLE_AMPER) ) {
+                            int LA43_3 = input.LA(2);
+
+                            if ( (synpred4()) ) {
+                                alt43=1;
+                            }
+
+
+                        }
+
+
+                        switch (alt43) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    {
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    int alt42=2;
+                    	    int LA42_0 = input.LA(1);
+
+                    	    if ( (LA42_0==ID) && ((validateIdentifierKey("and")))) {
+                    	        alt42=1;
+                    	    }
+                    	    else if ( (LA42_0==DOUBLE_AMPER) ) {
+                    	        alt42=2;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return retval;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("495:30: (value= and_key | amper= DOUBLE_AMPER )", 42, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt42) {
+                    	        case 1 :
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:31: value= and_key
+                    	            {
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and1647);
+                    	            value=and_key();
+                    	            _fsp--;
+                    	            if (failed) return retval;
+                    	            if ( backtracking==0 ) stream_and_key.add(value.getTree());
+                    	            if ( backtracking==0 ) {
+                    	              andToken = ((Token)value.start);
+                    	            }
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:73: amper= DOUBLE_AMPER
+                    	            {
+                    	            amper=(Token)input.LT(1);
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1654); if (failed) return retval;
+                    	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
+
+                    	            if ( backtracking==0 ) {
+                    	              andToken = amper;
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1659);
+                    	    lhs_unary121=lhs_unary();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary121.getTree());
+
+                    	    // AST REWRITE
+                    	    // elements: lhs_and, lhs_unary
+                    	    // 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();
+                    	    // 496:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    {
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        {
+                    	        Object root_1 = (Object)adaptor.nil();
+                    	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_INFIX, andToken), root_1);
+
+                    	        adaptor.addChild(root_1, stream_retval.next());
+                    	        adaptor.addChild(root_1, stream_lhs_unary.next());
+
+                    	        adaptor.addChild(root_0, root_1);
+                    	        }
+
+                    	    }
+
+                    	    }
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop43;
+                        }
+                    } while (true);
+
+
+                    }
+                    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 lhs_and
+
+    public static class lhs_unary_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_unary
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
+    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_PAREN126=null;
+        Token RIGHT_PAREN128=null;
+        Token SEMICOLON130=null;
+        lhs_exist_return lhs_exist122 = null;
+
+        lhs_not_return lhs_not123 = null;
+
+        lhs_eval_return lhs_eval124 = null;
+
+        lhs_forall_return lhs_forall125 = null;
+
+        lhs_or_return lhs_or127 = null;
+
+        pattern_source_return pattern_source129 = null;
+
+
+        Object LEFT_PAREN126_tree=null;
+        Object RIGHT_PAREN128_tree=null;
+        Object SEMICOLON130_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            int alt45=6;
+            int LA45_0 = input.LA(1);
+
+            if ( (LA45_0==ID) ) {
+                int LA45_1 = input.LA(2);
+
+                if ( ((validateIdentifierKey("exists"))) ) {
+                    alt45=1;
+                }
+                else if ( ((validateIdentifierKey("not"))) ) {
+                    alt45=2;
+                }
+                else if ( ((validateIdentifierKey("eval"))) ) {
+                    alt45=3;
+                }
+                else if ( ((validateIdentifierKey("forall"))) ) {
+                    alt45=4;
+                }
+                else if ( (true) ) {
+                    alt45=6;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA45_0==LEFT_PAREN) ) {
+                alt45=5;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 0, input);
+
+                throw nvae;
+            }
+            switch (alt45) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:6: lhs_exist
+                    {
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1697);
+                    lhs_exist122=lhs_exist();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist122.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:5: lhs_not
+                    {
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1703);
+                    lhs_not123=lhs_not();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not123.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:5: lhs_eval
+                    {
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1709);
+                    lhs_eval124=lhs_eval();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval124.getTree());
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: lhs_forall
+                    {
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1715);
+                    lhs_forall125=lhs_forall();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall125.getTree());
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN126=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1721); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1724);
+                    lhs_or127=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or127.getTree());
+                    RIGHT_PAREN128=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1726); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    RIGHT_PAREN128_tree = (Object)adaptor.create(RIGHT_PAREN128);
+                    adaptor.addChild(root_0, RIGHT_PAREN128_tree);
+                    }
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:5: pattern_source
+                    {
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1732);
+                    pattern_source129=pattern_source();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source129.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:3: ( ( SEMICOLON )=> SEMICOLON )?
+            int alt46=2;
+            int LA46_0 = input.LA(1);
+
+            if ( (LA46_0==SEMICOLON) ) {
+                int LA46_1 = input.LA(2);
+
+                if ( (synpred5()) ) {
+                    alt46=1;
+                }
+            }
+            switch (alt46) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:4: ( SEMICOLON )=> SEMICOLON
+                    {
+                    SEMICOLON130=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1746); if (failed) return retval;
+
+                    }
+                    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 lhs_unary
+
+    public static class lhs_exist_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_exist
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
+    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_PAREN133=null;
+        Token RIGHT_PAREN135=null;
+        exists_key_return exists_key131 = null;
+
+        lhs_or_return lhs_or132 = null;
+
+        lhs_or_return lhs_or134 = null;
+
+        lhs_pattern_return lhs_pattern136 = 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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            {
+            pushFollow(FOLLOW_exists_key_in_lhs_exist1760);
+            exists_key131=exists_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_exists_key.add(exists_key131.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt47=3;
+            alt47 = dfa47.predict(input);
+            switch (alt47) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    {
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1784);
+                    lhs_or132=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or132.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN133=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1791); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN133);
+
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1793);
+                    lhs_or134=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or134.getTree());
+                    RIGHT_PAREN135=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1795); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN135);
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:515:12: lhs_pattern
+                    {
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1808);
+                    lhs_pattern136=lhs_pattern();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern136.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: RIGHT_PAREN, lhs_pattern, lhs_or, exists_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();
+            // 517:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_exists_key.nextNode(), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:26: ( lhs_or )?
+                if ( stream_lhs_or.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_or.next());
+
+                }
+                stream_lhs_or.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:34: ( lhs_pattern )?
+                if ( stream_lhs_pattern.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_pattern.next());
+
+                }
+                stream_lhs_pattern.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:47: ( RIGHT_PAREN )?
+                if ( stream_RIGHT_PAREN.hasNext() ) {
+                    adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
+
+                }
+                stream_RIGHT_PAREN.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 lhs_exist
+
+    public static class lhs_not_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_not
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
+    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_PAREN139=null;
+        Token RIGHT_PAREN141=null;
+        not_key_return not_key137 = null;
+
+        lhs_or_return lhs_or138 = null;
+
+        lhs_or_return lhs_or140 = null;
+
+        lhs_pattern_return lhs_pattern142 = 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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            {
+            pushFollow(FOLLOW_not_key_in_lhs_not1854);
+            not_key137=not_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_not_key.add(not_key137.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt48=3;
+            alt48 = dfa48.predict(input);
+            switch (alt48) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    {
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not1871);
+                    lhs_or138=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or138.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN139=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not1878); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN139);
+
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not1880);
+                    lhs_or140=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or140.getTree());
+                    RIGHT_PAREN141=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not1882); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN141);
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:523:6: lhs_pattern
+                    {
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not1890);
+                    lhs_pattern142=lhs_pattern();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern142.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: not_key, lhs_pattern, RIGHT_PAREN, lhs_or
+            // 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();
+            // 524:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:23: ( lhs_or )?
+                if ( stream_lhs_or.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_or.next());
+
+                }
+                stream_lhs_or.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:31: ( lhs_pattern )?
+                if ( stream_lhs_pattern.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_pattern.next());
+
+                }
+                stream_lhs_pattern.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:44: ( RIGHT_PAREN )?
+                if ( stream_RIGHT_PAREN.hasNext() ) {
+                    adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
+
+                }
+                stream_RIGHT_PAREN.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 lhs_not
+
+    public static class lhs_eval_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_eval
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
+    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 ev = null;
+
+        paren_chunk_return pc = null;
+
+
+        RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:4: ev= eval_key pc= paren_chunk
+            {
+            pushFollow(FOLLOW_eval_key_in_lhs_eval1929);
+            ev=eval_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_eval_key.add(ev.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval1933);
+            pc=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc.getTree());
+            if ( backtracking==0 ) {
+              	String body = safeSubstring( input.toString(pc.start,pc.stop), 1, input.toString(pc.start,pc.stop).length()-1 );
+              		checkTrailingSemicolon( body, offset((((Token)ev.start)).getLine()) );	
+            }
+
+            // AST REWRITE
+            // elements: paren_chunk, eval_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();
+            // 531:3: -> ^( eval_key paren_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:531:6: ^( eval_key paren_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end lhs_eval
+
+    public static class lhs_forall_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_forall
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
+    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_PAREN144=null;
+        Token RIGHT_PAREN146=null;
+        forall_key_return forall_key143 = null;
+
+        lhs_pattern_return lhs_pattern145 = null;
+
+
+        Object LEFT_PAREN144_tree=null;
+        Object RIGHT_PAREN146_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
+        RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_forall_key_in_lhs_forall1957);
+            forall_key143=forall_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_forall_key.add(forall_key143.getTree());
+            LEFT_PAREN144=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall1959); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN144);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: ( lhs_pattern )+
+            int cnt49=0;
+            loop49:
+            do {
+                int alt49=2;
+                int LA49_0 = input.LA(1);
+
+                if ( (LA49_0==ID) ) {
+                    alt49=1;
+                }
+
+
+                switch (alt49) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: lhs_pattern
+            	    {
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall1961);
+            	    lhs_pattern145=lhs_pattern();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern145.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt49 >= 1 ) break loop49;
+            	    if (backtracking>0) {failed=true; return retval;}
+                        EarlyExitException eee =
+                            new EarlyExitException(49, input);
+                        throw eee;
+                }
+                cnt49++;
+            } while (true);
+
+            RIGHT_PAREN146=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall1964); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN146);
+
+
+            // AST REWRITE
+            // elements: RIGHT_PAREN, lhs_pattern, forall_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();
+            // 536:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
+
+                if ( !(stream_lhs_pattern.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_lhs_pattern.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_pattern.next());
+
+                }
+                stream_lhs_pattern.reset();
+                adaptor.addChild(root_1, stream_RIGHT_PAREN.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 lhs_forall
+
+    public static class pattern_source_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start pattern_source
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    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_pattern147 = null;
+
+        from_key_return from_key148 = null;
+
+        accumulate_statement_return accumulate_statement149 = null;
+
+        collect_statement_return collect_statement150 = null;
+
+        entrypoint_statement_return entrypoint_statement151 = null;
+
+        from_source_return from_source152 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source1996);
+            lhs_pattern147=lhs_pattern();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern147.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            int alt51=2;
+            int LA51_0 = input.LA(1);
+
+            if ( (LA51_0==ID) ) {
+                int LA51_1 = input.LA(2);
+
+                if ( (LA51_1==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                    int LA51_3 = input.LA(3);
+
+                    if ( (LA51_3==SEMICOLON||LA51_3==END||(LA51_3>=COMMA && LA51_3<=RIGHT_PAREN)||(LA51_3>=DOUBLE_PIPE && LA51_3<=DOUBLE_AMPER)||LA51_3==THEN||LA51_3==MISC) && ((validateIdentifierKey("from")))) {
+                        alt51=1;
+                    }
+                    else if ( (LA51_3==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_6 = input.LA(4);
+
+                        if ( (LA51_6==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                            int LA51_10 = input.LA(5);
+
+                            if ( (LA51_10==LEFT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA51_11 = input.LA(6);
+
+                                if ( (LA51_11==RIGHT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                    int LA51_14 = input.LA(7);
+
+                                    if ( (LA51_14==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                        int LA51_16 = input.LA(8);
+
+                                        if ( ((validateIdentifierKey("from"))) ) {
+                                            alt51=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 ( ((LA51_11>=VT_COMPILATION_UNIT && LA51_11<=LEFT_SQUARE)||(LA51_11>=THEN && LA51_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("from")))) {
+                                    alt51=1;
+                                }
+                            }
+                            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"))) ) {
+                                    alt51=1;
+                                }
+                            }
+                            else if ( (LA51_10==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA51_13 = input.LA(6);
+
+                                if ( (LA51_13==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                    int LA51_15 = input.LA(7);
+
+                                    if ( ((validateIdentifierKey("from"))) ) {
+                                        alt51=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;
+                            }
+                        }
+                    }
+                    else if ( (LA51_3==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_8 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("from"))) ) {
+                            alt51=1;
+                        }
+                    }
+                    else if ( (LA51_3==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_9 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("from"))) ) {
+                            alt51=1;
+                        }
+                    }
+                }
+            }
+            switch (alt51) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    {
+                    pushFollow(FOLLOW_from_key_in_pattern_source2005);
+                    from_key148=from_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key148.getTree(), root_0);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    int alt50=4;
+                    int LA50_0 = input.LA(1);
+
+                    if ( (LA50_0==ID) ) {
+                        int LA50_1 = input.LA(2);
+
+                        if ( (LA50_1==MISC) && ((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point")))) {
+                            alt50=3;
+                        }
+                        else if ( (LA50_1==LEFT_PAREN) ) {
+                            switch ( input.LA(3) ) {
+                            case ID:
+                                {
+                                int LA50_5 = input.LA(4);
+
+                                if ( ((validateIdentifierKey("accumulate"))) ) {
+                                    alt50=1;
+                                }
+                                else if ( ((validateIdentifierKey("collect"))) ) {
+                                    alt50=2;
+                                }
+                                else if ( (true) ) {
+                                    alt50=4;
+                                }
+                                else {
+                                    if (backtracking>0) {failed=true; return retval;}
+                                    NoViableAltException nvae =
+                                        new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 5, input);
+
+                                    throw nvae;
+                                }
+                                }
+                                break;
+                            case LEFT_PAREN:
+                                {
+                                int LA50_6 = 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("544: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_LABEL:
+                            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:
+                            case VT_AND_IMPLICIT:
+                            case VT_AND_PREFIX:
+                            case VT_OR_PREFIX:
+                            case VT_AND_INFIX:
+                            case VT_OR_INFIX:
+                            case VT_ACCUMULATE_INIT_CLAUSE:
+                            case VT_ACCUMULATE_ID_CLAUSE:
+                            case VT_FROM_SOURCE:
+                            case VT_EXPRESSION_CHAIN:
+                            case VT_PATTERN:
+                            case VT_FACT_BINDING:
+                            case VT_FACT_OR:
+                            case VT_BIND_FIELD:
+                            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:
+                            case VK_EXCLUDES:
+                            case VK_SOUNDSLIKE:
+                            case VK_MEMBEROF:
+                            case VK_ENTRY_POINT:
+                            case VK_NOT:
+                            case VK_IN:
+                            case VK_OR:
+                            case VK_AND:
+                            case VK_EXISTS:
+                            case VK_FORALL:
+                            case VK_FROM:
+                            case VK_ACCUMULATE:
+                            case VK_INIT:
+                            case VK_ACTION:
+                            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 ARROW:
+                            case EQUAL:
+                            case GREATER:
+                            case GREATER_EQUAL:
+                            case LESS:
+                            case LESS_EQUAL:
+                            case NOT_EQUAL:
+                            case FLOAT:
+                            case NULL:
+                            case LEFT_SQUARE:
+                            case RIGHT_SQUARE:
+                            case THEN:
+                            case LEFT_CURLY:
+                            case RIGHT_CURLY:
+                            case MISC:
+                            case EOL:
+                            case WS:
+                            case EscapeSequence:
+                            case HexDigit:
+                            case UnicodeEscape:
+                            case OctalEscape:
+                            case SH_STYLE_SINGLE_LINE_COMMENT:
+                            case C_STYLE_SINGLE_LINE_COMMENT:
+                            case MULTI_LINE_COMMENT:
+                                {
+                                alt50=4;
+                                }
+                                break;
+                            default:
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 3, input);
+
+                                throw nvae;
+                            }
+
+                        }
+                        else if ( ((LA50_1>=SEMICOLON && LA50_1<=DOT)||LA50_1==END||(LA50_1>=COMMA && LA50_1<=RIGHT_PAREN)||(LA50_1>=DOUBLE_PIPE && LA50_1<=DOUBLE_AMPER)||LA50_1==THEN) ) {
+                            alt50=4;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 1, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt50) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:14: accumulate_statement
+                            {
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2021);
+                            accumulate_statement149=accumulate_statement();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement149.getTree());
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:15: collect_statement
+                            {
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2037);
+                            collect_statement150=collect_statement();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement150.getTree());
+
+                            }
+                            break;
+                        case 3 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:15: entrypoint_statement
+                            {
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2054);
+                            entrypoint_statement151=entrypoint_statement();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement151.getTree());
+
+                            }
+                            break;
+                        case 4 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:15: from_source
+                            {
+                            pushFollow(FOLLOW_from_source_in_pattern_source2070);
+                            from_source152=from_source();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source152.getTree());
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    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 pattern_source
+
+    public static class accumulate_statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start accumulate_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
+    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_PAREN154=null;
+        Token COMMA156=null;
+        Token RIGHT_PAREN159=null;
+        accumulate_key_return accumulate_key153 = null;
+
+        lhs_or_return lhs_or155 = null;
+
+        accumulate_init_clause_return accumulate_init_clause157 = null;
+
+        accumulate_id_clause_return accumulate_id_clause158 = null;
+
+
+        Object LEFT_PAREN154_tree=null;
+        Object COMMA156_tree=null;
+        Object RIGHT_PAREN159_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_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
+        RewriteRuleSubtreeStream stream_accumulate_init_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_init_clause");
+        RewriteRuleSubtreeStream stream_accumulate_id_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_id_clause");
+        RewriteRuleSubtreeStream stream_accumulate_key=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_key");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2098);
+            accumulate_key153=accumulate_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key153.getTree());
+            LEFT_PAREN154=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2102); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN154);
+
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2104);
+            lhs_or155=lhs_or();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_lhs_or.add(lhs_or155.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: ( COMMA )?
+            int alt52=2;
+            int LA52_0 = input.LA(1);
+
+            if ( (LA52_0==COMMA) ) {
+                alt52=1;
+            }
+            switch (alt52) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: COMMA
+                    {
+                    COMMA156=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2106); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA156);
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:3: ( accumulate_init_clause | accumulate_id_clause )
+            int alt53=2;
+            alt53 = dfa53.predict(input);
+            switch (alt53) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:5: accumulate_init_clause
+                    {
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2114);
+                    accumulate_init_clause157=accumulate_init_clause();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause157.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: accumulate_id_clause
+                    {
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2120);
+                    accumulate_id_clause158=accumulate_id_clause();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause158.getTree());
+
+                    }
+                    break;
+
+            }
+
+            RIGHT_PAREN159=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2128); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN159);
+
+
+            // AST REWRITE
+            // elements: accumulate_id_clause, lhs_or, accumulate_key, accumulate_init_clause, RIGHT_PAREN
+            // 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();
+            // 559:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_accumulate_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_lhs_or.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:30: ( accumulate_init_clause )?
+                if ( stream_accumulate_init_clause.hasNext() ) {
+                    adaptor.addChild(root_1, stream_accumulate_init_clause.next());
+
+                }
+                stream_accumulate_init_clause.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:54: ( accumulate_id_clause )?
+                if ( stream_accumulate_id_clause.hasNext() ) {
+                    adaptor.addChild(root_1, stream_accumulate_id_clause.next());
+
+                }
+                stream_accumulate_id_clause.reset();
+                adaptor.addChild(root_1, stream_RIGHT_PAREN.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 accumulate_statement
+
+    public static class accumulate_init_clause_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start accumulate_init_clause
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
+    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 COMMA161=null;
+        Token COMMA163=null;
+        Token COMMA165=null;
+        paren_chunk_return pc1 = null;
+
+        paren_chunk_return pc2 = null;
+
+        paren_chunk_return pc3 = null;
+
+        paren_chunk_return pc4 = null;
+
+        init_key_return init_key160 = null;
+
+        action_key_return action_key162 = null;
+
+        reverse_key_return reverse_key164 = null;
+
+        result_key_return result_key166 = null;
+
+
+        Object COMMA161_tree=null;
+        Object COMMA163_tree=null;
+        Object COMMA165_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");
+        RewriteRuleSubtreeStream stream_init_key=new RewriteRuleSubtreeStream(adaptor,"rule init_key");
+        RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
+            {
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2157);
+            init_key160=init_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_init_key.add(init_key160.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2162);
+            pc1=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc1.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:18: ( COMMA )?
+            int alt54=2;
+            int LA54_0 = input.LA(1);
+
+            if ( (LA54_0==COMMA) ) {
+                alt54=1;
+            }
+            switch (alt54) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:18: COMMA
+                    {
+                    COMMA161=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2164); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA161);
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2168);
+            action_key162=action_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_action_key.add(action_key162.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2172);
+            pc2=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc2.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:29: ( COMMA )?
+            int alt55=2;
+            int LA55_0 = input.LA(1);
+
+            if ( (LA55_0==COMMA) ) {
+                alt55=1;
+            }
+            switch (alt55) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:29: COMMA
+                    {
+                    COMMA163=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2174); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA163);
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            int alt57=2;
+            alt57 = dfa57.predict(input);
+            switch (alt57) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    {
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2180);
+                    reverse_key164=reverse_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key164.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2184);
+                    pc3=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(pc3.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:32: ( COMMA )?
+                    int alt56=2;
+                    int LA56_0 = input.LA(1);
+
+                    if ( (LA56_0==COMMA) ) {
+                        alt56=1;
+                    }
+                    switch (alt56) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:32: COMMA
+                            {
+                            COMMA165=(Token)input.LT(1);
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2186); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COMMA.add(COMMA165);
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2192);
+            result_key166=result_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_result_key.add(result_key166.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2196);
+            pc4=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc4.getTree());
+
+            // AST REWRITE
+            // elements: pc3, init_key, pc4, result_key, reverse_key, action_key, pc2, pc1
+            // token labels: 
+            // rule labels: pc2, pc4, pc3, pc1, retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_pc2=new RewriteRuleSubtreeStream(adaptor,"token pc2",pc2!=null?pc2.tree:null);
+            RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
+            RewriteRuleSubtreeStream stream_pc3=new RewriteRuleSubtreeStream(adaptor,"token pc3",pc3!=null?pc3.tree:null);
+            RewriteRuleSubtreeStream stream_pc1=new RewriteRuleSubtreeStream(adaptor,"token pc1",pc1!=null?pc1.tree:null);
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 568:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_INIT_CLAUSE, "VT_ACCUMULATE_INIT_CLAUSE"), root_1);
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:33: ^( init_key $pc1)
+                {
+                Object root_2 = (Object)adaptor.nil();
+                root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
+
+                adaptor.addChild(root_2, stream_pc1.next());
+
+                adaptor.addChild(root_1, root_2);
+                }
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:50: ^( action_key $pc2)
+                {
+                Object root_2 = (Object)adaptor.nil();
+                root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
+
+                adaptor.addChild(root_2, stream_pc2.next());
+
+                adaptor.addChild(root_1, root_2);
+                }
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:69: ( ^( reverse_key $pc3) )?
+                if ( stream_pc3.hasNext()||stream_reverse_key.hasNext() ) {
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:69: ^( reverse_key $pc3)
+                    {
+                    Object root_2 = (Object)adaptor.nil();
+                    root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
+
+                    adaptor.addChild(root_2, stream_pc3.next());
+
+                    adaptor.addChild(root_1, root_2);
+                    }
+
+                }
+                stream_pc3.reset();
+                stream_reverse_key.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:90: ^( result_key $pc4)
+                {
+                Object root_2 = (Object)adaptor.nil();
+                root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
+
+                adaptor.addChild(root_2, stream_pc4.next());
+
+                adaptor.addChild(root_1, root_2);
+                }
+
+                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 accumulate_init_clause
+
+    public static class accumulate_id_clause_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start accumulate_id_clause
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
+    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);
+
+        Object root_0 = null;
+
+        Token id=null;
+        paren_chunk_return text = null;
+
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:4: id= ID text= paren_chunk
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2245); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2249);
+            text=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(text.getTree());
+
+            // AST REWRITE
+            // elements: paren_chunk, ID
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 573:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_ID_CLAUSE, "VT_ACCUMULATE_ID_CLAUSE"), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end accumulate_id_clause
+
+    public static class collect_statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start collect_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
+    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_PAREN168=null;
+        Token RIGHT_PAREN170=null;
+        collect_key_return collect_key167 = null;
+
+        pattern_source_return pattern_source169 = null;
+
+
+        Object LEFT_PAREN168_tree=null;
+        Object RIGHT_PAREN170_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_collect_key=new RewriteRuleSubtreeStream(adaptor,"rule collect_key");
+        RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_collect_key_in_collect_statement2271);
+            collect_key167=collect_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_collect_key.add(collect_key167.getTree());
+            LEFT_PAREN168=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2275); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN168);
+
+            pushFollow(FOLLOW_pattern_source_in_collect_statement2277);
+            pattern_source169=pattern_source();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_pattern_source.add(pattern_source169.getTree());
+            RIGHT_PAREN170=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2279); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN170);
+
+
+            // AST REWRITE
+            // elements: RIGHT_PAREN, collect_key, pattern_source
+            // 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();
+            // 579:2: -> ^( collect_key pattern_source RIGHT_PAREN )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579:5: ^( collect_key pattern_source RIGHT_PAREN )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_pattern_source.next());
+                adaptor.addChild(root_1, stream_RIGHT_PAREN.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 collect_statement
+
+    public static class entrypoint_statement_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start entrypoint_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
+    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_key171 = null;
+
+        entrypoint_id_return entrypoint_id172 = null;
+
+
+        RewriteRuleSubtreeStream stream_entrypoint_id=new RewriteRuleSubtreeStream(adaptor,"rule entrypoint_id");
+        RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:4: entry_point_key entrypoint_id
+            {
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2301);
+            entry_point_key171=entry_point_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key171.getTree());
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2303);
+            entrypoint_id172=entrypoint_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id172.getTree());
+
+            // AST REWRITE
+            // elements: entry_point_key, entrypoint_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();
+            // 584:2: -> ^( entry_point_key entrypoint_id )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:5: ^( entry_point_key entrypoint_id )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_entrypoint_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 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/DRL.g:587: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/DRL.g:588:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            int alt58=2;
+            int LA58_0 = input.LA(1);
+
+            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("587:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 58, 0, input);
+
+                throw nvae;
+            }
+            switch (alt58) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id2326); 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();
+                    // 588: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/DRL.g:589:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2339); 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();
+                    // 589: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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    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 ID173=null;
+        paren_chunk_return args = null;
+
+        expression_chain_return expression_chain174 = null;
+
+
+        Object ID173_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            {
+            ID173=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_source2355); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID173);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            int alt59=2;
+            alt59 = dfa59.predict(input);
+            switch (alt59) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ( LEFT_PAREN )=>args= paren_chunk
+                    {
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2368);
+                    args=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(args.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: ( expression_chain )?
+            int alt60=2;
+            int LA60_0 = input.LA(1);
+
+            if ( (LA60_0==DOT) ) {
+                alt60=1;
+            }
+            switch (alt60) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: expression_chain
+                    {
+                    pushFollow(FOLLOW_expression_chain_in_from_source2375);
+                    expression_chain174=expression_chain();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain174.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: expression_chain, paren_chunk, ID
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 596:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FROM_SOURCE, "VT_FROM_SOURCE"), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:25: ( paren_chunk )?
+                if ( stream_paren_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                }
+                stream_paren_chunk.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:38: ( expression_chain )?
+                if ( stream_expression_chain.hasNext() ) {
+                    adaptor.addChild(root_1, stream_expression_chain.next());
+
+                }
+                stream_expression_chain.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 from_source
+
+    public static class expression_chain_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start expression_chain
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
+    public final expression_chain_return expression_chain() throws RecognitionException {
+        expression_chain_return retval = new expression_chain_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token startToken=null;
+        Token ID175=null;
+        square_chunk_return square_chunk176 = null;
+
+        paren_chunk_return paren_chunk177 = null;
+
+        expression_chain_return expression_chain178 = null;
+
+
+        Object startToken_tree=null;
+        Object ID175_tree=null;
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
+        RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
+            {
+            startToken=(Token)input.LT(1);
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2407); if (failed) return retval;
+            if ( backtracking==0 ) stream_DOT.add(startToken);
+
+            ID175=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain2409); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID175);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            int alt61=3;
+            alt61 = dfa61.predict(input);
+            switch (alt61) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:6: ( LEFT_SQUARE )=> square_chunk
+                    {
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain2429);
+                    square_chunk176=square_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk176.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:6: ( LEFT_PAREN )=> paren_chunk
+                    {
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2451);
+                    paren_chunk177=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk177.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: ( expression_chain )?
+            int alt62=2;
+            int LA62_0 = input.LA(1);
+
+            if ( (LA62_0==DOT) ) {
+                alt62=1;
+            }
+            switch (alt62) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: expression_chain
+                    {
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2462);
+                    expression_chain178=expression_chain();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain178.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: paren_chunk, square_chunk, ID, expression_chain
+            // 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();
+            // 608:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_EXPRESSION_CHAIN, startToken), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:45: ( square_chunk )?
+                if ( stream_square_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_square_chunk.next());
+
+                }
+                stream_square_chunk.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:59: ( paren_chunk )?
+                if ( stream_paren_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                }
+                stream_paren_chunk.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:72: ( expression_chain )?
+                if ( stream_expression_chain.hasNext() ) {
+                    adaptor.addChild(root_1, stream_expression_chain.next());
+
+                }
+                stream_expression_chain.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 expression_chain
+
+    public static class lhs_pattern_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_pattern
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    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_binding179 = null;
+
+        fact_return fact180 = null;
+
+
+        RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
+        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            int alt63=2;
+            int LA63_0 = input.LA(1);
+
+            if ( (LA63_0==ID) ) {
+                int LA63_1 = input.LA(2);
+
+                if ( (LA63_1==COLON) ) {
+                    alt63=1;
+                }
+                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("611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 0, input);
+
+                throw nvae;
+            }
+            switch (alt63) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:4: fact_binding
+                    {
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2495);
+                    fact_binding179=fact_binding();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding179.getTree());
+
+                    // AST REWRITE
+                    // elements: fact_binding
+                    // 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();
+                    // 612:17: -> ^( VT_PATTERN fact_binding )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:20: ^( VT_PATTERN fact_binding )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
+
+                        adaptor.addChild(root_1, stream_fact_binding.next());
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:4: fact
+                    {
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2508);
+                    fact180=fact();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact.add(fact180.getTree());
+
+                    // AST REWRITE
+                    // elements: fact
+                    // 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();
+                    // 613:9: -> ^( VT_PATTERN fact )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:12: ^( VT_PATTERN fact )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
+
+                        adaptor.addChild(root_1, stream_fact.next());
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    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 lhs_pattern
+
+    public static class fact_binding_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start fact_binding
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
+    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_PAREN183=null;
+        Token RIGHT_PAREN185=null;
+        label_return label181 = null;
+
+        fact_return fact182 = null;
+
+        fact_binding_expression_return fact_binding_expression184 = null;
+
+
+        Object LEFT_PAREN183_tree=null;
+        Object RIGHT_PAREN185_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
+        RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
+        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            {
+            pushFollow(FOLLOW_label_in_fact_binding2528);
+            label181=label();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_label.add(label181.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
+
+            if ( (LA64_0==ID) ) {
+                alt64=1;
+            }
+            else if ( (LA64_0==LEFT_PAREN) ) {
+                alt64=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("618:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 64, 0, input);
+
+                throw nvae;
+            }
+            switch (alt64) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:5: fact
+                    {
+                    pushFollow(FOLLOW_fact_in_fact_binding2534);
+                    fact182=fact();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact.add(fact182.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    {
+                    LEFT_PAREN183=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2541); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN183);
+
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2543);
+                    fact_binding_expression184=fact_binding_expression();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression184.getTree());
+                    RIGHT_PAREN185=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2545); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN185);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: fact, fact_binding_expression, label, RIGHT_PAREN
+            // 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();
+            // 621:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_BINDING, "VT_FACT_BINDING"), root_1);
+
+                adaptor.addChild(root_1, stream_label.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:30: ( fact )?
+                if ( stream_fact.hasNext() ) {
+                    adaptor.addChild(root_1, stream_fact.next());
+
+                }
+                stream_fact.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:36: ( fact_binding_expression )?
+                if ( stream_fact_binding_expression.hasNext() ) {
+                    adaptor.addChild(root_1, stream_fact_binding_expression.next());
+
+                }
+                stream_fact_binding_expression.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:61: ( RIGHT_PAREN )?
+                if ( stream_RIGHT_PAREN.hasNext() ) {
+                    adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
+
+                }
+                stream_RIGHT_PAREN.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 fact_binding
+
+    public static class fact_binding_expression_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start fact_binding_expression
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
+    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);
+
+        Object root_0 = null;
+
+        Token pipe=null;
+        or_key_return value = null;
+
+        fact_return fact186 = null;
+
+        fact_return fact187 = null;
+
+
+        Object pipe_tree=null;
+        RewriteRuleTokenStream stream_DOUBLE_PIPE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_PIPE");
+        RewriteRuleSubtreeStream stream_or_key=new RewriteRuleSubtreeStream(adaptor,"rule or_key");
+        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
+
+        	Token orToken = null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:5: ( fact -> fact )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:6: fact
+            {
+            pushFollow(FOLLOW_fact_in_fact_binding_expression2584);
+            fact186=fact();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_fact.add(fact186.getTree());
+
+            // AST REWRITE
+            // elements: fact
+            // 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();
+            // 627:11: -> fact
+            {
+                adaptor.addChild(root_0, stream_fact.next());
+
+            }
+
+            }
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            loop66:
+            do {
+                int alt66=2;
+                int LA66_0 = input.LA(1);
+
+                if ( (LA66_0==ID) && ((validateIdentifierKey("or")))) {
+                    alt66=1;
+                }
+                else if ( (LA66_0==DOUBLE_PIPE) ) {
+                    alt66=1;
+                }
+
+
+                switch (alt66) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    {
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    int alt65=2;
+            	    int LA65_0 = input.LA(1);
+
+            	    if ( (LA65_0==ID) && ((validateIdentifierKey("or")))) {
+            	        alt65=1;
+            	    }
+            	    else if ( (LA65_0==DOUBLE_PIPE) ) {
+            	        alt65=2;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        NoViableAltException nvae =
+            	            new NoViableAltException("627:22: (value= or_key | pipe= DOUBLE_PIPE )", 65, 0, input);
+
+            	        throw nvae;
+            	    }
+            	    switch (alt65) {
+            	        case 1 :
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:23: value= or_key
+            	            {
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2596);
+            	            value=or_key();
+            	            _fsp--;
+            	            if (failed) return retval;
+            	            if ( backtracking==0 ) stream_or_key.add(value.getTree());
+            	            if ( backtracking==0 ) {
+            	              orToken = ((Token)value.start);
+            	            }
+
+            	            }
+            	            break;
+            	        case 2 :
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:62: pipe= DOUBLE_PIPE
+            	            {
+            	            pipe=(Token)input.LT(1);
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2602); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
+
+            	            if ( backtracking==0 ) {
+            	              orToken = pipe;
+            	            }
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2607);
+            	    fact187=fact();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_fact.add(fact187.getTree());
+
+            	    // AST REWRITE
+            	    // elements: fact, fact_binding_expression
+            	    // 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:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    {
+            	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        {
+            	        Object root_1 = (Object)adaptor.nil();
+            	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_OR, orToken), root_1);
+
+            	        adaptor.addChild(root_1, stream_retval.next());
+            	        adaptor.addChild(root_1, stream_fact.next());
+
+            	        adaptor.addChild(root_0, root_1);
+            	        }
+
+            	    }
+
+            	    }
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop66;
+                }
+            } 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 fact_binding_expression
+
+    public static class fact_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start fact
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:631:1: fact : data_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT data_type ( constraints )? RIGHT_PAREN ) ;
+    public final fact_return fact() throws RecognitionException {
+        fact_return retval = new fact_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN189=null;
+        Token RIGHT_PAREN191=null;
+        data_type_return data_type188 = null;
+
+        constraints_return constraints190 = null;
+
+
+        Object LEFT_PAREN189_tree=null;
+        Object RIGHT_PAREN191_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
+        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:2: ( data_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT data_type ( constraints )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:4: data_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_data_type_in_fact2636);
+            data_type188=data_type();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_data_type.add(data_type188.getTree());
+            LEFT_PAREN189=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2638); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN189);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:25: ( constraints )?
+            int alt67=2;
+            int LA67_0 = input.LA(1);
+
+            if ( (LA67_0==ID||LA67_0==LEFT_PAREN) ) {
+                alt67=1;
+            }
+            switch (alt67) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:25: constraints
+                    {
+                    pushFollow(FOLLOW_constraints_in_fact2640);
+                    constraints190=constraints();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_constraints.add(constraints190.getTree());
+
+                    }
+                    break;
+
+            }
+
+            RIGHT_PAREN191=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2643); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN191);
+
+
+            // AST REWRITE
+            // elements: RIGHT_PAREN, data_type, constraints
+            // 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();
+            // 633:2: -> ^( VT_FACT data_type ( constraints )? RIGHT_PAREN )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:5: ^( VT_FACT data_type ( constraints )? RIGHT_PAREN )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT, "VT_FACT"), root_1);
+
+                adaptor.addChild(root_1, stream_data_type.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:25: ( constraints )?
+                if ( stream_constraints.hasNext() ) {
+                    adaptor.addChild(root_1, stream_constraints.next());
+
+                }
+                stream_constraints.reset();
+                adaptor.addChild(root_1, stream_RIGHT_PAREN.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 fact
+
+    public static class constraints_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start constraints
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:636: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 COMMA193=null;
+        constraint_return constraint192 = null;
+
+        constraint_return constraint194 = null;
+
+
+        Object COMMA193_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:4: constraint ( COMMA constraint )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_constraint_in_constraints2668);
+            constraint192=constraint();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint192.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:15: ( COMMA constraint )*
+            loop68:
+            do {
+                int alt68=2;
+                int LA68_0 = input.LA(1);
+
+                if ( (LA68_0==COMMA) ) {
+                    alt68=1;
+                }
+
+
+                switch (alt68) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:17: COMMA constraint
+            	    {
+            	    COMMA193=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2672); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints2675);
+            	    constraint194=constraint();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint194.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop68;
+                }
+            } 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 constraints
+
+    public static class constraint_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start constraint
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640: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_constr195 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:2: ( or_constr )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:4: or_constr
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_or_constr_in_constraint2689);
+            or_constr195=or_constr();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr195.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 constraint
+
+    public static class or_constr_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start or_constr
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    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_PIPE197=null;
+        and_constr_return and_constr196 = null;
+
+        and_constr_return and_constr198 = null;
+
+
+        Object DOUBLE_PIPE197_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:4: and_constr ( DOUBLE_PIPE and_constr )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_and_constr_in_or_constr2700);
+            and_constr196=and_constr();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr196.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:15: ( DOUBLE_PIPE and_constr )*
+            loop69:
+            do {
+                int alt69=2;
+                int LA69_0 = input.LA(1);
+
+                if ( (LA69_0==DOUBLE_PIPE) ) {
+                    alt69=1;
+                }
+
+
+                switch (alt69) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:17: DOUBLE_PIPE and_constr
+            	    {
+            	    DOUBLE_PIPE197=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2704); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_PIPE197_tree = (Object)adaptor.create(DOUBLE_PIPE197);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE197_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_and_constr_in_or_constr2707);
+            	    and_constr198=and_constr();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr198.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop69;
+                }
+            } 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 or_constr
+
+    public static class and_constr_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start and_constr
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    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_AMPER200=null;
+        unary_constr_return unary_constr199 = null;
+
+        unary_constr_return unary_constr201 = null;
+
+
+        Object DOUBLE_AMPER200_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_unary_constr_in_and_constr2722);
+            unary_constr199=unary_constr();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr199.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:17: ( DOUBLE_AMPER unary_constr )*
+            loop70:
+            do {
+                int alt70=2;
+                int LA70_0 = input.LA(1);
+
+                if ( (LA70_0==DOUBLE_AMPER) ) {
+                    alt70=1;
+                }
+
+
+                switch (alt70) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:19: DOUBLE_AMPER unary_constr
+            	    {
+            	    DOUBLE_AMPER200=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2726); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_AMPER200_tree = (Object)adaptor.create(DOUBLE_AMPER200);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER200_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr2729);
+            	    unary_constr201=unary_constr();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr201.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop70;
+                }
+            } 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 and_constr
+
+    public static class unary_constr_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start unary_constr
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );
+    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_PAREN205=null;
+        Token RIGHT_PAREN207=null;
+        eval_key_return eval_key202 = null;
+
+        paren_chunk_return paren_chunk203 = null;
+
+        field_constraint_return field_constraint204 = null;
+
+        or_constr_return or_constr206 = null;
+
+
+        Object LEFT_PAREN205_tree=null;
+        Object RIGHT_PAREN207_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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN )
+            int alt71=3;
+            int LA71_0 = input.LA(1);
+
+            if ( (LA71_0==ID) ) {
+                int LA71_1 = input.LA(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 ( (LA71_1==LEFT_PAREN) ) {
+                    int LA71_4 = input.LA(3);
+
+                    if ( ((validateIdentifierKey("eval"))) ) {
+                        alt71=1;
+                    }
+                    else if ( (true) ) {
+                        alt71=2;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 4, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA71_0==LEFT_PAREN) ) {
+                alt71=3;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 0, input);
+
+                throw nvae;
+            }
+            switch (alt71) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:4: eval_key paren_chunk
+                    {
+                    pushFollow(FOLLOW_eval_key_in_unary_constr2750);
+                    eval_key202=eval_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_eval_key.add(eval_key202.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2752);
+                    paren_chunk203=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk203.getTree());
+
+                    // AST REWRITE
+                    // elements: paren_chunk, eval_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();
+                    // 654:25: -> ^( eval_key paren_chunk )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:28: ^( eval_key paren_chunk )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
+
+                        adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:4: field_constraint
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr2765);
+                    field_constraint204=field_constraint();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint204.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    {
+                    LEFT_PAREN205=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2770); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN205);
+
+                    pushFollow(FOLLOW_or_constr_in_unary_constr2772);
+                    or_constr206=or_constr();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_constr.add(or_constr206.getTree());
+                    RIGHT_PAREN207=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2774); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN207);
+
+
+                    // AST REWRITE
+                    // elements: or_constr, RIGHT_PAREN
+                    // 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:37: -> or_constr RIGHT_PAREN
+                    {
+                        adaptor.addChild(root_0, stream_or_constr.next());
+                        adaptor.addChild(root_0, stream_RIGHT_PAREN.next());
+
+                    }
+
+                    }
+
+                    }
+                    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 unary_constr
+
+    public static class field_constraint_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start field_constraint
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:659:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
+    public final field_constraint_return field_constraint() throws RecognitionException {
+        field_constraint_return retval = new field_constraint_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token arw=null;
+        label_return label208 = null;
+
+        accessor_path_return accessor_path209 = null;
+
+        or_restr_connective_return or_restr_connective210 = null;
+
+        paren_chunk_return paren_chunk211 = null;
+
+        accessor_path_return accessor_path212 = null;
+
+        or_restr_connective_return or_restr_connective213 = null;
+
+
+        Object arw_tree=null;
+        RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW");
+        RewriteRuleSubtreeStream stream_accessor_path=new RewriteRuleSubtreeStream(adaptor,"rule accessor_path");
+        RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        RewriteRuleSubtreeStream stream_or_restr_connective=new RewriteRuleSubtreeStream(adaptor,"rule or_restr_connective");
+
+        	boolean isArrow = false;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
+            int alt73=2;
+            int LA73_0 = input.LA(1);
+
+            if ( (LA73_0==ID) ) {
+                int LA73_1 = input.LA(2);
+
+                if ( (LA73_1==COLON) ) {
+                    alt73=1;
+                }
+                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("659:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("659:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 0, input);
+
+                throw nvae;
+            }
+            switch (alt73) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    {
+                    pushFollow(FOLLOW_label_in_field_constraint2794);
+                    label208=label();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_label.add(label208.getTree());
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2796);
+                    accessor_path209=accessor_path();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path209.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    int alt72=3;
+                    int LA72_0 = input.LA(1);
+
+                    if ( (LA72_0==ID||LA72_0==LEFT_PAREN||(LA72_0>=EQUAL && LA72_0<=NOT_EQUAL)) ) {
+                        alt72=1;
+                    }
+                    else if ( (LA72_0==ARROW) ) {
+                        alt72=2;
+                    }
+                    switch (alt72) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:27: or_restr_connective
+                            {
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2800);
+                            or_restr_connective210=or_restr_connective();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective210.getTree());
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:49: arw= ARROW paren_chunk
+                            {
+                            arw=(Token)input.LT(1);
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2806); if (failed) return retval;
+                            if ( backtracking==0 ) stream_ARROW.add(arw);
+
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2808);
+                            paren_chunk211=paren_chunk();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk211.getTree());
+                            if ( backtracking==0 ) {
+                              isArrow = true;
+                            }
+
+                            }
+                            break;
+
+                    }
+
+
+                    // AST REWRITE
+                    // elements: accessor_path, label, accessor_path, paren_chunk, or_restr_connective, label
+                    // 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:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    if (isArrow) {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
+
+                        adaptor.addChild(root_1, stream_label.next());
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:39: ^( VT_FIELD accessor_path )
+                        {
+                        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());
+
+                        adaptor.addChild(root_1, root_2);
+                        }
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        if ( stream_paren_chunk.hasNext() ) {
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:66: ^( VK_EVAL[$arw] paren_chunk )
+                            {
+                            Object root_1 = (Object)adaptor.nil();
+                            root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
+
+                            adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                            adaptor.addChild(root_0, root_1);
+                            }
+
+                        }
+                        stream_paren_chunk.reset();
+
+                    }
+                    else // 664:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
+
+                        adaptor.addChild(root_1, stream_label.next());
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        {
+                        Object root_2 = (Object)adaptor.nil();
+                        root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
+
+                        adaptor.addChild(root_2, stream_accessor_path.next());
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:53: ( or_restr_connective )?
+                        if ( stream_or_restr_connective.hasNext() ) {
+                            adaptor.addChild(root_2, stream_or_restr_connective.next());
+
+                        }
+                        stream_or_restr_connective.reset();
+
+                        adaptor.addChild(root_1, root_2);
+                        }
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:4: accessor_path or_restr_connective
+                    {
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2862);
+                    accessor_path212=accessor_path();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path212.getTree());
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2864);
+                    or_restr_connective213=or_restr_connective();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective213.getTree());
+
+                    // AST REWRITE
+                    // elements: or_restr_connective, accessor_path
+                    // 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();
+                    // 666:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    {
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_1);
+
+                        adaptor.addChild(root_1, stream_accessor_path.next());
+                        adaptor.addChild(root_1, stream_or_restr_connective.next());
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    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 field_constraint
+
+    public static class label_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start label
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    public final label_return label() throws RecognitionException {
+        label_return retval = new label_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token value=null;
+        Token COLON214=null;
+
+        Object value_tree=null;
+        Object COLON214_tree=null;
+        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:9: value= ID COLON
+            {
+            value=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_label2888); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(value);
+
+            COLON214=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_label2890); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON214);
+
+
+            // 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();
+            // 669:24: -> VT_LABEL[$value]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
+
+            }
+
+            }
+
+            }
+
+            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 label
+
+    public static class or_restr_connective_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start or_restr_connective
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:1: or_restr_connective : and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* ;
+    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_PIPE216=null;
+        and_restr_connective_return and_restr_connective215 = null;
+
+        and_restr_connective_return and_restr_connective217 = null;
+
+
+        Object DOUBLE_PIPE216_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:2: ( and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:4: and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2906);
+            and_restr_connective215=and_restr_connective();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective215.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            loop74:
+            do {
+                int alt74=2;
+                alt74 = dfa74.predict(input);
+                switch (alt74) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:53: DOUBLE_PIPE and_restr_connective
+            	    {
+            	    DOUBLE_PIPE216=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2918); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_PIPE216_tree = (Object)adaptor.create(DOUBLE_PIPE216);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE216_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2921);
+            	    and_restr_connective217=and_restr_connective();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective217.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop74;
+                }
+            } 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 or_restr_connective
+
+    public static class and_restr_connective_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start and_restr_connective
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:1: and_restr_connective : constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* ;
+    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_AMPER219=null;
+        constraint_expression_return constraint_expression218 = null;
+
+        constraint_expression_return constraint_expression220 = null;
+
+
+        Object DOUBLE_AMPER219_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:2: ( constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:4: constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2936);
+            constraint_expression218=constraint_expression();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression218.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            loop75:
+            do {
+                int alt75=2;
+                alt75 = dfa75.predict(input);
+                switch (alt75) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:54: DOUBLE_AMPER constraint_expression
+            	    {
+            	    DOUBLE_AMPER219=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2948); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_AMPER219_tree = (Object)adaptor.create(DOUBLE_AMPER219);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER219_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2951);
+            	    constraint_expression220=constraint_expression();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression220.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop75;
+                }
+            } 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 and_restr_connective
+
+    public static class constraint_expression_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start constraint_expression
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );
+    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_PAREN223=null;
+        Token RIGHT_PAREN225=null;
+        compound_operator_return compound_operator221 = null;
+
+        simple_operator_return simple_operator222 = null;
+
+        or_restr_connective_return or_restr_connective224 = null;
+
+
+        Object LEFT_PAREN223_tree=null;
+        Object RIGHT_PAREN225_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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN )
+            int alt76=3;
+            switch ( input.LA(1) ) {
+            case ID:
+                {
+                switch ( input.LA(2) ) {
+                case ID:
+                    {
+                    int LA76_9 = input.LA(3);
+
+                    if ( (LA76_9==LEFT_SQUARE) ) {
+                        alt76=2;
+                    }
+                    else if ( (LA76_9==ID||LA76_9==STRING||(LA76_9>=BOOL && LA76_9<=INT)||(LA76_9>=FLOAT && LA76_9<=NULL)) && ((validateIdentifierKey("not")))) {
+                        alt76=2;
+                    }
+                    else if ( (LA76_9==LEFT_PAREN) && ((validateIdentifierKey("not")))) {
+                        int LA76_16 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("not"))) ) {
+                            alt76=1;
+                        }
+                        else if ( ((validateIdentifierKey("not"))) ) {
+                            alt76=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 16, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else if ( (LA76_9==EOF||LA76_9==DOT||(LA76_9>=COMMA && LA76_9<=RIGHT_PAREN)||(LA76_9>=DOUBLE_PIPE && LA76_9<=DOUBLE_AMPER)) ) {
+                        alt76=2;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 9, input);
+
+                        throw nvae;
+                    }
+                    }
+                    break;
+                case STRING:
+                case BOOL:
+                case INT:
+                case FLOAT:
+                case NULL:
+                case LEFT_SQUARE:
+                    {
+                    alt76=2;
+                    }
+                    break;
+                case LEFT_PAREN:
+                    {
+                    switch ( input.LA(3) ) {
+                    case ID:
+                        {
+                        int LA76_23 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt76=1;
+                        }
+                        else if ( (true) ) {
+                            alt76=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 23, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case STRING:
+                    case BOOL:
+                    case INT:
+                    case FLOAT:
+                    case NULL:
+                        {
+                        int LA76_24 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt76=1;
+                        }
+                        else if ( (true) ) {
+                            alt76=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 24, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        int LA76_25 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt76=1;
+                        }
+                        else if ( (true) ) {
+                            alt76=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 25, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case VT_COMPILATION_UNIT:
+                    case VT_FUNCTION_IMPORT:
+                    case VT_FACT:
+                    case VT_CONSTRAINTS:
+                    case VT_LABEL:
+                    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:
+                    case VT_AND_IMPLICIT:
+                    case VT_AND_PREFIX:
+                    case VT_OR_PREFIX:
+                    case VT_AND_INFIX:
+                    case VT_OR_INFIX:
+                    case VT_ACCUMULATE_INIT_CLAUSE:
+                    case VT_ACCUMULATE_ID_CLAUSE:
+                    case VT_FROM_SOURCE:
+                    case VT_EXPRESSION_CHAIN:
+                    case VT_PATTERN:
+                    case VT_FACT_BINDING:
+                    case VT_FACT_OR:
+                    case VT_BIND_FIELD:
+                    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:
+                    case VK_EXCLUDES:
+                    case VK_SOUNDSLIKE:
+                    case VK_MEMBEROF:
+                    case VK_ENTRY_POINT:
+                    case VK_NOT:
+                    case VK_IN:
+                    case VK_OR:
+                    case VK_AND:
+                    case VK_EXISTS:
+                    case VK_FORALL:
+                    case VK_FROM:
+                    case VK_ACCUMULATE:
+                    case VK_INIT:
+                    case VK_ACTION:
+                    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 ARROW:
+                    case EQUAL:
+                    case GREATER:
+                    case GREATER_EQUAL:
+                    case LESS:
+                    case LESS_EQUAL:
+                    case NOT_EQUAL:
+                    case LEFT_SQUARE:
+                    case RIGHT_SQUARE:
+                    case THEN:
+                    case LEFT_CURLY:
+                    case RIGHT_CURLY:
+                    case MISC:
+                    case EOL:
+                    case WS:
+                    case EscapeSequence:
+                    case HexDigit:
+                    case UnicodeEscape:
+                    case OctalEscape:
+                    case SH_STYLE_SINGLE_LINE_COMMENT:
+                    case C_STYLE_SINGLE_LINE_COMMENT:
+                    case MULTI_LINE_COMMENT:
+                        {
+                        alt76=2;
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 11, input);
+
+                        throw nvae;
+                    }
+
+                    }
+                    break;
+                default:
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 1, input);
+
+                    throw nvae;
+                }
+
+                }
+                break;
+            case EQUAL:
+            case GREATER:
+            case GREATER_EQUAL:
+            case LESS:
+            case LESS_EQUAL:
+            case NOT_EQUAL:
+                {
+                alt76=2;
+                }
+                break;
+            case LEFT_PAREN:
+                {
+                alt76=3;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt76) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:5: compound_operator
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2973);
+                    compound_operator221=compound_operator();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator221.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:4: simple_operator
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2978);
+                    simple_operator222=simple_operator();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator222.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    {
+                    LEFT_PAREN223=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2983); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN223);
+
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2985);
+                    or_restr_connective224=or_restr_connective();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective224.getTree());
+                    RIGHT_PAREN225=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2987); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN225);
+
+
+                    // AST REWRITE
+                    // elements: RIGHT_PAREN, or_restr_connective
+                    // 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:47: -> or_restr_connective RIGHT_PAREN
+                    {
+                        adaptor.addChild(root_0, stream_or_restr_connective.next());
+                        adaptor.addChild(root_0, stream_RIGHT_PAREN.next());
+
+                    }
+
+                    }
+
+                    }
+                    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 constraint_expression
+
+    public static class simple_operator_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start simple_operator
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value ;
+    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 EQUAL226=null;
+        Token GREATER227=null;
+        Token GREATER_EQUAL228=null;
+        Token LESS229=null;
+        Token LESS_EQUAL230=null;
+        Token NOT_EQUAL231=null;
+        Token ID237=null;
+        Token ID244=null;
+        not_key_return not_key232 = null;
+
+        contains_key_return contains_key233 = null;
+
+        soundslike_key_return soundslike_key234 = null;
+
+        matches_key_return matches_key235 = null;
+
+        memberof_key_return memberof_key236 = null;
+
+        square_chunk_return square_chunk238 = null;
+
+        contains_key_return contains_key239 = null;
+
+        excludes_key_return excludes_key240 = null;
+
+        matches_key_return matches_key241 = null;
+
+        soundslike_key_return soundslike_key242 = null;
+
+        memberof_key_return memberof_key243 = null;
+
+        square_chunk_return square_chunk245 = null;
+
+        expression_value_return expression_value246 = null;
+
+
+        Object EQUAL226_tree=null;
+        Object GREATER227_tree=null;
+        Object GREATER_EQUAL228_tree=null;
+        Object LESS229_tree=null;
+        Object LESS_EQUAL230_tree=null;
+        Object NOT_EQUAL231_tree=null;
+        Object ID237_tree=null;
+        Object ID244_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )
+            int alt80=13;
+            switch ( input.LA(1) ) {
+            case EQUAL:
+                {
+                alt80=1;
+                }
+                break;
+            case GREATER:
+                {
+                alt80=2;
+                }
+                break;
+            case GREATER_EQUAL:
+                {
+                alt80=3;
+                }
+                break;
+            case LESS:
+                {
+                alt80=4;
+                }
+                break;
+            case LESS_EQUAL:
+                {
+                alt80=5;
+                }
+                break;
+            case NOT_EQUAL:
+                {
+                alt80=6;
+                }
+                break;
+            case ID:
+                {
+                int LA80_7 = input.LA(2);
+
+                if ( (LA80_7==ID) && ((validateIdentifierKey("not")))) {
+                    alt80=7;
+                }
+                else if ( ((validateIdentifierKey("contains"))) ) {
+                    alt80=8;
+                }
+                else if ( ((validateIdentifierKey("excludes"))) ) {
+                    alt80=9;
+                }
+                else if ( ((validateIdentifierKey("matches"))) ) {
+                    alt80=10;
+                }
+                else if ( ((validateIdentifierKey("soundslike"))) ) {
+                    alt80=11;
+                }
+                else if ( ((validateIdentifierKey("memberof"))) ) {
+                    alt80=12;
+                }
+                else if ( (true) ) {
+                    alt80=13;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 7, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt80) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:5: EQUAL
+                    {
+                    EQUAL226=(Token)input.LT(1);
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3005); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    EQUAL226_tree = (Object)adaptor.create(EQUAL226);
+                    root_0 = (Object)adaptor.becomeRoot(EQUAL226_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:4: GREATER
+                    {
+                    GREATER227=(Token)input.LT(1);
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3011); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    GREATER227_tree = (Object)adaptor.create(GREATER227);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER227_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: GREATER_EQUAL
+                    {
+                    GREATER_EQUAL228=(Token)input.LT(1);
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3017); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    GREATER_EQUAL228_tree = (Object)adaptor.create(GREATER_EQUAL228);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL228_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: LESS
+                    {
+                    LESS229=(Token)input.LT(1);
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator3023); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    LESS229_tree = (Object)adaptor.create(LESS229);
+                    root_0 = (Object)adaptor.becomeRoot(LESS229_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: LESS_EQUAL
+                    {
+                    LESS_EQUAL230=(Token)input.LT(1);
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3029); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    LESS_EQUAL230_tree = (Object)adaptor.create(LESS_EQUAL230);
+                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL230_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:694:4: NOT_EQUAL
+                    {
+                    NOT_EQUAL231=(Token)input.LT(1);
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3035); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    NOT_EQUAL231_tree = (Object)adaptor.create(NOT_EQUAL231);
+                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL231_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    {
+                    pushFollow(FOLLOW_not_key_in_simple_operator3041);
+                    not_key232=not_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key232.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    int alt78=5;
+                    int LA78_0 = input.LA(1);
+
+                    if ( (LA78_0==ID) ) {
+                        int LA78_1 = input.LA(2);
+
+                        if ( ((validateIdentifierKey("contains"))) ) {
+                            alt78=1;
+                        }
+                        else if ( ((validateIdentifierKey("soundslike"))) ) {
+                            alt78=2;
+                        }
+                        else if ( ((validateIdentifierKey("matches"))) ) {
+                            alt78=3;
+                        }
+                        else if ( ((validateIdentifierKey("memberof"))) ) {
+                            alt78=4;
+                        }
+                        else if ( (true) ) {
+                            alt78=5;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("695:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 1, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("695:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt78) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:13: contains_key
+                            {
+                            pushFollow(FOLLOW_contains_key_in_simple_operator3044);
+                            contains_key233=contains_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key233.getTree(), root_0);
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:27: soundslike_key
+                            {
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3047);
+                            soundslike_key234=soundslike_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key234.getTree(), root_0);
+
+                            }
+                            break;
+                        case 3 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:43: matches_key
+                            {
+                            pushFollow(FOLLOW_matches_key_in_simple_operator3050);
+                            matches_key235=matches_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key235.getTree(), root_0);
+
+                            }
+                            break;
+                        case 4 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:56: memberof_key
+                            {
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator3053);
+                            memberof_key236=memberof_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key236.getTree(), root_0);
+
+                            }
+                            break;
+                        case 5 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:70: ID ( square_chunk )?
+                            {
+                            ID237=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3056); if (failed) return retval;
+                            if ( backtracking==0 ) {
+                            ID237_tree = (Object)adaptor.create(ID237);
+                            root_0 = (Object)adaptor.becomeRoot(ID237_tree, root_0);
+                            }
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:74: ( square_chunk )?
+                            int alt77=2;
+                            int LA77_0 = input.LA(1);
+
+                            if ( (LA77_0==LEFT_SQUARE) ) {
+                                alt77=1;
+                            }
+                            switch (alt77) {
+                                case 1 :
+                                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:74: square_chunk
+                                    {
+                                    pushFollow(FOLLOW_square_chunk_in_simple_operator3059);
+                                    square_chunk238=square_chunk();
+                                    _fsp--;
+                                    if (failed) return retval;
+                                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk238.getTree());
+
+                                    }
+                                    break;
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: contains_key
+                    {
+                    pushFollow(FOLLOW_contains_key_in_simple_operator3066);
+                    contains_key239=contains_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key239.getTree(), root_0);
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: excludes_key
+                    {
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator3072);
+                    excludes_key240=excludes_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key240.getTree(), root_0);
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:4: matches_key
+                    {
+                    pushFollow(FOLLOW_matches_key_in_simple_operator3078);
+                    matches_key241=matches_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key241.getTree(), root_0);
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:4: soundslike_key
+                    {
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3084);
+                    soundslike_key242=soundslike_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key242.getTree(), root_0);
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:4: memberof_key
+                    {
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3090);
+                    memberof_key243=memberof_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key243.getTree(), root_0);
+
+                    }
+                    break;
+                case 13 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: ID ( square_chunk )?
+                    {
+                    ID244=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3096); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    ID244_tree = (Object)adaptor.create(ID244);
+                    root_0 = (Object)adaptor.becomeRoot(ID244_tree, root_0);
+                    }
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:8: ( square_chunk )?
+                    int alt79=2;
+                    int LA79_0 = input.LA(1);
+
+                    if ( (LA79_0==LEFT_SQUARE) ) {
+                        alt79=1;
+                    }
+                    switch (alt79) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:8: square_chunk
+                            {
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3099);
+                            square_chunk245=square_chunk();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk245.getTree());
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_expression_value_in_simple_operator3104);
+            expression_value246=expression_value();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value246.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 simple_operator
+
+    public static class compound_operator_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start compound_operator
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    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_PAREN250=null;
+        Token COMMA252=null;
+        Token RIGHT_PAREN254=null;
+        in_key_return in_key247 = null;
+
+        not_key_return not_key248 = null;
+
+        in_key_return in_key249 = null;
+
+        expression_value_return expression_value251 = null;
+
+        expression_value_return expression_value253 = null;
+
+
+        Object LEFT_PAREN250_tree=null;
+        Object COMMA252_tree=null;
+        Object RIGHT_PAREN254_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:4: ( in_key | not_key in_key )
+            int alt81=2;
+            int LA81_0 = input.LA(1);
+
+            if ( (LA81_0==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("in"))))) {
+                int LA81_1 = input.LA(2);
+
+                if ( (LA81_1==ID) && ((validateIdentifierKey("not")))) {
+                    alt81=2;
+                }
+                else if ( (LA81_1==LEFT_PAREN) && ((validateIdentifierKey("in")))) {
+                    alt81=1;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("707:4: ( in_key | not_key in_key )", 81, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("707:4: ( in_key | not_key in_key )", 81, 0, input);
+
+                throw nvae;
+            }
+            switch (alt81) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:6: in_key
+                    {
+                    pushFollow(FOLLOW_in_key_in_compound_operator3119);
+                    in_key247=in_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key247.getTree(), root_0);
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:16: not_key in_key
+                    {
+                    pushFollow(FOLLOW_not_key_in_compound_operator3124);
+                    not_key248=not_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key248.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator3126);
+                    in_key249=in_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key249.getTree(), root_0);
+
+                    }
+                    break;
+
+            }
+
+            LEFT_PAREN250=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3131); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3134);
+            expression_value251=expression_value();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value251.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:63: ( COMMA expression_value )*
+            loop82:
+            do {
+                int alt82=2;
+                int LA82_0 = input.LA(1);
+
+                if ( (LA82_0==COMMA) ) {
+                    alt82=1;
+                }
+
+
+                switch (alt82) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:65: COMMA expression_value
+            	    {
+            	    COMMA252=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3138); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3141);
+            	    expression_value253=expression_value();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value253.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop82;
+                }
+            } while (true);
+
+            RIGHT_PAREN254=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3146); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_PAREN254_tree = (Object)adaptor.create(RIGHT_PAREN254);
+            adaptor.addChild(root_0, RIGHT_PAREN254_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 compound_operator
+
+    public static class expression_value_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start expression_value
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    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_path255 = null;
+
+        literal_constraint_return literal_constraint256 = null;
+
+        paren_chunk_return paren_chunk257 = null;
+
+
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:2: ( accessor_path | literal_constraint | paren_chunk )
+            int alt83=3;
+            switch ( input.LA(1) ) {
+            case ID:
+                {
+                alt83=1;
+                }
+                break;
+            case STRING:
+            case BOOL:
+            case INT:
+            case FLOAT:
+            case NULL:
+                {
+                alt83=2;
+                }
+                break;
+            case LEFT_PAREN:
+                {
+                alt83=3;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("710:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 83, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt83) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:4: accessor_path
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3157);
+                    accessor_path255=accessor_path();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path255.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:4: literal_constraint
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3162);
+                    literal_constraint256=literal_constraint();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint256.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: paren_chunk
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3168);
+                    paren_chunk257=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk257.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 expression_value
+
+    public static class literal_constraint_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start literal_constraint
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    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 set258=null;
+
+        Object set258_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
+            {
+            root_0 = (Object)adaptor.nil();
+
+            set258=(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(set258));
+                errorRecovery=false;failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_literal_constraint0);    throw mse;
+            }
+
+
+            }
+
+            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 literal_constraint
+
+    public static class data_type_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final data_type_return data_type() throws RecognitionException {
+        data_type_return retval = new data_type_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID259=null;
+        Token DOT260=null;
+        Token ID261=null;
+        dimension_definition_return dimension_definition262 = null;
+
+
+        Object ID259_tree=null;
+        Object DOT260_tree=null;
+        Object ID261_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+        RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:4: ID ( DOT ID )* ( dimension_definition )*
+            {
+            ID259=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_data_type3210); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID259);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:7: ( DOT ID )*
+            loop84:
+            do {
+                int alt84=2;
+                int LA84_0 = input.LA(1);
+
+                if ( (LA84_0==DOT) ) {
+                    alt84=1;
+                }
+
+
+                switch (alt84) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:9: DOT ID
+            	    {
+            	    DOT260=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3214); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT260);
+
+            	    ID261=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type3216); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID261);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop84;
+                }
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:19: ( dimension_definition )*
+            loop85:
+            do {
+                int alt85=2;
+                int LA85_0 = input.LA(1);
+
+                if ( (LA85_0==LEFT_SQUARE) ) {
+                    alt85=1;
+                }
+
+
+                switch (alt85) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:19: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3221);
+            	    dimension_definition262=dimension_definition();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition262.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop85;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: dimension_definition, ID
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 726:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_DATA_TYPE, "VT_DATA_TYPE"), root_1);
+
+                if ( !(stream_ID.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_ID.hasNext() ) {
+                    adaptor.addChild(root_1, stream_ID.next());
+
+                }
+                stream_ID.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:25: ( dimension_definition )*
+                while ( stream_dimension_definition.hasNext() ) {
+                    adaptor.addChild(root_1, stream_dimension_definition.next());
+
+                }
+                stream_dimension_definition.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end 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/DRL.g:729:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    public final dimension_definition_return dimension_definition() throws RecognitionException {
+        dimension_definition_return retval = new dimension_definition_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_SQUARE263=null;
+        Token RIGHT_SQUARE264=null;
+
+        Object LEFT_SQUARE263_tree=null;
+        Object RIGHT_SQUARE264_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:4: LEFT_SQUARE RIGHT_SQUARE
+            {
+            root_0 = (Object)adaptor.nil();
+
+            LEFT_SQUARE263=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3247); if (failed) return retval;
+            if ( backtracking==0 ) {
+            LEFT_SQUARE263_tree = (Object)adaptor.create(LEFT_SQUARE263);
+            adaptor.addChild(root_0, LEFT_SQUARE263_tree);
+            }
+            RIGHT_SQUARE264=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3249); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_SQUARE264_tree = (Object)adaptor.create(RIGHT_SQUARE264);
+            adaptor.addChild(root_0, RIGHT_SQUARE264_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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:733:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    public final accessor_path_return accessor_path() throws RecognitionException {
+        accessor_path_return retval = new accessor_path_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token DOT266=null;
+        accessor_element_return accessor_element265 = null;
+
+        accessor_element_return accessor_element267 = null;
+
+
+        Object DOT266_tree=null;
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+        RewriteRuleSubtreeStream stream_accessor_element=new RewriteRuleSubtreeStream(adaptor,"rule accessor_element");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:4: accessor_element ( DOT accessor_element )*
+            {
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3260);
+            accessor_element265=accessor_element();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element265.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:21: ( DOT accessor_element )*
+            loop86:
+            do {
+                int alt86=2;
+                int LA86_0 = input.LA(1);
+
+                if ( (LA86_0==DOT) ) {
+                    alt86=1;
+                }
+
+
+                switch (alt86) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:23: DOT accessor_element
+            	    {
+            	    DOT266=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3264); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT266);
+
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3266);
+            	    accessor_element267=accessor_element();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element267.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop86;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: accessor_element
+            // 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();
+            // 735:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_PATH, "VT_ACCESSOR_PATH"), root_1);
+
+                if ( !(stream_accessor_element.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_accessor_element.hasNext() ) {
+                    adaptor.addChild(root_1, stream_accessor_element.next());
+
+                }
+                stream_accessor_element.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 accessor_path
+
+    public static class accessor_element_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start accessor_element
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    public final accessor_element_return accessor_element() throws RecognitionException {
+        accessor_element_return retval = new accessor_element_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID268=null;
+        square_chunk_return square_chunk269 = null;
+
+
+        Object ID268_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:4: ID ( square_chunk )*
+            {
+            ID268=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element3290); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID268);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:7: ( square_chunk )*
+            loop87:
+            do {
+                int alt87=2;
+                int LA87_0 = input.LA(1);
+
+                if ( (LA87_0==LEFT_SQUARE) ) {
+                    alt87=1;
+                }
+
+
+                switch (alt87) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:7: square_chunk
+            	    {
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3292);
+            	    square_chunk269=square_chunk();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk269.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop87;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: ID, square_chunk
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 740:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_ELEMENT, "VT_ACCESSOR_ELEMENT"), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:30: ( square_chunk )*
+                while ( stream_square_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_square_chunk.next());
+
+                }
+                stream_square_chunk.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 accessor_element
+
+    public static class rhs_chunk_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start rhs_chunk
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
+    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;
+
+        rhs_chunk_data_return rc = null;
+
+
+        RewriteRuleSubtreeStream stream_rhs_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk_data");
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:5: rc= rhs_chunk_data
+            {
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3321);
+            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);
+            }
+
+            // 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();
+            // 747:2: -> VT_RHS_CHUNK[$rc.start,text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.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 rhs_chunk
+
+    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/DRL.g:750:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    public final rhs_chunk_data_return rhs_chunk_data() throws RecognitionException {
+        rhs_chunk_data_return retval = new rhs_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token THEN270=null;
+        Token set271=null;
+        Token END272=null;
+        Token SEMICOLON273=null;
+
+        Object THEN270_tree=null;
+        Object set271_tree=null;
+        Object END272_tree=null;
+        Object SEMICOLON273_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:2: ( THEN (~ END )* END ( SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:4: THEN (~ END )* END ( SEMICOLON )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            THEN270=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3340); if (failed) return retval;
+            if ( backtracking==0 ) {
+            THEN270_tree = (Object)adaptor.create(THEN270);
+            adaptor.addChild(root_0, THEN270_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751: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/DRL.g:751:11: ~ END
+            	    {
+            	    set271=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=DOT_STAR)||(input.LA(1)>=STRING && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set271));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3344);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop88;
+                }
+            } while (true);
+
+            END272=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3350); if (failed) return retval;
+            if ( backtracking==0 ) {
+            END272_tree = (Object)adaptor.create(END272);
+            adaptor.addChild(root_0, END272_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:23: ( SEMICOLON )?
+            int alt89=2;
+            int LA89_0 = input.LA(1);
+
+            if ( (LA89_0==SEMICOLON) ) {
+                alt89=1;
+            }
+            switch (alt89) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:23: SEMICOLON
+                    {
+                    SEMICOLON273=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3352); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    SEMICOLON273_tree = (Object)adaptor.create(SEMICOLON273);
+                    adaptor.addChild(root_0, SEMICOLON273_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 rhs_chunk_data
+
+    public static class curly_chunk_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start curly_chunk
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:754:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
+    public final curly_chunk_return curly_chunk() throws RecognitionException {
+        curly_chunk_return retval = new curly_chunk_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        curly_chunk_data_return cc = null;
+
+
+        RewriteRuleSubtreeStream stream_curly_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule curly_chunk_data");
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:5: cc= curly_chunk_data
+            {
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3369);
+            cc=curly_chunk_data();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_curly_chunk_data.add(cc.getTree());
+            if ( backtracking==0 ) {
+              text = input.toString(cc.start,cc.stop);
+            }
+
+            // 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();
+            // 758:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.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 curly_chunk
+
+    public static class curly_chunk_data_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start curly_chunk_data
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    public final curly_chunk_data_return curly_chunk_data() throws RecognitionException {
+        curly_chunk_data_return retval = new curly_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_CURLY274=null;
+        Token set275=null;
+        Token RIGHT_CURLY277=null;
+        curly_chunk_data_return curly_chunk_data276 = null;
+
+
+        Object LEFT_CURLY274_tree=null;
+        Object set275_tree=null;
+        Object RIGHT_CURLY277_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            {
+            root_0 = (Object)adaptor.nil();
+
+            LEFT_CURLY274=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3388); if (failed) return retval;
+            if ( backtracking==0 ) {
+            LEFT_CURLY274_tree = (Object)adaptor.create(LEFT_CURLY274);
+            adaptor.addChild(root_0, LEFT_CURLY274_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            loop90:
+            do {
+                int alt90=3;
+                int LA90_0 = input.LA(1);
+
+                if ( ((LA90_0>=VT_COMPILATION_UNIT && LA90_0<=THEN)||(LA90_0>=MISC && LA90_0<=MULTI_LINE_COMMENT)) ) {
+                    alt90=1;
+                }
+                else if ( (LA90_0==LEFT_CURLY) ) {
+                    alt90=2;
+                }
+
+
+                switch (alt90) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    {
+            	    set275=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=THEN)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set275));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3391);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:49: curly_chunk_data
+            	    {
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3405);
+            	    curly_chunk_data276=curly_chunk_data();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data276.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop90;
+                }
+            } while (true);
+
+            RIGHT_CURLY277=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3410); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_CURLY277_tree = (Object)adaptor.create(RIGHT_CURLY277);
+            adaptor.addChild(root_0, RIGHT_CURLY277_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 curly_chunk_data
+
+    public static class paren_chunk_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start paren_chunk
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
+    public final paren_chunk_return paren_chunk() throws RecognitionException {
+        paren_chunk_return retval = new paren_chunk_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        paren_chunk_data_return pc = null;
+
+
+        RewriteRuleSubtreeStream stream_paren_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk_data");
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:5: pc= paren_chunk_data
+            {
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3426);
+            pc=paren_chunk_data();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk_data.add(pc.getTree());
+            if ( backtracking==0 ) {
+              text = input.toString(pc.start,pc.stop);
+            }
+
+            // 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();
+            // 769:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.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 paren_chunk
+
+    public static class paren_chunk_data_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start paren_chunk_data
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    public final paren_chunk_data_return paren_chunk_data() throws RecognitionException {
+        paren_chunk_data_return retval = new paren_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN278=null;
+        Token set279=null;
+        Token RIGHT_PAREN281=null;
+        paren_chunk_data_return paren_chunk_data280 = null;
+
+
+        Object LEFT_PAREN278_tree=null;
+        Object set279_tree=null;
+        Object RIGHT_PAREN281_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            {
+            root_0 = (Object)adaptor.nil();
+
+            LEFT_PAREN278=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3446); if (failed) return retval;
+            if ( backtracking==0 ) {
+            LEFT_PAREN278_tree = (Object)adaptor.create(LEFT_PAREN278);
+            adaptor.addChild(root_0, LEFT_PAREN278_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            loop91:
+            do {
+                int alt91=3;
+                int LA91_0 = input.LA(1);
+
+                if ( ((LA91_0>=VT_COMPILATION_UNIT && LA91_0<=STRING)||LA91_0==COMMA||(LA91_0>=COLON && LA91_0<=MULTI_LINE_COMMENT)) ) {
+                    alt91=1;
+                }
+                else if ( (LA91_0==LEFT_PAREN) ) {
+                    alt91=2;
+                }
+
+
+                switch (alt91) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    {
+            	    set279=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=STRING)||input.LA(1)==COMMA||(input.LA(1)>=COLON && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set279));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3449);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:49: paren_chunk_data
+            	    {
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3463);
+            	    paren_chunk_data280=paren_chunk_data();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data280.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop91;
+                }
+            } while (true);
+
+            RIGHT_PAREN281=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3468); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_PAREN281_tree = (Object)adaptor.create(RIGHT_PAREN281);
+            adaptor.addChild(root_0, RIGHT_PAREN281_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 paren_chunk_data
+
+    public static class square_chunk_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start square_chunk
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    public final square_chunk_return square_chunk() throws RecognitionException {
+        square_chunk_return retval = new square_chunk_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        square_chunk_data_return sc = null;
+
+
+        RewriteRuleSubtreeStream stream_square_chunk_data=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk_data");
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:5: sc= square_chunk_data
+            {
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3485);
+            sc=square_chunk_data();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_square_chunk_data.add(sc.getTree());
+            if ( backtracking==0 ) {
+              text = input.toString(sc.start,sc.stop);
+            }
+
+            // 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();
+            // 780:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.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 square_chunk
+
+    public static class square_chunk_data_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start square_chunk_data
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    public final square_chunk_data_return square_chunk_data() throws RecognitionException {
+        square_chunk_data_return retval = new square_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_SQUARE282=null;
+        Token set283=null;
+        Token RIGHT_SQUARE285=null;
+        square_chunk_data_return square_chunk_data284 = null;
+
+
+        Object LEFT_SQUARE282_tree=null;
+        Object set283_tree=null;
+        Object RIGHT_SQUARE285_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            {
+            root_0 = (Object)adaptor.nil();
+
+            LEFT_SQUARE282=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3504); if (failed) return retval;
+            if ( backtracking==0 ) {
+            LEFT_SQUARE282_tree = (Object)adaptor.create(LEFT_SQUARE282);
+            adaptor.addChild(root_0, LEFT_SQUARE282_tree);
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            loop92:
+            do {
+                int alt92=3;
+                int LA92_0 = input.LA(1);
+
+                if ( ((LA92_0>=VT_COMPILATION_UNIT && LA92_0<=NULL)||(LA92_0>=THEN && LA92_0<=MULTI_LINE_COMMENT)) ) {
+                    alt92=1;
+                }
+                else if ( (LA92_0==LEFT_SQUARE) ) {
+                    alt92=2;
+                }
+
+
+                switch (alt92) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    {
+            	    set283=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set283));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3507);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:52: square_chunk_data
+            	    {
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3521);
+            	    square_chunk_data284=square_chunk_data();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data284.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop92;
+                }
+            } while (true);
+
+            RIGHT_SQUARE285=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3526); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_SQUARE285_tree = (Object)adaptor.create(RIGHT_SQUARE285);
+            adaptor.addChild(root_0, RIGHT_SQUARE285_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 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/DRL.g:788:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    public final date_effective_key_return date_effective_key() throws RecognitionException {
+        date_effective_key_return retval = new date_effective_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID286=null;
+        Token MISC287=null;
+        Token ID288=null;
+
+        Object ID286_tree=null;
+        Object MISC287_tree=null;
+        Object ID288_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/DRL.g:791:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "date_effective_key", "(validateIdentifierKey(\"date\") && validateLT(2, \"-\") && validateLT(3, \"effective\"))");
+            }
+            ID286=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3545); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID286);
+
+            MISC287=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key3547); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC287);
+
+            ID288=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3549); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID288);
+
+            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();
+            // 792: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/DRL.g:795:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
+    public final date_expires_key_return date_expires_key() throws RecognitionException {
+        date_expires_key_return retval = new date_expires_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID289=null;
+        Token MISC290=null;
+        Token ID291=null;
+
+        Object ID289_tree=null;
+        Object MISC290_tree=null;
+        Object ID291_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/DRL.g:798:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "date_expires_key", "(validateIdentifierKey(\"date\") && validateLT(2, \"-\") && validateLT(3, \"expires\"))");
+            }
+            ID289=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3575); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID289);
+
+            MISC290=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key3577); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC290);
+
+            ID291=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3579); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID291);
+
+            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();
+            // 799: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/DRL.g:802:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    public final lock_on_active_key_return lock_on_active_key() throws RecognitionException {
+        lock_on_active_key_return retval = new lock_on_active_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID292=null;
+        Token MISC293=null;
+        Token ID294=null;
+        Token MISC295=null;
+        Token ID296=null;
+
+        Object ID292_tree=null;
+        Object MISC293_tree=null;
+        Object ID294_tree=null;
+        Object MISC295_tree=null;
+        Object ID296_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/DRL.g:805:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:5: {...}? => ID MISC ID MISC ID
+            {
+            if ( !((validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "lock_on_active_key", "(validateIdentifierKey(\"lock\") && validateLT(2, \"-\") && validateLT(3, \"on\") && validateLT(4, \"-\") && validateLT(5, \"active\"))");
+            }
+            ID292=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3605); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID292);
+
+            MISC293=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3607); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC293);
+
+            ID294=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3609); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID294);
+
+            MISC295=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3611); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC295);
+
+            ID296=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3613); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID296);
+
+            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();
+            // 806: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/DRL.g:809:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
+    public final no_loop_key_return no_loop_key() throws RecognitionException {
+        no_loop_key_return retval = new no_loop_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID297=null;
+        Token MISC298=null;
+        Token ID299=null;
+
+        Object ID297_tree=null;
+        Object MISC298_tree=null;
+        Object ID299_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/DRL.g:812:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "no_loop_key", "(validateIdentifierKey(\"no\") && validateLT(2, \"-\") && validateLT(3, \"loop\"))");
+            }
+            ID297=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3639); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID297);
+
+            MISC298=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key3641); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC298);
+
+            ID299=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3643); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID299);
+
+            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();
+            // 813: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/DRL.g:816:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
+    public final auto_focus_key_return auto_focus_key() throws RecognitionException {
+        auto_focus_key_return retval = new auto_focus_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID300=null;
+        Token MISC301=null;
+        Token ID302=null;
+
+        Object ID300_tree=null;
+        Object MISC301_tree=null;
+        Object ID302_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/DRL.g:819:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "auto_focus_key", "(validateIdentifierKey(\"auto\") && validateLT(2, \"-\") && validateLT(3, \"focus\"))");
+            }
+            ID300=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3669); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID300);
+
+            MISC301=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3671); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC301);
+
+            ID302=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3673); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID302);
+
+            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();
+            // 820: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/DRL.g:823:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    public final activation_group_key_return activation_group_key() throws RecognitionException {
+        activation_group_key_return retval = new activation_group_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID303=null;
+        Token MISC304=null;
+        Token ID305=null;
+
+        Object ID303_tree=null;
+        Object MISC304_tree=null;
+        Object ID305_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/DRL.g:826:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "activation_group_key", "(validateIdentifierKey(\"activation\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
+            }
+            ID303=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3699); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID303);
+
+            MISC304=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key3701); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC304);
+
+            ID305=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3703); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID305);
+
+            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();
+            // 827: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/DRL.g:830:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
+    public final agenda_group_key_return agenda_group_key() throws RecognitionException {
+        agenda_group_key_return retval = new agenda_group_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID306=null;
+        Token MISC307=null;
+        Token ID308=null;
+
+        Object ID306_tree=null;
+        Object MISC307_tree=null;
+        Object ID308_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/DRL.g:833:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "agenda_group_key", "(validateIdentifierKey(\"agenda\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
+            }
+            ID306=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3729); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID306);
+
+            MISC307=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3731); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC307);
+
+            ID308=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3733); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID308);
+
+            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();
+            // 834: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/DRL.g:837:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    public final ruleflow_group_key_return ruleflow_group_key() throws RecognitionException {
+        ruleflow_group_key_return retval = new ruleflow_group_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID309=null;
+        Token MISC310=null;
+        Token ID311=null;
+
+        Object ID309_tree=null;
+        Object MISC310_tree=null;
+        Object ID311_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "ruleflow_group_key", "(validateIdentifierKey(\"ruleflow\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
+            }
+            ID309=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3759); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID309);
+
+            MISC310=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3761); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC310);
+
+            ID311=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3763); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID311);
+
+            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();
+            // 841: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/DRL.g:844: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/DRL.g:845:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:845:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("duration"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "duration_key", "(validateIdentifierKey(\"duration\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_duration_key3788); if (failed) return retval;
+            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();
+            // 845: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/DRL.g:848: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/DRL.g:849:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("package"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "package_key", "(validateIdentifierKey(\"package\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_package_key3810); if (failed) return retval;
+            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();
+            // 849: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/DRL.g:852: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/DRL.g:853:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("import"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "import_key", "(validateIdentifierKey(\"import\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_import_key3832); if (failed) return retval;
+            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();
+            // 853: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/DRL.g:856: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/DRL.g:857:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("dialect"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "dialect_key", "(validateIdentifierKey(\"dialect\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_dialect_key3854); if (failed) return retval;
+            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();
+            // 857: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/DRL.g:860: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/DRL.g:861:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("salience"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "salience_key", "(validateIdentifierKey(\"salience\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_salience_key3876); if (failed) return retval;
+            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();
+            // 861: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/DRL.g:864: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/DRL.g:865:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:865:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("enabled"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "enabled_key", "(validateIdentifierKey(\"enabled\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_enabled_key3898); if (failed) return retval;
+            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();
+            // 865: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/DRL.g:868: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/DRL.g:869:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:869:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("attributes"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "attributes_key", "(validateIdentifierKey(\"attributes\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_attributes_key3920); if (failed) return retval;
+            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();
+            // 869: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/DRL.g:872: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/DRL.g:873:2: ({...}? =>id= ID -> VK_WHEN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("when"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "when_key", "(validateIdentifierKey(\"when\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_when_key3942); if (failed) return retval;
+            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();
+            // 873: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/DRL.g:876: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/DRL.g:877:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:877:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("rule"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "rule_key", "(validateIdentifierKey(\"rule\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_rule_key3964); if (failed) return retval;
+            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();
+            // 877: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/DRL.g:880: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/DRL.g:881:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("template"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "template_key", "(validateIdentifierKey(\"template\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_template_key3986); if (failed) return retval;
+            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();
+            // 881: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/DRL.g:884: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/DRL.g:885:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("query"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "query_key", "(validateIdentifierKey(\"query\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_query_key4008); if (failed) return retval;
+            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();
+            // 885: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/DRL.g:888: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/DRL.g:889:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:889:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("declare"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "declare_key", "(validateIdentifierKey(\"declare\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_declare_key4030); if (failed) return retval;
+            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();
+            // 889: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/DRL.g:892: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/DRL.g:893:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:893:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("function"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "function_key", "(validateIdentifierKey(\"function\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_function_key4052); if (failed) return retval;
+            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();
+            // 893: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/DRL.g:896: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/DRL.g:897:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:897:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("global"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "global_key", "(validateIdentifierKey(\"global\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_global_key4074); if (failed) return retval;
+            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();
+            // 897: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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900: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);
+
+        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/DRL.g:901:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("eval"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(\"eval\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_eval_key4096); if (failed) return retval;
+            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();
+            // 901:48: -> VK_EVAL[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_EVAL, 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 eval_key
+
+    public static class contains_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start contains_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    public final contains_key_return contains_key() throws RecognitionException {
+        contains_key_return retval = new contains_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/DRL.g:905:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:905:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("contains"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(\"contains\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_contains_key4118); if (failed) return retval;
+            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();
+            // 905:52: -> VK_CONTAINS[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, 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 contains_key
+
+    public static class matches_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start matches_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    public final matches_key_return matches_key() throws RecognitionException {
+        matches_key_return retval = new matches_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/DRL.g:909:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:909:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("matches"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(\"matches\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_matches_key4140); if (failed) return retval;
+            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();
+            // 909:51: -> VK_MATCHES[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_MATCHES, 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 matches_key
+
+    public static class excludes_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start excludes_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    public final excludes_key_return excludes_key() throws RecognitionException {
+        excludes_key_return retval = new excludes_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/DRL.g:913:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("excludes"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(\"excludes\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_excludes_key4162); if (failed) return retval;
+            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();
+            // 913:52: -> VK_EXCLUDES[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, 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 excludes_key
+
+    public static class soundslike_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start soundslike_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    public final soundslike_key_return soundslike_key() throws RecognitionException {
+        soundslike_key_return retval = new soundslike_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/DRL.g:917:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:917:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("soundslike"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(\"soundslike\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_soundslike_key4184); if (failed) return retval;
+            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();
+            // 917:54: -> VK_SOUNDSLIKE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, 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 soundslike_key
+
+    public static class memberof_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start memberof_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    public final memberof_key_return memberof_key() throws RecognitionException {
+        memberof_key_return retval = new memberof_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/DRL.g:921:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:921:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("memberof"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(\"memberof\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_memberof_key4206); if (failed) return retval;
+            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();
+            // 921:52: -> VK_MEMBEROF[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, 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 memberof_key
+
+    public static class not_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start not_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    public final not_key_return not_key() throws RecognitionException {
+        not_key_return retval = new not_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/DRL.g:925:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:925:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("not"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(\"not\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_not_key4228); if (failed) return retval;
+            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();
+            // 925:47: -> VK_NOT[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_NOT, 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 not_key
+
+    public static class in_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start in_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    public final in_key_return in_key() throws RecognitionException {
+        in_key_return retval = new in_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/DRL.g:929:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:929:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("in"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(\"in\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_in_key4250); if (failed) return retval;
+            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();
+            // 929:46: -> VK_IN[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_IN, 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 in_key
+
+    public static class or_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start or_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    public final or_key_return or_key() throws RecognitionException {
+        or_key_return retval = new or_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/DRL.g:933:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:933:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("or"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(\"or\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_or_key4272); if (failed) return retval;
+            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();
+            // 933:46: -> VK_OR[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_OR, 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 or_key
+
+    public static class and_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start and_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    public final and_key_return and_key() throws RecognitionException {
+        and_key_return retval = new and_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/DRL.g:937:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:937:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("and"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(\"and\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_and_key4294); if (failed) return retval;
+            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();
+            // 937:47: -> VK_AND[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_AND, 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 and_key
+
+    public static class exists_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start exists_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    public final exists_key_return exists_key() throws RecognitionException {
+        exists_key_return retval = new exists_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/DRL.g:941:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("exists"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(\"exists\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_exists_key4316); if (failed) return retval;
+            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();
+            // 941:50: -> VK_EXISTS[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_EXISTS, 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 exists_key
+
+    public static class forall_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start forall_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    public final forall_key_return forall_key() throws RecognitionException {
+        forall_key_return retval = new forall_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/DRL.g:945:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:945:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("forall"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(\"forall\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_forall_key4338); if (failed) return retval;
+            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();
+            // 945:50: -> VK_FORALL[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_FORALL, 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 forall_key
+
+    public static class from_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start from_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    public final from_key_return from_key() throws RecognitionException {
+        from_key_return retval = new from_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/DRL.g:949:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:949:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("from"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(\"from\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_key4360); if (failed) return retval;
+            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();
+            // 949:48: -> VK_FROM[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_FROM, 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 from_key
+
+    public static class entry_point_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start entry_point_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    public final entry_point_key_return entry_point_key() throws RecognitionException {
+        entry_point_key_return retval = new entry_point_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID312=null;
+        Token MISC313=null;
+        Token ID314=null;
+
+        Object ID312_tree=null;
+        Object MISC313_tree=null;
+        Object ID314_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(\"entry\") && validateLT(2, \"-\") && validateLT(3, \"point\"))");
+            }
+            ID312=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4383); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID312);
+
+            MISC313=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4385); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC313);
+
+            ID314=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4387); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID314);
+
+            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();
+            // 956:2: -> VK_ENTRY_POINT[$start, text]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((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 entry_point_key
+
+    public static class accumulate_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start accumulate_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    public final accumulate_key_return accumulate_key() throws RecognitionException {
+        accumulate_key_return retval = new accumulate_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/DRL.g:960:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("accumulate"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(\"accumulate\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accumulate_key4412); if (failed) return retval;
+            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();
+            // 960:54: -> VK_ACCUMULATE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, 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 accumulate_key
+
+    public static class init_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start init_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    public final init_key_return init_key() throws RecognitionException {
+        init_key_return retval = new init_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/DRL.g:964:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:964:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("init"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(\"init\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_init_key4434); if (failed) return retval;
+            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();
+            // 964:48: -> VK_INIT[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_INIT, 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 init_key
+
+    public static class action_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start action_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    public final action_key_return action_key() throws RecognitionException {
+        action_key_return retval = new action_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/DRL.g:968:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("action"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(\"action\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_action_key4456); if (failed) return retval;
+            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();
+            // 968:50: -> VK_ACTION[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_ACTION, 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 action_key
+
+    public static class reverse_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start reverse_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    public final reverse_key_return reverse_key() throws RecognitionException {
+        reverse_key_return retval = new reverse_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/DRL.g:972:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:972:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("reverse"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(\"reverse\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_reverse_key4478); if (failed) return retval;
+            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();
+            // 972:51: -> VK_REVERSE[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_REVERSE, 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 reverse_key
+
+    public static class result_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start result_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    public final result_key_return result_key() throws RecognitionException {
+        result_key_return retval = new result_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/DRL.g:976:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("result"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(\"result\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_result_key4500); if (failed) return retval;
+            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();
+            // 976:50: -> VK_RESULT[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_RESULT, 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 result_key
+
+    public static class collect_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start collect_key
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    public final collect_key_return collect_key() throws RecognitionException {
+        collect_key_return retval = new collect_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/DRL.g:980:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:980:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("collect"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(\"collect\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_collect_key4522); if (failed) return retval;
+            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();
+            // 980:51: -> VK_COLLECT[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VK_COLLECT, 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 collect_key
+
+    // $ANTLR start synpred1
+    public final void synpred1_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:6: LEFT_PAREN or_key
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11487); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred11489);
+        or_key();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred1
+
+    // $ANTLR start synpred2
+    public final void synpred2_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: ( or_key | DOUBLE_PIPE )
+        int alt93=2;
+        int LA93_0 = input.LA(1);
+
+        if ( (LA93_0==ID) && ((validateIdentifierKey("or")))) {
+            alt93=1;
+        }
+        else if ( (LA93_0==DOUBLE_PIPE) ) {
+            alt93=2;
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("485:5: synpred2 : ( or_key | DOUBLE_PIPE );", 93, 0, input);
+
+            throw nvae;
+        }
+        switch (alt93) {
+            case 1 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:6: or_key
+                {
+                pushFollow(FOLLOW_or_key_in_synpred21536);
+                or_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:13: DOUBLE_PIPE
+                {
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21538); if (failed) return ;
+
+                }
+                break;
+
+        }}
+    // $ANTLR end synpred2
+
+    // $ANTLR start synpred3
+    public final void synpred3_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:6: LEFT_PAREN and_key
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31589); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred31591);
+        and_key();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred3
+
+    // $ANTLR start synpred4
+    public final void synpred4_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: ( and_key | DOUBLE_AMPER )
+        int alt94=2;
+        int LA94_0 = input.LA(1);
+
+        if ( (LA94_0==ID) && ((validateIdentifierKey("and")))) {
+            alt94=1;
+        }
+        else if ( (LA94_0==DOUBLE_AMPER) ) {
+            alt94=2;
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("495:5: synpred4 : ( and_key | DOUBLE_AMPER );", 94, 0, input);
+
+            throw nvae;
+        }
+        switch (alt94) {
+            case 1 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:6: and_key
+                {
+                pushFollow(FOLLOW_and_key_in_synpred41638);
+                and_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:14: DOUBLE_AMPER
+                {
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41640); if (failed) return ;
+
+                }
+                break;
+
+        }}
+    // $ANTLR end synpred4
+
+    // $ANTLR start synpred5
+    public final void synpred5_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:4: ( SEMICOLON )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:5: SEMICOLON
+        {
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51742); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred5
+
+    // $ANTLR start synpred6
+    public final void synpred6_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:13: LEFT_PAREN ( or_key | and_key )
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61774); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:24: ( or_key | and_key )
+        int alt95=2;
+        int LA95_0 = input.LA(1);
+
+        if ( (LA95_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA95_1 = input.LA(2);
+
+            if ( ((validateIdentifierKey("or"))) ) {
+                alt95=1;
+            }
+            else if ( ((validateIdentifierKey("and"))) ) {
+                alt95=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("513:24: ( or_key | and_key )", 95, 1, input);
+
+                throw nvae;
+            }
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("513:24: ( or_key | and_key )", 95, 0, input);
+
+            throw nvae;
+        }
+        switch (alt95) {
+            case 1 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:25: or_key
+                {
+                pushFollow(FOLLOW_or_key_in_synpred61777);
+                or_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:32: and_key
+                {
+                pushFollow(FOLLOW_and_key_in_synpred61779);
+                and_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred6
+
+    // $ANTLR start synpred7
+    public final void synpred7_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:6: LEFT_PAREN ( or_key | and_key )
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred71861); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:17: ( or_key | and_key )
+        int alt96=2;
+        int LA96_0 = input.LA(1);
+
+        if ( (LA96_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA96_1 = input.LA(2);
+
+            if ( ((validateIdentifierKey("or"))) ) {
+                alt96=1;
+            }
+            else if ( ((validateIdentifierKey("and"))) ) {
+                alt96=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("521:17: ( or_key | and_key )", 96, 1, input);
+
+                throw nvae;
+            }
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("521:17: ( or_key | and_key )", 96, 0, input);
+
+            throw nvae;
+        }
+        switch (alt96) {
+            case 1 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:18: or_key
+                {
+                pushFollow(FOLLOW_or_key_in_synpred71864);
+                or_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:25: and_key
+                {
+                pushFollow(FOLLOW_and_key_in_synpred71866);
+                and_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred7
+
+    // $ANTLR start synpred8
+    public final void synpred8_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:6: LEFT_PAREN
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82362); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred8
+
+    // $ANTLR start synpred9
+    public final void synpred9_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:8: LEFT_SQUARE
+        {
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92423); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred9
+
+    // $ANTLR start synpred10
+    public final void synpred10_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:6: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:8: LEFT_PAREN
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102445); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred10
+
+    // $ANTLR start synpred11
+    public final void synpred11_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:53: ( DOUBLE_PIPE and_restr_connective )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:53: DOUBLE_PIPE and_restr_connective
+        {
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred112918); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred112921);
+        and_restr_connective();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred11
+
+    // $ANTLR start synpred12
+    public final void synpred12_fragment() throws RecognitionException {   
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:54: ( DOUBLE_AMPER constraint_expression )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:54: DOUBLE_AMPER constraint_expression
+        {
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred122948); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred122951);
+        constraint_expression();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred12
+
+    public final boolean synpred12() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred12_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred4() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred4_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred9() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred9_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred7() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred7_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred2() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred2_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred3() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred3_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred1() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred1_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred11() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred11_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred5() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred5_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred6() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred6_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred8() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred8_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred10() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred10_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+
+
+    protected DFA5 dfa5 = new DFA5(this);
+    protected DFA12 dfa12 = new DFA12(this);
+    protected DFA17 dfa17 = new DFA17(this);
+    protected DFA24 dfa24 = new DFA24(this);
+    protected DFA30 dfa30 = new DFA30(this);
+    protected DFA47 dfa47 = new DFA47(this);
+    protected DFA48 dfa48 = new DFA48(this);
+    protected DFA53 dfa53 = new DFA53(this);
+    protected DFA57 dfa57 = new DFA57(this);
+    protected DFA59 dfa59 = new DFA59(this);
+    protected DFA61 dfa61 = new DFA61(this);
+    protected DFA74 dfa74 = new DFA74(this);
+    protected DFA75 dfa75 = new DFA75(this);
+    static final String DFA5_eotS =
+        "\u0085\uffff";
+    static final String DFA5_eofS =
+        "\3\uffff\1\14\1\20\10\uffff\1\14\14\uffff\2\14\4\uffff\1\14\5\uffff"+
+        "\1\20\1\uffff\1\20\5\uffff\1\14\5\uffff\1\106\1\uffff\1\106\1\20"+
+        "\5\uffff\2\14\1\uffff\1\14\3\uffff\1\14\4\uffff\2\20\1\uffff\1\20"+
+        "\3\uffff\1\20\5\uffff\2\14\1\uffff\1\14\2\20\5\uffff\1\14\1\uffff"+
+        "\2\14\4\uffff\1\20\1\uffff\2\20\3\uffff\1\14\4\uffff\1\20\1\uffff"+
+        "\1\14\5\uffff\1\20\7\uffff";
+    static final String DFA5_minS =
+        "\2\125\1\uffff\2\124\3\uffff\2\125\1\uffff\1\125\1\uffff\1\125\1"+
+        "\154\2\uffff\1\125\1\uffff\4\125\3\0\3\125\1\154\2\uffff\1\124\3"+
+        "\125\2\0\1\125\1\0\1\125\1\0\1\125\1\154\1\125\1\uffff\1\125\2\0"+
+        "\3\125\1\124\1\0\1\124\12\125\3\0\1\125\1\0\1\uffff\1\4\5\125\3"+
+        "\0\1\125\1\154\1\133\1\125\1\154\1\133\2\125\1\4\4\125\1\154\2\125"+
+        "\1\154\4\125\4\4\4\125\1\133\1\154\1\133\1\125\4\4\3\125\5\4\1\125"+
+        "\7\4";
+    static final String DFA5_maxS =
+        "\1\125\1\160\1\uffff\2\155\3\uffff\1\134\1\160\1\uffff\1\125\1\uffff"+
+        "\1\125\1\154\2\uffff\1\160\1\uffff\1\153\1\156\1\125\1\155\3\0\2"+
+        "\155\1\125\1\154\2\uffff\1\153\1\160\1\153\1\125\2\0\1\155\1\0\1"+
+        "\155\1\0\1\125\1\154\1\125\1\uffff\1\160\2\0\1\160\2\153\1\160\1"+
+        "\0\1\132\2\160\3\153\1\125\2\155\1\125\1\155\3\0\1\155\1\0\1\uffff"+
+        "\1\171\1\125\2\155\1\125\1\155\3\0\1\155\1\154\1\153\1\125\1\154"+
+        "\1\153\1\155\1\160\1\171\1\156\1\155\1\160\1\153\1\154\2\153\1\154"+
+        "\1\155\1\125\2\155\4\171\1\155\1\125\2\155\1\153\1\154\1\153\1\155"+
+        "\4\171\1\155\1\153\1\155\5\171\1\155\7\171";
+    static final String DFA5_acceptS =
+        "\2\uffff\1\1\2\uffff\3\1\2\uffff\1\10\1\uffff\1\3\2\uffff\1\7\1"+
+        "\1\1\uffff\1\6\13\uffff\1\2\1\4\15\uffff\1\5\30\uffff\1\4\76\uffff";
+    static final String DFA5_specialS =
+        "\1\74\1\72\1\uffff\1\7\1\11\3\uffff\1\70\1\161\1\uffff\1\65\1\uffff"+
+        "\1\162\1\52\2\uffff\1\31\1\uffff\1\21\1\14\1\45\1\123\1\71\1\157"+
+        "\1\126\1\116\1\102\1\112\1\115\2\uffff\1\13\1\75\1\55\1\40\1\17"+
+        "\1\2\1\165\1\16\1\117\1\156\1\24\1\147\1\142\1\uffff\1\20\1\121"+
+        "\1\144\1\37\1\160\1\36\1\120\1\134\1\34\1\27\1\63\1\163\1\50\1\3"+
+        "\1\26\1\145\1\42\1\46\1\35\1\146\1\4\1\155\1\133\1\150\1\uffff\1"+
+        "\131\1\167\1\114\1\1\1\41\1\73\1\47\1\153\1\5\1\125\1\77\1\141\1"+
+        "\127\1\43\1\67\1\51\1\53\1\62\1\76\1\32\1\132\1\154\1\110\1\164"+
+        "\1\103\1\111\1\66\1\25\1\33\1\152\1\23\1\101\1\57\1\44\1\130\1\166"+
+        "\1\10\1\107\1\64\1\106\1\56\1\0\1\61\1\15\1\140\1\124\1\54\1\6\1"+
+        "\30\1\137\1\143\1\22\1\100\1\151\1\12\1\105\1\60\1\113\1\136\1\135"+
+        "\1\122\1\104}>";
+    static final String[] DFA5_transitionS = {
+            "\1\1",
+            "\1\3\3\uffff\1\4\1\6\3\uffff\1\7\1\5\20\uffff\1\2",
+            "",
+            "\1\15\1\11\1\13\1\14\1\12\1\uffff\1\10\20\uffff\1\16\1\uffff"+
+            "\1\17",
+            "\1\22\1\21\2\uffff\1\12\1\uffff\1\12\22\uffff\1\17",
+            "",
+            "",
+            "",
+            "\1\23\4\uffff\1\12\1\uffff\1\24",
+            "\1\27\1\34\2\uffff\1\30\1\31\2\uffff\1\26\1\32\1\33\13\uffff"+
+            "\1\35\1\uffff\1\17\2\uffff\1\25",
+            "",
+            "\1\40",
+            "",
+            "\1\41",
+            "\1\42",
+            "",
+            "",
+            "\1\47\1\34\2\uffff\1\45\1\44\2\uffff\1\26\1\46\1\50\13\uffff"+
+            "\1\35\1\uffff\1\17\2\uffff\1\43",
+            "",
+            "\1\51\1\52\3\uffff\1\12\1\54\1\24\1\12\15\uffff\1\53",
+            "\1\12\2\uffff\1\12\1\uffff\1\12\23\uffff\1\55",
+            "\1\56",
+            "\1\57\4\uffff\1\60\22\uffff\1\17",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\62",
+            "\1\63",
+            "",
+            "",
+            "\1\14\1\64\1\13\1\14\23\uffff\1\16",
+            "\1\65\1\22\2\uffff\2\14\3\uffff\2\14\13\uffff\1\22\4\uffff\1"+
+            "\14",
+            "\1\66\25\uffff\1\16",
+            "\1\67",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\uffff",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\uffff",
+            "\1\71",
+            "\1\72",
+            "\1\73",
+            "",
+            "\1\61\3\uffff\1\76\1\uffff\1\17\2\uffff\1\75\16\uffff\1\17\2"+
+            "\uffff\1\74",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\102\3\uffff\1\103\1\101\2\uffff\1\17\1\104\1\100\15\uffff"+
+            "\1\17\2\uffff\1\77",
+            "\1\22\1\34\3\uffff\1\12\20\uffff\1\35",
+            "\1\22\4\uffff\1\12\20\uffff\1\35",
+            "\1\106\1\105\3\uffff\1\14\1\107\3\uffff\2\14\20\uffff\1\14",
+            "\1\uffff",
+            "\2\106\4\uffff\1\55",
+            "\1\70\3\uffff\1\112\1\uffff\1\17\2\uffff\1\111\16\uffff\1\17"+
+            "\2\uffff\1\110",
+            "\1\117\3\uffff\1\116\1\115\2\uffff\1\17\1\120\1\114\15\uffff"+
+            "\1\17\2\uffff\1\113",
+            "\1\122\1\52\3\uffff\1\12\20\uffff\1\121",
+            "\1\122\4\uffff\1\12\1\54\1\24\16\uffff\1\53",
+            "\1\125\1\123\4\uffff\1\54\1\24\16\uffff\1\124",
+            "\1\126",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\127",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\uffff",
+            "",
+            "\121\14\1\130\6\14\1\131\35\14",
+            "\1\132",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\133",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\134",
+            "\1\54\1\24\16\uffff\1\135",
+            "\1\136",
+            "\1\137",
+            "\1\54\1\24\16\uffff\1\140",
+            "\1\61\5\uffff\1\17\2\uffff\1\141\16\uffff\1\17",
+            "\1\61\3\uffff\1\143\1\uffff\1\17\2\uffff\1\144\16\uffff\1\17"+
+            "\2\uffff\1\142",
+            "\121\14\1\147\1\145\4\14\1\150\1\131\16\14\1\146\16\14",
+            "\1\14\30\uffff\1\55",
+            "\1\70\5\uffff\1\17\2\uffff\1\151\16\uffff\1\17",
+            "\1\70\3\uffff\1\154\1\uffff\1\17\2\uffff\1\153\16\uffff\1\17"+
+            "\2\uffff\1\152",
+            "\1\122\4\uffff\1\12\20\uffff\1\121",
+            "\1\155",
+            "\1\125\1\123\24\uffff\1\156",
+            "\1\125\5\uffff\1\54\1\24\16\uffff\1\124",
+            "\1\157",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\160",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\121\14\1\161\44\14",
+            "\150\14\1\162\15\14",
+            "\127\14\1\150\1\131\16\14\1\163\16\14",
+            "\121\14\1\164\44\14",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\165",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\54\1\24\16\uffff\1\135",
+            "\1\166",
+            "\1\54\1\24\16\uffff\1\140",
+            "\1\61\5\uffff\1\17\2\uffff\1\167\16\uffff\1\17",
+            "\121\14\1\147\1\145\24\14\1\170\16\14",
+            "\121\14\1\147\5\14\1\150\1\131\16\14\1\146\16\14",
+            "\150\14\1\171\15\14",
+            "\121\14\1\174\1\172\4\14\1\150\1\131\16\14\1\173\16\14",
+            "\1\70\5\uffff\1\17\2\uffff\1\175\16\uffff\1\17",
+            "\1\125\25\uffff\1\156",
+            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\150\14\1\176\15\14",
+            "\127\14\1\150\1\131\16\14\1\163\16\14",
+            "\121\14\1\177\44\14",
+            "\150\14\1\u0080\15\14",
+            "\127\14\1\150\1\131\16\14\1\u0081\16\14",
+            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\121\14\1\147\25\14\1\170\16\14",
+            "\121\14\1\174\1\172\24\14\1\u0082\16\14",
+            "\121\14\1\174\5\14\1\150\1\131\16\14\1\173\16\14",
+            "\150\14\1\u0083\15\14",
+            "\150\14\1\u0084\15\14",
+            "\127\14\1\150\1\131\16\14\1\u0081\16\14",
+            "\121\14\1\174\25\14\1\u0082\16\14"
+    };
+
+    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 "292:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA5_112 = input.LA(1);
+
+                         
+                        int index5_112 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_112==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 119;}
+
+                        else if ( (LA5_112==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_112==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_112==COMMA||LA5_112==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_112);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA5_74 = input.LA(1);
+
+                         
+                        int index5_74 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_74==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_74==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_74==COMMA||LA5_74==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_74);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA5_37 = input.LA(1);
+
+                         
+                        int index5_37 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_37);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA5_59 = input.LA(1);
+
+                         
+                        int index5_59 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_59==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 83;}
+
+                        else if ( (LA5_59==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 84;}
+
+                        else if ( (LA5_59==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+
+                        else if ( (LA5_59==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_59==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                         
+                        input.seek(index5_59);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA5_66 = input.LA(1);
+
+                         
+                        int index5_66 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_66);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA5_79 = input.LA(1);
+
+                         
+                        int index5_79 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_79);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA5_118 = input.LA(1);
+
+                         
+                        int index5_118 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_118==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+
+                        else if ( (LA5_118==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 110;}
+
+                         
+                        input.seek(index5_118);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA5_3 = input.LA(1);
+
+                         
+                        int index5_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_3==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 8;}
+
+                        else if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import"))!
 )||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "f!
 unction") )&&(validateIdentifierKey("import")))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validate!
 LT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("imp!
 ort")))||((validateLT(1, "import") && validateLT(2, "function") )&&(va
lidateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, !
 "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(valid!
 ateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(
2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function")!
  )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((valida!
 teLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierK
ey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&!
 (validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT!
 (1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("
import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||!
 ((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "func!
 tion") )&&(validateIdentifierKey("import")))||((validateLT(1, "import"
) && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdenti!
 fierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") &!
 & validateLT(2, "function") )&&(validateIdentifierKey("import")))||((v
alidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function!
 ") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali!
 dateIdentifierKey("import")))||((validateLT(1, "import") && validateLT
(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import!
 ")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2,!
  "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "i
mport") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 9;}
+
+                        else if ( (LA5_3==END) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                        else if ( (LA5_3==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 11;}
+
+                        else if ( (LA5_3==EOF||LA5_3==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_3==SEMICOLON) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 13;}
+
+                        else if ( (LA5_3==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 14;}
+
+                        else if ( (LA5_3==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA5_107 = input.LA(1);
+
+                         
+                        int index5_107 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_107==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_107==COMMA||LA5_107==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_107==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_107);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA5_4 = input.LA(1);
+
+                         
+                        int index5_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_4==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_4==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 17;}
+
+                        else if ( (LA5_4==END||LA5_4==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                        else if ( (LA5_4==SEMICOLON) && ((validateIdentifierKey("template")))) {s = 18;}
+
+                        else if ( (LA5_4==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA5_125 = input.LA(1);
+
+                         
+                        int index5_125 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_125==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_125==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_125==COMMA||LA5_125==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_125);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA5_32 = input.LA(1);
+
+                         
+                        int index5_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_32==EOF||LA5_32==SEMICOLON||LA5_32==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_32==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 52;}
+
+                        else if ( (LA5_32==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 11;}
+
+                        else if ( (LA5_32==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 14;}
+
+                         
+                        input.seek(index5_32);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA5_20 = input.LA(1);
+
+                         
+                        int index5_20 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_20==ID||LA5_20==END||LA5_20==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                        else if ( (LA5_20==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 45;}
+
+                         
+                        input.seek(index5_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA5_114 = input.LA(1);
+
+                         
+                        int index5_114 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_114==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+
+                        else if ( (LA5_114==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+
+                        else if ( (LA5_114==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( (LA5_114==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( ((LA5_114>=VT_COMPILATION_UNIT && LA5_114<=SEMICOLON)||(LA5_114>=DOT && LA5_114<=LEFT_PAREN)||(LA5_114>=COLON && LA5_114<=NULL)||(LA5_114>=RIGHT_SQUARE && LA5_114<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_114);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        int LA5_39 = input.LA(1);
+
+                         
+                        int index5_39 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_39);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 15 : 
+                        int LA5_36 = input.LA(1);
+
+                         
+                        int index5_36 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_36);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA5_46 = input.LA(1);
+
+                         
+                        int index5_46 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_46==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 60;}
+
+                        else if ( (LA5_46==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 61;}
+
+                        else if ( (LA5_46==COMMA||LA5_46==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_46==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_46==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 62;}
+
+                        else if ( (LA5_46==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_46);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 17 : 
+                        int LA5_19 = input.LA(1);
+
+                         
+                        int index5_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_19==LEFT_PAREN||LA5_19==COLON) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                        else if ( (LA5_19==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 41;}
+
+                        else if ( (LA5_19==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 42;}
+
+                        else if ( (LA5_19==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 43;}
+
+                        else if ( (LA5_19==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                        else if ( (LA5_19==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                         
+                        input.seek(index5_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 18 : 
+                        int LA5_122 = input.LA(1);
+
+                         
+                        int index5_122 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_122==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 127;}
+
+                        else if ( ((LA5_122>=VT_COMPILATION_UNIT && LA5_122<=SEMICOLON)||(LA5_122>=DOT && LA5_122<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_122);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 19 : 
+                        int LA5_101 = input.LA(1);
+
+                         
+                        int index5_101 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_101==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 113;}
+
+                        else if ( ((LA5_101>=VT_COMPILATION_UNIT && LA5_101<=SEMICOLON)||(LA5_101>=DOT && LA5_101<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_101);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 20 : 
+                        int LA5_42 = input.LA(1);
+
+                         
+                        int index5_42 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_42==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 57;}
+
+                         
+                        input.seek(index5_42);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA5_98 = input.LA(1);
+
+                         
+                        int index5_98 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_98==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 112;}
+
+                         
+                        input.seek(index5_98);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 22 : 
+                        int LA5_60 = input.LA(1);
+
+                         
+                        int index5_60 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_60==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 86;}
+
+                         
+                        input.seek(index5_60);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 23 : 
+                        int LA5_55 = input.LA(1);
+
+                         
+                        int index5_55 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_55==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 72;}
+
+                        else if ( (LA5_55==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 73;}
+
+                        else if ( (LA5_55==COMMA||LA5_55==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_55==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_55==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 74;}
+
+                        else if ( (LA5_55==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_55);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 24 : 
+                        int LA5_119 = input.LA(1);
+
+                         
+                        int index5_119 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_119==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_119==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_119==COMMA||LA5_119==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_119);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 25 : 
+                        int LA5_17 = input.LA(1);
+
+                         
+                        int index5_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_17==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 35;}
+
+                        else if ( (LA5_17==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 22;}
+
+                        else if ( (LA5_17==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 36;}
+
+                        else if ( (LA5_17==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 37;}
+
+                        else if ( (LA5_17==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 38;}
+
+                        else if ( (LA5_17==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 39;}
+
+                        else if ( (LA5_17==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 40;}
+
+                        else if ( (LA5_17==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
+
+                        else if ( (LA5_17==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
+
+                        else if ( (LA5_17==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 26 : 
+                        int LA5_90 = input.LA(1);
+
+                         
+                        int index5_90 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_90==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 105;}
+
+                        else if ( (LA5_90==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_90==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_90==COMMA||LA5_90==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_90);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 27 : 
+                        int LA5_99 = input.LA(1);
+
+                         
+                        int index5_99 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_99==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_99==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_99==COMMA||LA5_99==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_99);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 28 : 
+                        int LA5_54 = input.LA(1);
+
+                         
+                        int index5_54 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_54==LEFT_PAREN) && ((validateIdentifierKey("function")))) {s = 45;}
+
+                        else if ( (LA5_54==EOF||(LA5_54>=SEMICOLON && LA5_54<=ID)) && ((validateIdentifierKey("global")))) {s = 70;}
+
+                         
+                        input.seek(index5_54);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 29 : 
+                        int LA5_64 = input.LA(1);
+
+                         
+                        int index5_64 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_64==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_64==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_64==COMMA||LA5_64==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_64);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 30 : 
+                        int LA5_51 = input.LA(1);
+
+                         
+                        int index5_51 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_51==ID) && ((validateIdentifierKey("template")))) {s = 18;}
+
+                        else if ( (LA5_51==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
+
+                        else if ( (LA5_51==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                         
+                        input.seek(index5_51);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 31 : 
+                        int LA5_49 = input.LA(1);
+
+                         
+                        int index5_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_49==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 63;}
+
+                        else if ( (LA5_49==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 64;}
+
+                        else if ( (LA5_49==LEFT_PAREN) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 65;}
+
+                        else if ( (LA5_49==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 66;}
+
+                        else if ( (LA5_49==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 67;}
+
+                        else if ( (LA5_49==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 68;}
+
+                        else if ( (LA5_49==COLON||LA5_49==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_49);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 32 : 
+                        int LA5_35 = input.LA(1);
+
+                         
+                        int index5_35 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_35==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 55;}
+
+                         
+                        input.seek(index5_35);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 33 : 
+                        int LA5_75 = input.LA(1);
+
+                         
+                        int index5_75 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_75==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 91;}
+
+                         
+                        input.seek(index5_75);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 34 : 
+                        int LA5_62 = input.LA(1);
+
+                         
+                        int index5_62 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_62==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_62==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_62==COMMA||LA5_62==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_62);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 35 : 
+                        int LA5_84 = input.LA(1);
+
+                         
+                        int index5_84 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_84==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 95;}
+
+                         
+                        input.seek(index5_84);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 36 : 
+                        int LA5_104 = input.LA(1);
+
+                         
+                        int index5_104 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA5_104>=VT_COMPILATION_UNIT && LA5_104<=SEMICOLON)||(LA5_104>=DOT && LA5_104<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_104==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 116;}
+
+                         
+                        input.seek(index5_104);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 37 : 
+                        int LA5_21 = input.LA(1);
+
+                         
+                        int index5_21 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_21==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 46;}
+
+                         
+                        input.seek(index5_21);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 38 : 
+                        int LA5_63 = input.LA(1);
+
+                         
+                        int index5_63 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_63==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 87;}
+
+                         
+                        input.seek(index5_63);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 39 : 
+                        int LA5_77 = input.LA(1);
+
+                         
+                        int index5_77 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_77);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 40 : 
+                        int LA5_58 = input.LA(1);
+
+                         
+                        int index5_58 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_58==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                        else if ( (LA5_58==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_58==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 43;}
+
+                        else if ( (LA5_58==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 82;}
+
+                        else if ( (LA5_58==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                         
+                        input.seek(index5_58);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 41 : 
+                        int LA5_86 = input.LA(1);
+
+                         
+                        int index5_86 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_86==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 97;}
+
+                        else if ( (LA5_86==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_86==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_86==COMMA||LA5_86==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_86);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 42 : 
+                        int LA5_14 = input.LA(1);
+
+                         
+                        int index5_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_14==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 34;}
+
+                         
+                        input.seek(index5_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 43 : 
+                        int LA5_87 = input.LA(1);
+
+                         
+                        int index5_87 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_87==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 98;}
+
+                        else if ( (LA5_87==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 99;}
+
+                        else if ( (LA5_87==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 100;}
+
+                        else if ( (LA5_87==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_87==COMMA||LA5_87==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_87==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_87);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 44 : 
+                        int LA5_117 = input.LA(1);
+
+                         
+                        int index5_117 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_117==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 125;}
+
+                        else if ( (LA5_117==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_117==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_117==COMMA||LA5_117==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_117);
+                        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==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 54;}
+
+                        else if ( (LA5_34==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 14;}
+
+                         
+                        input.seek(index5_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 46 : 
+                        int LA5_111 = input.LA(1);
+
+                         
+                        int index5_111 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_111==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_111==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                        else if ( (LA5_111==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 96;}
+
+                         
+                        input.seek(index5_111);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 47 : 
+                        int LA5_103 = input.LA(1);
+
+                         
+                        int index5_103 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_103==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_103==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 115;}
+
+                        else if ( ((LA5_103>=VT_COMPILATION_UNIT && LA5_103<=LEFT_PAREN)||(LA5_103>=COLON && LA5_103<=NULL)||(LA5_103>=RIGHT_SQUARE && LA5_103<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_103==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                         
+                        input.seek(index5_103);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 48 : 
+                        int LA5_127 = input.LA(1);
+
+                         
+                        int index5_127 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_127==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 130;}
+
+                        else if ( (LA5_127==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+
+                        else if ( (LA5_127==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 122;}
+
+                        else if ( ((LA5_127>=VT_COMPILATION_UNIT && LA5_127<=SEMICOLON)||(LA5_127>=DOT_STAR && LA5_127<=NULL)||(LA5_127>=RIGHT_SQUARE && LA5_127<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_127);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 49 : 
+                        int LA5_113 = input.LA(1);
+
+                         
+                        int index5_113 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA5_113>=VT_COMPILATION_UNIT && LA5_113<=SEMICOLON)||(LA5_113>=DOT_STAR && LA5_113<=NULL)||(LA5_113>=RIGHT_SQUARE && LA5_113<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_113==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 120;}
+
+                        else if ( (LA5_113==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+
+                        else if ( (LA5_113==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+
+                         
+                        input.seek(index5_113);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 50 : 
+                        int LA5_88 = input.LA(1);
+
+                         
+                        int index5_88 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_88==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+
+                        else if ( (LA5_88==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+
+                        else if ( (LA5_88==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+
+                        else if ( (LA5_88==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_88==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( ((LA5_88>=VT_COMPILATION_UNIT && LA5_88<=SEMICOLON)||(LA5_88>=DOT_STAR && LA5_88<=LEFT_PAREN)||(LA5_88>=COLON && LA5_88<=NULL)||(LA5_88>=RIGHT_SQUARE && LA5_88<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_88);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 51 : 
+                        int LA5_56 = input.LA(1);
+
+                         
+                        int index5_56 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_56==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 75;}
+
+                        else if ( (LA5_56==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 76;}
+
+                        else if ( (LA5_56==LEFT_PAREN) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 77;}
+
+                        else if ( (LA5_56==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 78;}
+
+                        else if ( (LA5_56==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 79;}
+
+                        else if ( (LA5_56==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 80;}
+
+                        else if ( (LA5_56==COLON||LA5_56==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_56);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 52 : 
+                        int LA5_109 = input.LA(1);
+
+                         
+                        int index5_109 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_109==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                        else if ( (LA5_109==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_109==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 93;}
+
+                         
+                        input.seek(index5_109);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 53 : 
+                        int LA5_11 = input.LA(1);
+
+                         
+                        int index5_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_11==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 32;}
+
+                         
+                        input.seek(index5_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 54 : 
+                        int LA5_97 = input.LA(1);
+
+                         
+                        int index5_97 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_97==COMMA||LA5_97==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_97==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_97==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_97);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 55 : 
+                        int LA5_85 = input.LA(1);
+
+                         
+                        int index5_85 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_85==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 96;}
+
+                        else if ( (LA5_85==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_85==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                         
+                        input.seek(index5_85);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 56 : 
+                        int LA5_8 = input.LA(1);
+
+                         
+                        int index5_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_8==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 19;}
+
+                        else if ( (LA5_8==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_8==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                         
+                        input.seek(index5_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 57 : 
+                        int LA5_23 = input.LA(1);
+
+                         
+                        int index5_23 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 18;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_23);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 58 : 
+                        int LA5_1 = input.LA(1);
+
+                         
+                        int index5_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 2;}
+
+                        else if ( (LA5_1==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 3;}
+
+                        else if ( (LA5_1==STRING) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 4;}
+
+                        else if ( (LA5_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 5;}
+
+                        else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {s = 6;}
+
+                        else if ( (LA5_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 7;}
+
+                         
+                        input.seek(index5_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 59 : 
+                        int LA5_76 = input.LA(1);
+
+                         
+                        int index5_76 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_76==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_76==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_76==COMMA||LA5_76==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_76);
+                        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"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT!
 (2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 1;}
+
+                         
+                        input.seek(index5_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 61 : 
+                        int LA5_33 = input.LA(1);
+
+                         
+                        int index5_33 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA5_33>=STRING && LA5_33<=LEFT_PAREN)||(LA5_33>=BOOL && LA5_33<=INT)||LA5_33==MISC) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_33==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 53;}
+
+                        else if ( (LA5_33==DOT||LA5_33==LEFT_SQUARE) && ((validateIdentifierKey("template")))) {s = 18;}
+
+                         
+                        input.seek(index5_33);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 62 : 
+                        int LA5_89 = input.LA(1);
+
+                         
+                        int index5_89 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_89==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 45;}
+
+                        else if ( (LA5_89==EOF||LA5_89==ID) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_89);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 63 : 
+                        int LA5_81 = input.LA(1);
+
+                         
+                        int index5_81 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_81==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 92;}
+
+                         
+                        input.seek(index5_81);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 64 : 
+                        int LA5_123 = input.LA(1);
+
+                         
+                        int index5_123 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_123==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 128;}
+
+                        else if ( ((LA5_123>=VT_COMPILATION_UNIT && LA5_123<=LEFT_SQUARE)||(LA5_123>=THEN && LA5_123<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_123);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 65 : 
+                        int LA5_102 = input.LA(1);
+
+                         
+                        int index5_102 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_102==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 114;}
+
+                        else if ( ((LA5_102>=VT_COMPILATION_UNIT && LA5_102<=LEFT_SQUARE)||(LA5_102>=THEN && LA5_102<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_102);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 66 : 
+                        int LA5_27 = input.LA(1);
+
+                         
+                        int index5_27 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_27==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_27==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_27==COMMA||LA5_27==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_27);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 67 : 
+                        int LA5_95 = input.LA(1);
+
+                         
+                        int index5_95 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_95==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+
+                        else if ( (LA5_95==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 84;}
+
+                        else if ( (LA5_95==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                        else if ( (LA5_95==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                         
+                        input.seek(index5_95);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 68 : 
+                        int LA5_132 = input.LA(1);
+
+                         
+                        int index5_132 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_132==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+
+                        else if ( (LA5_132==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 130;}
+
+                        else if ( ((LA5_132>=VT_COMPILATION_UNIT && LA5_132<=SEMICOLON)||(LA5_132>=DOT && LA5_132<=NULL)||(LA5_132>=RIGHT_SQUARE && LA5_132<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_132);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 69 : 
+                        int LA5_126 = input.LA(1);
+
+                         
+                        int index5_126 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_126==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+
+                        else if ( (LA5_126==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 120;}
+
+                        else if ( ((LA5_126>=VT_COMPILATION_UNIT && LA5_126<=SEMICOLON)||(LA5_126>=DOT && LA5_126<=NULL)||(LA5_126>=RIGHT_SQUARE && LA5_126<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_126);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 70 : 
+                        int LA5_110 = input.LA(1);
+
+                         
+                        int index5_110 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_110==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 118;}
+
+                         
+                        input.seek(index5_110);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 71 : 
+                        int LA5_108 = input.LA(1);
+
+                         
+                        int index5_108 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_108==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                        else if ( (LA5_108==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_108==COMMA||LA5_108==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_108);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 72 : 
+                        int LA5_93 = input.LA(1);
+
+                         
+                        int index5_93 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_93==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 109;}
+
+                         
+                        input.seek(index5_93);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 73 : 
+                        int LA5_96 = input.LA(1);
+
+                         
+                        int index5_96 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_96==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 111;}
+
+                         
+                        input.seek(index5_96);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 74 : 
+                        int LA5_28 = input.LA(1);
+
+                         
+                        int index5_28 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_28==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 50;}
+
+                         
+                        input.seek(index5_28);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 75 : 
+                        int LA5_128 = input.LA(1);
+
+                         
+                        int index5_128 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_128==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+
+                        else if ( (LA5_128==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 123;}
+
+                        else if ( (LA5_128==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_128==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( ((LA5_128>=VT_COMPILATION_UNIT && LA5_128<=SEMICOLON)||(LA5_128>=DOT && LA5_128<=LEFT_PAREN)||(LA5_128>=COLON && LA5_128<=NULL)||(LA5_128>=RIGHT_SQUARE && LA5_128<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_128);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 76 : 
+                        int LA5_73 = input.LA(1);
+
+                         
+                        int index5_73 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_73==COMMA||LA5_73==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_73==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_73==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_73);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 77 : 
+                        int LA5_29 = input.LA(1);
+
+                         
+                        int index5_29 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_29==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 51;}
+
+                         
+                        input.seek(index5_29);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 78 : 
+                        int LA5_26 = input.LA(1);
+
+                         
+                        int index5_26 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_26==COMMA||LA5_26==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_26==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_26==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 79 : 
+                        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 = 15;}
+
+                        else if ( (LA5_40==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_40==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_40);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 80 : 
+                        int LA5_52 = input.LA(1);
+
+                         
+                        int index5_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_52==STRING||(LA5_52>=BOOL && LA5_52<=INT)||LA5_52==MISC) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_52==ID) && (((validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 69;}
+
+                        else if ( (LA5_52==EOF||LA5_52==SEMICOLON) && ((validateIdentifierKey("global")))) {s = 70;}
+
+                        else if ( (LA5_52==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 71;}
+
+                         
+                        input.seek(index5_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 81 : 
+                        int LA5_47 = input.LA(1);
+
+                         
+                        int index5_47 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_47);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 82 : 
+                        int LA5_131 = input.LA(1);
+
+                         
+                        int index5_131 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_131==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_131==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( ((LA5_131>=VT_COMPILATION_UNIT && LA5_131<=LEFT_PAREN)||(LA5_131>=COLON && LA5_131<=NULL)||(LA5_131>=RIGHT_SQUARE && LA5_131<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_131==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 129;}
+
+                         
+                        input.seek(index5_131);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 83 : 
+                        int LA5_22 = input.LA(1);
+
+                         
+                        int index5_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_22==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 47;}
+
+                        else if ( (LA5_22==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 48;}
+
+                        else if ( (LA5_22==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                         
+                        input.seek(index5_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 84 : 
+                        int LA5_116 = input.LA(1);
+
+                         
+                        int index5_116 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_116==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_116==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 122;}
+
+                        else if ( ((LA5_116>=VT_COMPILATION_UNIT && LA5_116<=SEMICOLON)||(LA5_116>=DOT_STAR && LA5_116<=LEFT_PAREN)||(LA5_116>=COLON && LA5_116<=NULL)||(LA5_116>=RIGHT_SQUARE && LA5_116<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_116==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 123;}
+
+                        else if ( (LA5_116==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+
+                        else if ( (LA5_116==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                         
+                        input.seek(index5_116);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 85 : 
+                        int LA5_80 = input.LA(1);
+
+                         
+                        int index5_80 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_80==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_80==COMMA||LA5_80==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_80==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_80);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 86 : 
+                        int LA5_25 = input.LA(1);
+
+                         
+                        int index5_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("function"))) ) {s = 45;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 87 : 
+                        int LA5_83 = input.LA(1);
+
+                         
+                        int index5_83 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_83==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 94;}
+
+                         
+                        input.seek(index5_83);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 88 : 
+                        int LA5_105 = input.LA(1);
+
+                         
+                        int index5_105 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_105==COMMA||LA5_105==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_105==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_105==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_105);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 89 : 
+                        int LA5_71 = input.LA(1);
+
+                         
+                        int index5_71 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_71==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 88;}
+
+                        else if ( ((LA5_71>=VT_COMPILATION_UNIT && LA5_71<=SEMICOLON)||(LA5_71>=DOT && LA5_71<=COMMA)||(LA5_71>=COLON && LA5_71<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_71==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                         
+                        input.seek(index5_71);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 90 : 
+                        int LA5_91 = input.LA(1);
+
+                         
+                        int index5_91 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_91==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 106;}
+
+                        else if ( (LA5_91==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 107;}
+
+                        else if ( (LA5_91==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_91==COMMA||LA5_91==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_91==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 108;}
+
+                        else if ( (LA5_91==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_91);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 91 : 
+                        int LA5_68 = input.LA(1);
+
+                         
+                        int index5_68 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_68==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_68==COMMA||LA5_68==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_68==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_68);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 92 : 
+                        int LA5_53 = input.LA(1);
+
+                         
+                        int index5_53 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 18;}
+
+                         
+                        input.seek(index5_53);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 93 : 
+                        int LA5_130 = input.LA(1);
+
+                         
+                        int index5_130 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_130==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 132;}
+
+                        else if ( ((LA5_130>=VT_COMPILATION_UNIT && LA5_130<=LEFT_SQUARE)||(LA5_130>=THEN && LA5_130<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_130);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 94 : 
+                        int LA5_129 = input.LA(1);
+
+                         
+                        int index5_129 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_129==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 131;}
+
+                        else if ( ((LA5_129>=VT_COMPILATION_UNIT && LA5_129<=LEFT_SQUARE)||(LA5_129>=THEN && LA5_129<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_129);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 95 : 
+                        int LA5_120 = input.LA(1);
+
+                         
+                        int index5_120 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_120==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 126;}
+
+                        else if ( ((LA5_120>=VT_COMPILATION_UNIT && LA5_120<=LEFT_SQUARE)||(LA5_120>=THEN && LA5_120<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_120);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 96 : 
+                        int LA5_115 = input.LA(1);
+
+                         
+                        int index5_115 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_115==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 121;}
+
+                        else if ( ((LA5_115>=VT_COMPILATION_UNIT && LA5_115<=LEFT_SQUARE)||(LA5_115>=THEN && LA5_115<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_115);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 97 : 
+                        int LA5_82 = input.LA(1);
+
+                         
+                        int index5_82 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_82==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 93;}
+
+                        else if ( (LA5_82==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+
+                        else if ( (LA5_82==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+
+                         
+                        input.seek(index5_82);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 98 : 
+                        int LA5_44 = input.LA(1);
+
+                         
+                        int index5_44 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_44==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 59;}
+
+                         
+                        input.seek(index5_44);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 99 : 
+                        int LA5_121 = input.LA(1);
+
+                         
+                        int index5_121 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_121==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                        else if ( (LA5_121==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_121==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 115;}
+
+                        else if ( ((LA5_121>=VT_COMPILATION_UNIT && LA5_121<=LEFT_PAREN)||(LA5_121>=COLON && LA5_121<=NULL)||(LA5_121>=RIGHT_SQUARE && LA5_121<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_121);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 100 : 
+                        int LA5_48 = input.LA(1);
+
+                         
+                        int index5_48 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_48);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 101 : 
+                        int LA5_61 = input.LA(1);
+
+                         
+                        int index5_61 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_61==COMMA||LA5_61==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_61==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_61==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_61);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 102 : 
+                        int LA5_65 = input.LA(1);
+
+                         
+                        int index5_65 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_65);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 103 : 
+                        int LA5_43 = input.LA(1);
+
+                         
+                        int index5_43 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_43==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 58;}
+
+                         
+                        input.seek(index5_43);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 104 : 
+                        int LA5_69 = input.LA(1);
+
+                         
+                        int index5_69 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("global"))) ) {s = 70;}
+
+                         
+                        input.seek(index5_69);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 105 : 
+                        int LA5_124 = input.LA(1);
+
+                         
+                        int index5_124 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_124==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+
+                        else if ( (LA5_124==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 129;}
+
+                        else if ( ((LA5_124>=VT_COMPILATION_UNIT && LA5_124<=LEFT_PAREN)||(LA5_124>=COLON && LA5_124<=NULL)||(LA5_124>=RIGHT_SQUARE && LA5_124<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_124==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+
+                         
+                        input.seek(index5_124);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 106 : 
+                        int LA5_100 = input.LA(1);
+
+                         
+                        int index5_100 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_100==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+
+                        else if ( (LA5_100==COMMA||LA5_100==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_100==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                         
+                        input.seek(index5_100);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 107 : 
+                        int LA5_78 = input.LA(1);
+
+                         
+                        int index5_78 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_78);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 108 : 
+                        int LA5_92 = input.LA(1);
+
+                         
+                        int index5_92 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_92==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 82;}
+
+                        else if ( (LA5_92==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 81;}
+
+                        else if ( (LA5_92==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                         
+                        input.seek(index5_92);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 109 : 
+                        int LA5_67 = input.LA(1);
+
+                         
+                        int index5_67 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_67);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 110 : 
+                        int LA5_41 = input.LA(1);
+
+                         
+                        int index5_41 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("function"))) ) {s = 45;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+
+                         
+                        input.seek(index5_41);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 111 : 
+                        int LA5_24 = input.LA(1);
+
+                         
+                        int index5_24 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+
+                         
+                        input.seek(index5_24);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 112 : 
+                        int LA5_50 = input.LA(1);
+
+                         
+                        int index5_50 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_50==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
+
+                        else if ( (LA5_50==ID) && ((validateIdentifierKey("template")))) {s = 18;}
+
+                        else if ( (LA5_50==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
+
+                        else if ( (LA5_50==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                         
+                        input.seek(index5_50);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 113 : 
+                        int LA5_9 = input.LA(1);
+
+                         
+                        int index5_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_9==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 21;}
+
+                        else if ( (LA5_9==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 22;}
+
+                        else if ( (LA5_9==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))))) {s = 23;}
+
+                        else if ( (LA5_9==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 24;}
+
+                        else if ( (LA5_9==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 25;}
+
+                        else if ( (LA5_9==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 26;}
+
+                        else if ( (LA5_9==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 27;}
+
+                        else if ( (LA5_9==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
+
+                        else if ( (LA5_9==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
+
+                        else if ( (LA5_9==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))) ) {s = 30;}
+
+                        else if ( ((validateIdentifierKey("global"))) ) {s = 31;}
+
+                         
+                        input.seek(index5_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 114 : 
+                        int LA5_13 = input.LA(1);
+
+                         
+                        int index5_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_13==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+
+                        else if ( (LA5_13==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 33;}
+
+                         
+                        input.seek(index5_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 115 : 
+                        int LA5_57 = input.LA(1);
+
+                         
+                        int index5_57 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_57==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 81;}
+
+                        else if ( (LA5_57==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+
+                        else if ( (LA5_57==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 42;}
+
+                        else if ( (LA5_57==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 82;}
+
+                         
+                        input.seek(index5_57);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 116 : 
+                        int LA5_94 = input.LA(1);
+
+                         
+                        int index5_94 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_94==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 110;}
+
+                        else if ( (LA5_94==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+
+                        else if ( (LA5_94==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 83;}
+
+                         
+                        input.seek(index5_94);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 117 : 
+                        int LA5_38 = input.LA(1);
+
+                         
+                        int index5_38 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_38==COMMA||LA5_38==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+
+                        else if ( (LA5_38==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+
+                        else if ( (LA5_38==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+
+                         
+                        input.seek(index5_38);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 118 : 
+                        int LA5_106 = input.LA(1);
+
+                         
+                        int index5_106 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_106==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 117;}
+
+                         
+                        input.seek(index5_106);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 119 : 
+                        int LA5_72 = input.LA(1);
+
+                         
+                        int index5_72 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA5_72==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 90;}
+
+                         
+                        input.seek(index5_72);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 5, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA12_eotS =
+        "\16\uffff";
+    static final String DFA12_eofS =
+        "\16\uffff";
+    static final String DFA12_minS =
+        "\2\125\1\uffff\1\125\1\uffff\1\125\1\154\3\125\2\154\1\132\1\125";
+    static final String DFA12_maxS =
+        "\1\132\1\134\1\uffff\1\153\1\uffff\1\125\1\154\3\153\2\154\2\153";
+    static final String DFA12_acceptS =
+        "\2\uffff\1\2\1\uffff\1\1\11\uffff";
+    static final String DFA12_specialS =
+        "\16\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\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 "339:23: ( 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 "356:4: ( data_type )?";
+        }
+    }
+    static final String DFA24_eotS =
+        "\36\uffff";
+    static final String DFA24_eofS =
+        "\36\uffff";
+    static final String DFA24_minS =
+        "\2\125\5\uffff\1\125\1\4\1\uffff\1\125\1\4\1\0\2\uffff\1\0\1\4\2"+
+        "\0\2\4\1\uffff\1\4\1\0\2\4\4\0";
+    static final String DFA24_maxS =
+        "\1\155\1\160\5\uffff\1\155\1\171\1\uffff\1\160\1\171\1\0\2\uffff"+
+        "\1\0\1\171\2\0\2\171\1\uffff\1\171\1\0\2\171\4\0";
+    static final String DFA24_acceptS =
+        "\2\uffff\1\2\4\1\2\uffff\1\2\3\uffff\2\1\6\uffff\1\1\10\uffff";
+    static final String DFA24_specialS =
+        "\1\5\1\0\5\uffff\1\15\1\7\1\uffff\1\14\1\6\1\13\2\uffff\1\3\1\10"+
+        "\1\11\1\17\1\4\1\12\1\uffff\1\2\1\16\1\1\1\20\4\uffff}>";
+    static final String[] DFA24_transitionS = {
+            "\1\1\27\uffff\1\2",
+            "\1\11\3\uffff\1\5\1\10\2\uffff\1\7\1\6\1\4\15\uffff\1\11\2\uffff"+
+            "\1\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\15\1\22\1\23\3\15\1\21\1\15\1\25\1\20\15\15\1\24\16\15",
+            "\1\uffff",
+            "",
+            "",
+            "\1\uffff",
+            "\121\15\1\26\4\15\1\27\1\15\1\25\35\15",
+            "\1\uffff",
+            "\1\uffff",
+            "\121\15\1\30\4\15\1\25\1\15\1\25\35\15",
+            "\126\15\1\25\1\15\1\25\17\15\1\31\15\15",
+            "",
+            "\122\15\1\32\3\15\1\33\1\15\1\25\16\15\1\34\16\15",
+            "\1\uffff",
+            "\122\15\1\23\3\15\1\35\1\15\1\25\16\15\1\24\16\15",
+            "\126\15\1\35\1\15\1\25\16\15\1\24\16\15",
+            "\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 "386:21: ( rule_attributes )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA24_1 = input.LA(1);
+
+                         
+                        int 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("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {s = 3;}
+
+                        else if ( (LA24_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 4;}
+
+                        else if ( (LA24_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 5;}
+
+                        else if ( (LA24_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 6;}
+
+                        else if ( (LA24_1==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 7;}
+
+                        else if ( (LA24_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 8;}
+
+                        else if ( (LA24_1==ID||LA24_1==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
+
+                         
+                        input.seek(index24_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA24_24 = input.LA(1);
+
+                         
+                        int index24_24 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_24==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                        else 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>=VT_COMPILATION_UNIT && LA24_24<=ID)||(LA24_24>=DOT_STAR && LA24_24<=STRING)||LA24_24==COMMA||(LA24_24>=COLON && LA24_24<=NULL)||(LA24_24>=RIGHT_SQUARE && LA24_24<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_24);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA24_22 = input.LA(1);
+
+                         
+                        int index24_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_22==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                        else if ( (LA24_22==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 26;}
+
+                        else if ( (LA24_22==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 27;}
+
+                        else if ( (LA24_22==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 28;}
+
+                        else if ( ((LA24_22>=VT_COMPILATION_UNIT && LA24_22<=ID)||(LA24_22>=DOT_STAR && LA24_22<=STRING)||LA24_22==COMMA||(LA24_22>=COLON && LA24_22<=NULL)||(LA24_22>=RIGHT_SQUARE && LA24_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        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 4 : 
+                        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==LEFT_PAREN||LA24_19==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                        else if ( ((LA24_19>=VT_COMPILATION_UNIT && LA24_19<=SEMICOLON)||(LA24_19>=DOT && LA24_19<=STRING)||LA24_19==COMMA||(LA24_19>=COLON && LA24_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        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("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+
+                        else if ( (LA24_0==THEN) ) {s = 2;}
+
+                         
+                        input.seek(index24_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        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 = 21;}
+
+                        else if ( ((LA24_11>=VT_COMPILATION_UNIT && LA24_11<=SEMICOLON)||(LA24_11>=DOT_STAR && LA24_11<=STRING)||LA24_11==COMMA||(LA24_11>=BOOL && LA24_11<=NULL)||(LA24_11>=RIGHT_SQUARE && LA24_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        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 8 : 
+                        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 = 21;}
+
+                        else if ( ((LA24_16>=VT_COMPILATION_UNIT && LA24_16<=SEMICOLON)||(LA24_16>=DOT && LA24_16<=STRING)||LA24_16==COMMA||(LA24_16>=COLON && LA24_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        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 10 : 
+                        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==LEFT_PAREN||LA24_20==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                        else if ( ((LA24_20>=VT_COMPILATION_UNIT && LA24_20<=STRING)||LA24_20==COMMA||(LA24_20>=COLON && LA24_20<=LEFT_SQUARE)||(LA24_20>=THEN && LA24_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        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 12 : 
+                        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 13 : 
+                        int LA24_7 = input.LA(1);
+
+                         
+                        int index24_7 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_7==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 10;}
+
+                        else if ( (LA24_7==LEFT_PAREN||LA24_7==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
+
+                         
+                        input.seek(index24_7);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        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 15 : 
+                        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 16 : 
+                        int LA24_25 = input.LA(1);
+
+                         
+                        int index24_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA24_25==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+
+                        else if ( (LA24_25==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+
+                        else if ( (LA24_25==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 29;}
+
+                        else if ( ((LA24_25>=VT_COMPILATION_UNIT && LA24_25<=STRING)||LA24_25==COMMA||(LA24_25>=COLON && LA24_25<=NULL)||(LA24_25>=RIGHT_SQUARE && LA24_25<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
+
+                         
+                        input.seek(index24_25);
+                        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\6\uffff\1\4\1\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\6\uffff\1\171\1\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\5\1\1\uffff\1\2\2\uffff\1\1\15\uffff";
+    static final String DFA30_specialS =
+        "\1\3\1\11\6\uffff\1\5\1\uffff\1\4\1\12\1\uffff\1\6\1\7\1\14\1\2"+
+        "\1\10\1\1\1\13\1\0\1\15\4\uffff}>";
+    static final String[] DFA30_transitionS = {
+            "\1\1\5\uffff\1\3\21\uffff\1\2",
+            "\1\11\3\uffff\1\5\1\10\2\uffff\1\11\1\6\1\7\15\uffff\1\11\2"+
+            "\uffff\1\4",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\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\27\20\14\1\30\16\14",
+            "\1\uffff",
+            "\122\14\1\20\3\14\1\31\20\14\1\21\16\14",
+            "\126\14\1\31\20\14\1\21\16\14",
+            "\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 401:45: ( ( COMMA )? attr= rule_attribute )*";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA30_20 = input.LA(1);
+
+                         
+                        int 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 1 : 
+                        int LA30_18 = input.LA(1);
+
+                         
+                        int index30_18 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA30_18>=VT_COMPILATION_UNIT && LA30_18<=ID)||(LA30_18>=DOT_STAR && LA30_18<=STRING)||(LA30_18>=COMMA && LA30_18<=NULL)||(LA30_18>=RIGHT_SQUARE && LA30_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                        else if ( (LA30_18==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
+
+                        else if ( (LA30_18==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
+
+                        else if ( (LA30_18==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
+
+                         
+                        input.seek(index30_18);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        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;
+                    case 3 : 
+                        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("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+
+                        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 4 : 
+                        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 5 : 
+                        int LA30_8 = input.LA(1);
+
+                         
+                        int index30_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_8==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 10;}
+
+                        else if ( (LA30_8==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 11;}
+
+                        else if ( ((LA30_8>=VT_COMPILATION_UNIT && LA30_8<=SEMICOLON)||(LA30_8>=DOT && LA30_8<=STRING)||(LA30_8>=COMMA && LA30_8<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA30_13 = input.LA(1);
+
+                         
+                        int index30_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA30_13==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
+
+                        else if ( (LA30_13==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
+
+                        else if ( ((LA30_13>=VT_COMPILATION_UNIT && LA30_13<=SEMICOLON)||(LA30_13>=DOT && LA30_13<=STRING)||(LA30_13>=COMMA && LA30_13<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                         
+                        input.seek(index30_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        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 = 9;}
+
+                         
+                        input.seek(index30_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        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 9 : 
+                        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("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 4;}
+
+                        else if ( (LA30_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 5;}
+
+                        else if ( (LA30_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 6;}
+
+                        else if ( (LA30_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 7;}
+
+                        else if ( (LA30_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 8;}
+
+                        else if ( (LA30_1==ID||LA30_1==COLON||LA30_1==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
+
+                         
+                        input.seek(index30_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        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 = 9;}
+
+                         
+                        input.seek(index30_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        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 = 9;}
+
+                         
+                        input.seek(index30_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        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 = 9;}
+
+                         
+                        input.seek(index30_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA30_21 = input.LA(1);
+
+                         
+                        int index30_21 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA30_21>=VT_COMPILATION_UNIT && LA30_21<=STRING)||(LA30_21>=COMMA && LA30_21<=NULL)||(LA30_21>=RIGHT_SQUARE && LA30_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+
+                        else if ( (LA30_21==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
+                        else if ( (LA30_21==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+
+                         
+                        input.seek(index30_21);
+                        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\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 DFA47_maxS =
+        "\2\132\1\153\2\0\1\132\1\0\1\uffff\1\125\1\154\2\uffff\1\153\1\125"+
+        "\1\uffff\2\153\1\125\1\154\1\134\1\153\1\134\3\153\2\0\1\125\1\154"+
+        "\1\134\1\153\2\0\1\125\1\0\1\171\1\125\1\153\6\152\2\uffff\3\153"+
+        "\1\0\1\140\1\125\1\171\1\125\1\153\6\152\1\0\1\uffff\1\153\1\uffff"+
+        "\1\171\24\0\1\uffff\16\0\1\uffff\16\0";
+    static final String DFA47_acceptS =
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1"+
+        "\uffff\1\3\25\uffff\1\3\16\uffff\1\3\16\uffff";
+    static final String DFA47_specialS =
+        "\2\uffff\1\11\1\0\1\12\1\uffff\1\10\22\uffff\1\2\1\7\4\uffff\1\5"+
+        "\1\1\1\uffff\1\3\16\uffff\1\6\13\uffff\1\4\66\uffff}>";
+    static final String[] DFA47_transitionS = {
+            "\1\2\4\uffff\1\1",
+            "\1\4\4\uffff\1\3",
+            "\1\7\1\10\3\uffff\1\6\2\uffff\1\5\15\uffff\1\11",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\14\4\uffff\1\15",
+            "\1\uffff",
+            "",
+            "\1\17",
+            "\1\20",
+            "",
+            "",
+            "\1\21\3\uffff\1\23\20\uffff\1\22",
+            "\1\24",
+            "",
+            "\1\10\3\uffff\1\25\20\uffff\1\11",
+            "\1\25\20\uffff\1\11",
+            "\1\26",
+            "\1\27",
+            "\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\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",
+            "\147\101\1\102\1\103\15\101",
+            "\1\104",
+            "\1\105\3\uffff\1\106\1\107\3\uffff\2\106\11\uffff\2\106\1\110",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "",
+            "",
+            "\1\33\3\uffff\1\35\20\uffff\1\34",
+            "\1\35\20\uffff\1\34",
+            "\1\117\1\116\3\uffff\1\114\2\uffff\1\113\5\uffff\1\120\1\121"+
+            "\1\122\1\123\1\124\1\125\2\uffff\1\115",
+            "\1\uffff",
+            "\1\127\6\uffff\1\131\3\uffff\1\130",
+            "\1\132",
+            "\147\133\1\134\1\135\15\133",
+            "\1\136",
+            "\1\140\3\uffff\1\141\1\142\3\uffff\2\141\11\uffff\2\141\1\137",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
+            "\1\uffff",
+            "",
+            "\1\150\1\147\3\uffff\1\157\1\163\1\32\3\uffff\1\162\1\161\1"+
+            "\160\1\151\1\152\1\153\1\154\1\155\1\156\2\uffff\1\146",
+            "",
+            "\147\101\1\102\1\103\15\101",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA47_eot = DFA.unpackEncodedString(DFA47_eotS);
+    static final short[] DFA47_eof = DFA.unpackEncodedString(DFA47_eofS);
+    static final char[] DFA47_min = DFA.unpackEncodedStringToUnsignedChars(DFA47_minS);
+    static final char[] DFA47_max = DFA.unpackEncodedStringToUnsignedChars(DFA47_maxS);
+    static final short[] DFA47_accept = DFA.unpackEncodedString(DFA47_acceptS);
+    static final short[] DFA47_special = DFA.unpackEncodedString(DFA47_specialS);
+    static final short[][] DFA47_transition;
+
+    static {
+        int numStates = DFA47_transitionS.length;
+        DFA47_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA47_transition[i] = DFA.unpackEncodedString(DFA47_transitionS[i]);
+        }
+    }
+
+    class DFA47 extends DFA {
+
+        public DFA47(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 47;
+            this.eot = DFA47_eot;
+            this.eof = DFA47_eof;
+            this.min = DFA47_min;
+            this.max = DFA47_max;
+            this.accept = DFA47_accept;
+            this.special = DFA47_special;
+            this.transition = DFA47_transition;
+        }
+        public String getDescription() {
+            return "513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA47_3 = input.LA(1);
+
+                         
+                        int index47_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 10;}
+
+                         
+                        input.seek(index47_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA47_32 = input.LA(1);
+
+                         
+                        int index47_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index47_32);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA47_25 = input.LA(1);
+
+                         
+                        int index47_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 44;}
+
+                         
+                        input.seek(index47_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA47_34 = input.LA(1);
+
+                         
+                        int index47_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 64;}
+
+                         
+                        input.seek(index47_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA47_61 = input.LA(1);
+
+                         
+                        int index47_61 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 101;}
+
+                         
+                        input.seek(index47_61);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA47_31 = input.LA(1);
+
+                         
+                        int index47_31 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 62;}
+
+                         
+                        input.seek(index47_31);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA47_49 = input.LA(1);
+
+                         
+                        int index47_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 86;}
+
+                         
+                        input.seek(index47_49);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA47_26 = input.LA(1);
+
+                         
+                        int index47_26 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index47_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA47_6 = input.LA(1);
+
+                         
+                        int index47_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (((synpred6()&&(validateIdentifierKey("forall")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||synpred6()||(synpred6()&&(validateIdentifierKey("eval"))))) ) {s = 7;}
+
+                        else if ( (true) ) {s = 14;}
+
+                         
+                        input.seek(index47_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA47_2 = input.LA(1);
+
+                         
+                        int index47_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA47_2==COLON) ) {s = 5;}
+
+                        else if ( (LA47_2==LEFT_PAREN) ) {s = 6;}
+
+                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))))) {s = 7;}
+
+                        else if ( (LA47_2==DOT) ) {s = 8;}
+
+                        else if ( (LA47_2==LEFT_SQUARE) ) {s = 9;}
+
+                         
+                        input.seek(index47_2);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA47_4 = input.LA(1);
+
+                         
+                        int index47_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 11;}
+
+                         
+                        input.seek(index47_4);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 47, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA48_eotS =
+        "\164\uffff";
+    static final String DFA48_eofS =
+        "\164\uffff";
+    static final String DFA48_minS =
+        "\3\125\2\0\1\125\1\0\1\uffff\1\125\1\154\2\uffff\1\126\1\125\1\uffff"+
+        "\1\126\1\132\1\125\1\154\1\125\1\126\1\125\1\126\1\132\1\125\2\0"+
+        "\1\125\1\154\2\125\2\0\1\125\1\0\1\4\10\125\2\uffff\1\126\1\132"+
+        "\1\125\1\0\2\125\1\0\1\4\10\125\1\uffff\1\125\1\uffff\1\4\24\0\1"+
+        "\uffff\4\0\1\uffff\30\0";
+    static final String DFA48_maxS =
+        "\2\132\1\153\2\0\1\132\1\0\1\uffff\1\125\1\154\2\uffff\1\153\1\125"+
+        "\1\uffff\2\153\1\125\1\154\1\134\1\153\1\134\3\153\2\0\1\125\1\154"+
+        "\1\134\1\153\2\0\1\125\1\0\1\171\1\125\1\153\6\152\2\uffff\3\153"+
+        "\1\0\1\140\1\125\1\0\1\171\1\125\1\153\6\152\1\uffff\1\153\1\uffff"+
+        "\1\171\24\0\1\uffff\4\0\1\uffff\30\0";
+    static final String DFA48_acceptS =
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1"+
+        "\uffff\1\3\25\uffff\1\3\4\uffff\1\3\30\uffff";
+    static final String DFA48_specialS =
+        "\2\uffff\1\12\1\7\1\1\1\uffff\1\2\22\uffff\1\5\1\0\4\uffff\1\3\1"+
+        "\4\1\uffff\1\10\16\uffff\1\6\2\uffff\1\11\77\uffff}>";
+    static final String[] DFA48_transitionS = {
+            "\1\2\4\uffff\1\1",
+            "\1\4\4\uffff\1\3",
+            "\1\7\1\10\3\uffff\1\6\2\uffff\1\5\15\uffff\1\11",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\14\4\uffff\1\15",
+            "\1\uffff",
+            "",
+            "\1\17",
+            "\1\20",
+            "",
+            "",
+            "\1\21\3\uffff\1\23\20\uffff\1\22",
+            "\1\24",
+            "",
+            "\1\10\3\uffff\1\25\20\uffff\1\11",
+            "\1\25\20\uffff\1\11",
+            "\1\26",
+            "\1\27",
+            "\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\60\4\uffff\1\61\1\uffff\1\62",
+            "\1\67\1\66\3\uffff\1\64\2\uffff\1\63\5\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\2\uffff\1\65",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\77",
+            "\1\uffff",
+            "\147\101\1\102\1\103\15\101",
+            "\1\104",
+            "\1\105\3\uffff\1\106\1\107\3\uffff\2\106\11\uffff\2\106\1\110",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "",
+            "",
+            "\1\33\3\uffff\1\35\20\uffff\1\34",
+            "\1\35\20\uffff\1\34",
+            "\1\117\1\116\3\uffff\1\114\2\uffff\1\113\5\uffff\1\120\1\121"+
+            "\1\122\1\123\1\124\1\125\2\uffff\1\115",
+            "\1\uffff",
+            "\1\127\6\uffff\1\131\3\uffff\1\130",
+            "\1\132",
+            "\1\uffff",
+            "\147\134\1\135\1\136\15\134",
+            "\1\137",
+            "\1\140\3\uffff\1\141\1\142\3\uffff\2\141\11\uffff\2\141\1\143",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "",
+            "\1\150\1\147\3\uffff\1\157\1\163\1\32\3\uffff\1\162\1\161\1"+
+            "\160\1\151\1\152\1\153\1\154\1\155\1\156\2\uffff\1\146",
+            "",
+            "\147\101\1\102\1\103\15\101",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA48_eot = DFA.unpackEncodedString(DFA48_eotS);
+    static final short[] DFA48_eof = DFA.unpackEncodedString(DFA48_eofS);
+    static final char[] DFA48_min = DFA.unpackEncodedStringToUnsignedChars(DFA48_minS);
+    static final char[] DFA48_max = DFA.unpackEncodedStringToUnsignedChars(DFA48_maxS);
+    static final short[] DFA48_accept = DFA.unpackEncodedString(DFA48_acceptS);
+    static final short[] DFA48_special = DFA.unpackEncodedString(DFA48_specialS);
+    static final short[][] DFA48_transition;
+
+    static {
+        int numStates = DFA48_transitionS.length;
+        DFA48_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA48_transition[i] = DFA.unpackEncodedString(DFA48_transitionS[i]);
+        }
+    }
+
+    class DFA48 extends DFA {
+
+        public DFA48(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 48;
+            this.eot = DFA48_eot;
+            this.eof = DFA48_eof;
+            this.min = DFA48_min;
+            this.max = DFA48_max;
+            this.accept = DFA48_accept;
+            this.special = DFA48_special;
+            this.transition = DFA48_transition;
+        }
+        public String getDescription() {
+            return "521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA48_26 = input.LA(1);
+
+                         
+                        int index48_26 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index48_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA48_4 = input.LA(1);
+
+                         
+                        int index48_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 11;}
+
+                         
+                        input.seek(index48_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA48_6 = input.LA(1);
+
+                         
+                        int index48_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("eval")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("forall"))))) ) {s = 7;}
+
+                        else if ( (true) ) {s = 14;}
+
+                         
+                        input.seek(index48_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA48_31 = input.LA(1);
+
+                         
+                        int index48_31 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 62;}
+
+                         
+                        input.seek(index48_31);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA48_32 = input.LA(1);
+
+                         
+                        int index48_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index48_32);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA48_25 = input.LA(1);
+
+                         
+                        int index48_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 44;}
+
+                         
+                        input.seek(index48_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA48_49 = input.LA(1);
+
+                         
+                        int index48_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 86;}
+
+                         
+                        input.seek(index48_49);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA48_3 = input.LA(1);
+
+                         
+                        int index48_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 10;}
+
+                         
+                        input.seek(index48_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA48_34 = input.LA(1);
+
+                         
+                        int index48_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 64;}
+
+                         
+                        input.seek(index48_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA48_52 = input.LA(1);
+
+                         
+                        int index48_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 91;}
+
+                         
+                        input.seek(index48_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA48_2 = input.LA(1);
+
+                         
+                        int index48_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA48_2==COLON) ) {s = 5;}
+
+                        else if ( (LA48_2==LEFT_PAREN) ) {s = 6;}
+
+                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))))) {s = 7;}
+
+                        else if ( (LA48_2==DOT) ) {s = 8;}
+
+                        else if ( (LA48_2==LEFT_SQUARE) ) {s = 9;}
+
+                         
+                        input.seek(index48_2);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 48, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA53_eotS =
+        "\13\uffff";
+    static final String DFA53_eofS =
+        "\13\uffff";
+    static final String DFA53_minS =
+        "\1\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\1\2\1\1\1\2";
+    static final String DFA53_specialS =
+        "\4\uffff\1\2\1\1\1\0\4\uffff}>";
+    static final String[] DFA53_transitionS = {
+            "\1\1",
+            "\1\2",
+            "\126\3\1\4\1\3\1\5\35\3",
+            "\126\3\1\6\1\3\1\5\35\3",
+            "\1\uffff",
+            "\1\11\5\uffff\1\11\1\12",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA53_eot = DFA.unpackEncodedString(DFA53_eotS);
+    static final short[] DFA53_eof = DFA.unpackEncodedString(DFA53_eofS);
+    static final char[] DFA53_min = DFA.unpackEncodedStringToUnsignedChars(DFA53_minS);
+    static final char[] DFA53_max = DFA.unpackEncodedStringToUnsignedChars(DFA53_maxS);
+    static final short[] DFA53_accept = DFA.unpackEncodedString(DFA53_acceptS);
+    static final short[] DFA53_special = DFA.unpackEncodedString(DFA53_specialS);
+    static final short[][] DFA53_transition;
+
+    static {
+        int numStates = DFA53_transitionS.length;
+        DFA53_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA53_transition[i] = DFA.unpackEncodedString(DFA53_transitionS[i]);
+        }
+    }
+
+    class DFA53 extends DFA {
+
+        public DFA53(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 53;
+            this.eot = DFA53_eot;
+            this.eof = DFA53_eof;
+            this.min = DFA53_min;
+            this.max = DFA53_max;
+            this.accept = DFA53_accept;
+            this.special = DFA53_special;
+            this.transition = DFA53_transition;
+        }
+        public String getDescription() {
+            return "555:3: ( accumulate_init_clause | accumulate_id_clause )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA53_6 = input.LA(1);
+
+                         
+                        int index53_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("init"))) ) {s = 9;}
+
+                        else if ( (true) ) {s = 10;}
+
+                         
+                        input.seek(index53_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA53_5 = input.LA(1);
+
+                         
+                        int index53_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA53_5==ID||LA53_5==COMMA) && ((validateIdentifierKey("init")))) {s = 9;}
+
+                        else if ( (LA53_5==RIGHT_PAREN) ) {s = 10;}
+
+                         
+                        input.seek(index53_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA53_4 = input.LA(1);
+
+                         
+                        int index53_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("init"))) ) {s = 7;}
+
+                        else if ( (true) ) {s = 8;}
+
+                         
+                        input.seek(index53_4);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 53, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA57_eotS =
+        "\13\uffff";
+    static final String DFA57_eofS =
+        "\13\uffff";
+    static final String DFA57_minS =
+        "\1\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\2\2\1\1";
+    static final String DFA57_specialS =
+        "\1\0\1\4\1\6\1\2\1\5\1\1\1\3\4\uffff}>";
+    static final String[] DFA57_transitionS = {
+            "\1\1",
+            "\1\2",
+            "\126\3\1\4\1\3\1\5\35\3",
+            "\126\3\1\6\1\3\1\5\35\3",
+            "\1\uffff",
+            "\1\12\5\uffff\1\12\1\11",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    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 = DFA57_transitionS.length;
+        DFA57_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA57_transition[i] = DFA.unpackEncodedString(DFA57_transitionS[i]);
+        }
+    }
+
+    class DFA57 extends DFA {
+
+        public DFA57(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 57;
+            this.eot = DFA57_eot;
+            this.eof = DFA57_eof;
+            this.min = DFA57_min;
+            this.max = DFA57_max;
+            this.accept = DFA57_accept;
+            this.special = DFA57_special;
+            this.transition = DFA57_transition;
+        }
+        public String getDescription() {
+            return "566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA57_0 = input.LA(1);
+
+                         
+                        int index57_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA57_0==ID) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 1;}
+
+                         
+                        input.seek(index57_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA57_5 = input.LA(1);
+
+                         
+                        int index57_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA57_5==RIGHT_PAREN) && ((validateIdentifierKey("result")))) {s = 9;}
+
+                        else if ( (LA57_5==ID||LA57_5==COMMA) && ((validateIdentifierKey("reverse")))) {s = 10;}
+
+                         
+                        input.seek(index57_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA57_3 = input.LA(1);
+
+                         
+                        int index57_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA57_3==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
+
+                        else if ( ((LA57_3>=VT_COMPILATION_UNIT && LA57_3<=STRING)||LA57_3==COMMA||(LA57_3>=COLON && LA57_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
+
+                        else if ( (LA57_3==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 6;}
+
+                         
+                        input.seek(index57_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA57_6 = input.LA(1);
+
+                         
+                        int index57_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("reverse"))) ) {s = 10;}
+
+                        else if ( ((validateIdentifierKey("result"))) ) {s = 9;}
+
+                         
+                        input.seek(index57_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA57_1 = input.LA(1);
+
+                         
+                        int index57_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA57_1==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 2;}
+
+                         
+                        input.seek(index57_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA57_4 = input.LA(1);
+
+                         
+                        int index57_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("reverse"))) ) {s = 7;}
+
+                        else if ( ((validateIdentifierKey("result"))) ) {s = 8;}
+
+                         
+                        input.seek(index57_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA57_2 = input.LA(1);
+
+                         
+                        int index57_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA57_2>=VT_COMPILATION_UNIT && LA57_2<=STRING)||LA57_2==COMMA||(LA57_2>=COLON && LA57_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("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(index57_2);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 57, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA59_eotS =
+        "\30\uffff";
+    static final String DFA59_eofS =
+        "\30\uffff";
+    static final String DFA59_minS =
+        "\1\124\1\4\1\uffff\1\4\1\uffff\1\0\1\uffff\1\4\2\0\3\4\1\0\1\4\1"+
+        "\uffff\3\4\3\0\1\4\1\0";
+    static final String DFA59_maxS =
+        "\1\155\1\171\1\uffff\1\171\1\uffff\1\0\1\uffff\1\171\2\0\3\171\1"+
+        "\0\1\171\1\uffff\3\171\3\0\1\171\1\0";
+    static final String DFA59_acceptS =
+        "\2\uffff\1\2\1\uffff\1\1\1\uffff\1\1\10\uffff\1\1\10\uffff";
+    static final String DFA59_specialS =
+        "\1\uffff\1\13\1\uffff\1\5\1\uffff\1\21\1\uffff\1\14\1\11\1\15\1"+
+        "\10\1\3\1\4\1\20\1\1\1\uffff\1\6\1\7\1\2\1\17\1\16\1\12\1\0\1\uffff}>";
+    static final String[] DFA59_transitionS = {
+            "\3\2\1\uffff\1\2\1\uffff\1\1\2\2\3\uffff\2\2\13\uffff\1\2",
+            "\121\4\1\3\4\4\1\5\1\4\1\6\35\4",
+            "",
+            "\121\4\1\11\1\12\3\4\1\10\1\4\1\6\1\7\15\4\1\13\16\4",
+            "",
+            "\1\uffff",
+            "",
+            "\121\4\1\14\4\4\1\15\1\4\1\6\35\4",
+            "\1\uffff",
+            "\1\uffff",
+            "\121\4\1\16\4\4\1\17\1\4\1\6\35\4",
+            "\126\4\1\17\1\4\1\6\17\4\1\20\15\4",
+            "\122\4\1\21\3\4\1\23\1\4\1\6\16\4\1\22\16\4",
+            "\1\uffff",
+            "\122\4\1\12\3\4\1\24\1\4\1\6\16\4\1\13\16\4",
+            "",
+            "\126\4\1\25\1\4\1\6\16\4\1\13\16\4",
+            "\121\4\1\26\4\4\1\17\1\4\1\6\35\4",
+            "\126\4\1\17\1\4\1\6\17\4\1\27\15\4",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\122\4\1\21\3\4\1\23\1\4\1\6\16\4\1\22\16\4",
+            "\1\uffff"
+    };
+
+    static final short[] DFA59_eot = DFA.unpackEncodedString(DFA59_eotS);
+    static final short[] DFA59_eof = DFA.unpackEncodedString(DFA59_eofS);
+    static final char[] DFA59_min = DFA.unpackEncodedStringToUnsignedChars(DFA59_minS);
+    static final char[] DFA59_max = DFA.unpackEncodedStringToUnsignedChars(DFA59_maxS);
+    static final short[] DFA59_accept = DFA.unpackEncodedString(DFA59_acceptS);
+    static final short[] DFA59_special = DFA.unpackEncodedString(DFA59_specialS);
+    static final short[][] DFA59_transition;
+
+    static {
+        int numStates = DFA59_transitionS.length;
+        DFA59_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA59_transition[i] = DFA.unpackEncodedString(DFA59_transitionS[i]);
+        }
+    }
+
+    class DFA59 extends DFA {
+
+        public DFA59(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 59;
+            this.eot = DFA59_eot;
+            this.eof = DFA59_eof;
+            this.min = DFA59_min;
+            this.max = DFA59_max;
+            this.accept = DFA59_accept;
+            this.special = DFA59_special;
+            this.transition = DFA59_transition;
+        }
+        public String getDescription() {
+            return "594:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA59_22 = input.LA(1);
+
+                         
+                        int index59_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_22==LEFT_SQUARE) ) {s = 18;}
+
+                        else if ( (LA59_22==LEFT_PAREN) ) {s = 19;}
+
+                        else if ( (LA59_22==DOT) ) {s = 17;}
+
+                        else if ( (LA59_22==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_22>=VT_COMPILATION_UNIT && LA59_22<=ID)||(LA59_22>=DOT_STAR && LA59_22<=STRING)||LA59_22==COMMA||(LA59_22>=COLON && LA59_22<=NULL)||(LA59_22>=RIGHT_SQUARE && LA59_22<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                         
+                        input.seek(index59_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA59_14 = input.LA(1);
+
+                         
+                        int index59_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_14==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( (LA59_14==LEFT_PAREN) ) {s = 20;}
+
+                        else if ( (LA59_14==DOT) ) {s = 10;}
+
+                        else if ( (LA59_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_14>=VT_COMPILATION_UNIT && LA59_14<=ID)||(LA59_14>=DOT_STAR && LA59_14<=STRING)||LA59_14==COMMA||(LA59_14>=COLON && LA59_14<=NULL)||(LA59_14>=RIGHT_SQUARE && LA59_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                         
+                        input.seek(index59_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA59_18 = input.LA(1);
+
+                         
+                        int index59_18 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_18==RIGHT_SQUARE) ) {s = 23;}
+
+                        else if ( (LA59_18==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_18>=VT_COMPILATION_UNIT && LA59_18<=STRING)||LA59_18==COMMA||(LA59_18>=COLON && LA59_18<=LEFT_SQUARE)||(LA59_18>=THEN && LA59_18<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                        else if ( (LA59_18==LEFT_PAREN) && (synpred8())) {s = 15;}
+
+                         
+                        input.seek(index59_18);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA59_11 = input.LA(1);
+
+                         
+                        int index59_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_11==RIGHT_SQUARE) ) {s = 16;}
+
+                        else if ( (LA59_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_11>=VT_COMPILATION_UNIT && LA59_11<=STRING)||LA59_11==COMMA||(LA59_11>=COLON && LA59_11<=LEFT_SQUARE)||(LA59_11>=THEN && LA59_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                        else if ( (LA59_11==LEFT_PAREN) && (synpred8())) {s = 15;}
+
+                         
+                        input.seek(index59_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA59_12 = input.LA(1);
+
+                         
+                        int index59_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_12==DOT) ) {s = 17;}
+
+                        else if ( (LA59_12==LEFT_SQUARE) ) {s = 18;}
+
+                        else if ( (LA59_12==LEFT_PAREN) ) {s = 19;}
+
+                        else if ( (LA59_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_12>=VT_COMPILATION_UNIT && LA59_12<=ID)||(LA59_12>=DOT_STAR && LA59_12<=STRING)||LA59_12==COMMA||(LA59_12>=COLON && LA59_12<=NULL)||(LA59_12>=RIGHT_SQUARE && LA59_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                         
+                        input.seek(index59_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA59_3 = input.LA(1);
+
+                         
+                        int index59_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_3==COLON) ) {s = 7;}
+
+                        else if ( (LA59_3==LEFT_PAREN) ) {s = 8;}
+
+                        else if ( (LA59_3==ID) ) {s = 9;}
+
+                        else if ( (LA59_3==DOT) ) {s = 10;}
+
+                        else if ( (LA59_3==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( (LA59_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_3>=VT_COMPILATION_UNIT && LA59_3<=SEMICOLON)||(LA59_3>=DOT_STAR && LA59_3<=STRING)||LA59_3==COMMA||(LA59_3>=BOOL && LA59_3<=NULL)||(LA59_3>=RIGHT_SQUARE && LA59_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                         
+                        input.seek(index59_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA59_16 = input.LA(1);
+
+                         
+                        int index59_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_16==LEFT_PAREN) ) {s = 21;}
+
+                        else if ( (LA59_16==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( (LA59_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_16>=VT_COMPILATION_UNIT && LA59_16<=STRING)||LA59_16==COMMA||(LA59_16>=COLON && LA59_16<=NULL)||(LA59_16>=RIGHT_SQUARE && LA59_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                         
+                        input.seek(index59_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA59_17 = input.LA(1);
+
+                         
+                        int index59_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_17==ID) ) {s = 22;}
+
+                        else if ( (LA59_17==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_17>=VT_COMPILATION_UNIT && LA59_17<=SEMICOLON)||(LA59_17>=DOT && LA59_17<=STRING)||LA59_17==COMMA||(LA59_17>=COLON && LA59_17<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                        else if ( (LA59_17==LEFT_PAREN) && (synpred8())) {s = 15;}
+
+                         
+                        input.seek(index59_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA59_10 = input.LA(1);
+
+                         
+                        int index59_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_10==ID) ) {s = 14;}
+
+                        else if ( (LA59_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_10>=VT_COMPILATION_UNIT && LA59_10<=SEMICOLON)||(LA59_10>=DOT && LA59_10<=STRING)||LA59_10==COMMA||(LA59_10>=COLON && LA59_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                        else if ( (LA59_10==LEFT_PAREN) && (synpred8())) {s = 15;}
+
+                         
+                        input.seek(index59_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA59_8 = input.LA(1);
+
+                         
+                        int index59_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA59_21 = input.LA(1);
+
+                         
+                        int index59_21 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 15;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_21);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA59_1 = input.LA(1);
+
+                         
+                        int index59_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_1==ID) ) {s = 3;}
+
+                        else if ( ((LA59_1>=VT_COMPILATION_UNIT && LA59_1<=SEMICOLON)||(LA59_1>=DOT && LA59_1<=STRING)||LA59_1==COMMA||(LA59_1>=COLON && LA59_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                        else if ( (LA59_1==LEFT_PAREN) ) {s = 5;}
+
+                        else if ( (LA59_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                         
+                        input.seek(index59_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA59_7 = input.LA(1);
+
+                         
+                        int index59_7 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_7==ID) ) {s = 12;}
+
+                        else if ( (LA59_7==LEFT_PAREN) ) {s = 13;}
+
+                        else if ( (LA59_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA59_7>=VT_COMPILATION_UNIT && LA59_7<=SEMICOLON)||(LA59_7>=DOT && LA59_7<=STRING)||LA59_7==COMMA||(LA59_7>=COLON && LA59_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+
+                         
+                        input.seek(index59_7);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA59_9 = input.LA(1);
+
+                         
+                        int index59_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        int LA59_20 = input.LA(1);
+
+                         
+                        int index59_20 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 15;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_20);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 15 : 
+                        int LA59_19 = input.LA(1);
+
+                         
+                        int index59_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 15;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_19);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA59_13 = input.LA(1);
+
+                         
+                        int index59_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 15;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 17 : 
+                        int LA59_5 = input.LA(1);
+
+                         
+                        int index59_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index59_5);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 59, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA61_eotS =
+        "\26\uffff";
+    static final String DFA61_eofS =
+        "\26\uffff";
+    static final String DFA61_minS =
+        "\1\124\1\uffff\1\4\1\uffff\1\4\1\0\2\uffff\1\4\2\0\3\4\1\0\1\4\1"+
+        "\uffff\1\4\4\0";
+    static final String DFA61_maxS =
+        "\1\155\1\uffff\1\171\1\uffff\1\171\1\0\2\uffff\1\171\2\0\3\171\1"+
+        "\0\1\171\1\uffff\1\171\4\0";
+    static final String DFA61_acceptS =
+        "\1\uffff\1\1\1\uffff\1\3\2\uffff\2\2\10\uffff\1\2\5\uffff";
+    static final String DFA61_specialS =
+        "\1\1\1\uffff\1\12\1\uffff\1\4\1\5\2\uffff\1\13\1\2\1\3\1\10\1\6"+
+        "\1\11\1\0\1\7\1\uffff\1\14\4\uffff}>";
+    static final String[] DFA61_transitionS = {
+            "\3\3\1\uffff\1\3\1\uffff\1\2\2\3\3\uffff\2\3\11\uffff\1\1\1"+
+            "\uffff\1\3",
+            "",
+            "\121\6\1\4\4\6\1\5\1\6\1\7\35\6",
+            "",
+            "\121\6\1\12\1\13\3\6\1\11\1\6\1\7\1\10\15\6\1\14\16\6",
+            "\1\uffff",
+            "",
+            "",
+            "\121\6\1\15\4\6\1\16\1\6\1\7\35\6",
+            "\1\uffff",
+            "\1\uffff",
+            "\121\6\1\17\4\6\1\20\1\6\1\7\35\6",
+            "\126\6\1\20\1\6\1\7\17\6\1\21\15\6",
+            "\122\6\1\22\3\6\1\24\1\6\1\7\16\6\1\23\16\6",
+            "\1\uffff",
+            "\122\6\1\13\3\6\1\25\1\6\1\7\16\6\1\14\16\6",
+            "",
+            "\126\6\1\25\1\6\1\7\16\6\1\14\16\6",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
+    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
+    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
+    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
+    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
+    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
+    static final short[][] DFA61_transition;
+
+    static {
+        int numStates = DFA61_transitionS.length;
+        DFA61_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
+        }
+    }
+
+    class DFA61 extends DFA {
+
+        public DFA61(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 61;
+            this.eot = DFA61_eot;
+            this.eof = DFA61_eof;
+            this.min = DFA61_min;
+            this.max = DFA61_max;
+            this.accept = DFA61_accept;
+            this.special = DFA61_special;
+            this.transition = DFA61_transition;
+        }
+        public String getDescription() {
+            return "602:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA61_14 = input.LA(1);
+
+                         
+                        int index61_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 16;}
+
+                        else if ( (true) ) {s = 3;}
+
+                         
+                        input.seek(index61_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA61_0 = input.LA(1);
+
+                         
+                        int index61_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_0==LEFT_SQUARE) && (synpred9())) {s = 1;}
+
+                        else if ( (LA61_0==LEFT_PAREN) ) {s = 2;}
+
+                        else if ( ((LA61_0>=SEMICOLON && LA61_0<=DOT)||LA61_0==END||(LA61_0>=COMMA && LA61_0<=RIGHT_PAREN)||(LA61_0>=DOUBLE_PIPE && LA61_0<=DOUBLE_AMPER)||LA61_0==THEN) ) {s = 3;}
+
+                         
+                        input.seek(index61_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA61_9 = input.LA(1);
+
+                         
+                        int index61_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 3;}
+
+                         
+                        input.seek(index61_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA61_10 = input.LA(1);
+
+                         
+                        int index61_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 3;}
+
+                         
+                        input.seek(index61_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA61_4 = input.LA(1);
+
+                         
+                        int index61_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_4==COLON) ) {s = 8;}
+
+                        else if ( (LA61_4==LEFT_PAREN) ) {s = 9;}
+
+                        else if ( (LA61_4==ID) ) {s = 10;}
+
+                        else if ( (LA61_4==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( (LA61_4==DOT) ) {s = 11;}
+
+                        else if ( (LA61_4==LEFT_SQUARE) ) {s = 12;}
+
+                        else if ( ((LA61_4>=VT_COMPILATION_UNIT && LA61_4<=SEMICOLON)||(LA61_4>=DOT_STAR && LA61_4<=STRING)||LA61_4==COMMA||(LA61_4>=BOOL && LA61_4<=NULL)||(LA61_4>=RIGHT_SQUARE && LA61_4<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                         
+                        input.seek(index61_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA61_5 = input.LA(1);
+
+                         
+                        int index61_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 3;}
+
+                         
+                        input.seek(index61_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA61_12 = input.LA(1);
+
+                         
+                        int index61_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_12==RIGHT_SQUARE) ) {s = 17;}
+
+                        else if ( (LA61_12==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_12>=VT_COMPILATION_UNIT && LA61_12<=STRING)||LA61_12==COMMA||(LA61_12>=COLON && LA61_12<=LEFT_SQUARE)||(LA61_12>=THEN && LA61_12<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA61_12==LEFT_PAREN) && (synpred10())) {s = 16;}
+
+                         
+                        input.seek(index61_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA61_15 = input.LA(1);
+
+                         
+                        int index61_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_15==LEFT_SQUARE) ) {s = 12;}
+
+                        else if ( (LA61_15==LEFT_PAREN) ) {s = 21;}
+
+                        else if ( (LA61_15==DOT) ) {s = 11;}
+
+                        else if ( (LA61_15==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_15>=VT_COMPILATION_UNIT && LA61_15<=ID)||(LA61_15>=DOT_STAR && LA61_15<=STRING)||LA61_15==COMMA||(LA61_15>=COLON && LA61_15<=NULL)||(LA61_15>=RIGHT_SQUARE && LA61_15<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                         
+                        input.seek(index61_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA61_11 = input.LA(1);
+
+                         
+                        int index61_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_11==ID) ) {s = 15;}
+
+                        else if ( (LA61_11==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_11>=VT_COMPILATION_UNIT && LA61_11<=SEMICOLON)||(LA61_11>=DOT && LA61_11<=STRING)||LA61_11==COMMA||(LA61_11>=COLON && LA61_11<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA61_11==LEFT_PAREN) && (synpred10())) {s = 16;}
+
+                         
+                        input.seek(index61_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA61_13 = input.LA(1);
+
+                         
+                        int index61_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_13==DOT) ) {s = 18;}
+
+                        else if ( (LA61_13==LEFT_SQUARE) ) {s = 19;}
+
+                        else if ( (LA61_13==LEFT_PAREN) ) {s = 20;}
+
+                        else if ( (LA61_13==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_13>=VT_COMPILATION_UNIT && LA61_13<=ID)||(LA61_13>=DOT_STAR && LA61_13<=STRING)||LA61_13==COMMA||(LA61_13>=COLON && LA61_13<=NULL)||(LA61_13>=RIGHT_SQUARE && LA61_13<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                         
+                        input.seek(index61_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA61_2 = input.LA(1);
+
+                         
+                        int index61_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_2==ID) ) {s = 4;}
+
+                        else if ( (LA61_2==LEFT_PAREN) ) {s = 5;}
+
+                        else if ( ((LA61_2>=VT_COMPILATION_UNIT && LA61_2<=SEMICOLON)||(LA61_2>=DOT && LA61_2<=STRING)||LA61_2==COMMA||(LA61_2>=COLON && LA61_2<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA61_2==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                         
+                        input.seek(index61_2);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA61_8 = input.LA(1);
+
+                         
+                        int index61_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_8==ID) ) {s = 13;}
+
+                        else if ( (LA61_8==LEFT_PAREN) ) {s = 14;}
+
+                        else if ( (LA61_8==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_8>=VT_COMPILATION_UNIT && LA61_8<=SEMICOLON)||(LA61_8>=DOT && LA61_8<=STRING)||LA61_8==COMMA||(LA61_8>=COLON && LA61_8<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                         
+                        input.seek(index61_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA61_17 = input.LA(1);
+
+                         
+                        int index61_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA61_17==LEFT_PAREN) ) {s = 21;}
+
+                        else if ( (LA61_17==LEFT_SQUARE) ) {s = 12;}
+
+                        else if ( (LA61_17==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA61_17>=VT_COMPILATION_UNIT && LA61_17<=STRING)||LA61_17==COMMA||(LA61_17>=COLON && LA61_17<=NULL)||(LA61_17>=RIGHT_SQUARE && LA61_17<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                         
+                        input.seek(index61_17);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 61, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA74_eotS =
+        "\30\uffff";
+    static final String DFA74_eofS =
+        "\30\uffff";
+    static final String DFA74_minS =
+        "\1\133\1\uffff\2\125\1\0\1\uffff\1\0\1\125\2\4\2\0\2\4\12\0";
+    static final String DFA74_maxS =
+        "\1\141\1\uffff\1\150\1\153\1\0\1\uffff\1\0\1\153\2\171\2\0\2\171"+
+        "\12\0";
+    static final String DFA74_acceptS =
+        "\1\uffff\1\2\3\uffff\1\1\22\uffff";
+    static final String DFA74_specialS =
+        "\4\uffff\1\1\1\uffff\1\0\3\uffff\1\2\1\3\14\uffff}>";
+    static final String[] DFA74_transitionS = {
+            "\2\1\3\uffff\1\2\1\1",
+            "",
+            "\1\3\4\uffff\1\4\10\uffff\6\5",
+            "\1\7\1\1\2\uffff\1\5\1\6\2\uffff\1\1\2\5\3\uffff\6\1\2\5\1\10",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\12\1\5\2\uffff\1\13\1\14\2\5\1\uffff\2\13\2\5\7\uffff\2\13"+
+            "\1\11",
+            "\147\15\1\16\1\17\15\15",
+            "\147\20\1\21\1\22\15\20",
+            "\1\uffff",
+            "\1\uffff",
+            "\121\26\1\23\3\26\1\24\1\25\1\26\1\27\1\26\2\24\11\26\2\24\17"+
+            "\26",
+            "\147\15\1\16\1\17\15\15",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA74_eot = DFA.unpackEncodedString(DFA74_eotS);
+    static final short[] DFA74_eof = DFA.unpackEncodedString(DFA74_eofS);
+    static final char[] DFA74_min = DFA.unpackEncodedStringToUnsignedChars(DFA74_minS);
+    static final char[] DFA74_max = DFA.unpackEncodedStringToUnsignedChars(DFA74_maxS);
+    static final short[] DFA74_accept = DFA.unpackEncodedString(DFA74_acceptS);
+    static final short[] DFA74_special = DFA.unpackEncodedString(DFA74_specialS);
+    static final short[][] DFA74_transition;
+
+    static {
+        int numStates = DFA74_transitionS.length;
+        DFA74_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA74_transition[i] = DFA.unpackEncodedString(DFA74_transitionS[i]);
+        }
+    }
+
+    class DFA74 extends DFA {
+
+        public DFA74(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 74;
+            this.eot = DFA74_eot;
+            this.eof = DFA74_eof;
+            this.min = DFA74_min;
+            this.max = DFA74_max;
+            this.accept = DFA74_accept;
+            this.special = DFA74_special;
+            this.transition = DFA74_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 673:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA74_6 = input.LA(1);
+
+                         
+                        int index74_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index74_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA74_4 = input.LA(1);
+
+                         
+                        int index74_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index74_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA74_10 = input.LA(1);
+
+                         
+                        int index74_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index74_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA74_11 = input.LA(1);
+
+                         
+                        int index74_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index74_11);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 74, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA75_eotS =
+        "\62\uffff";
+    static final String DFA75_eofS =
+        "\1\1\5\uffff\1\4\53\uffff";
+    static final String DFA75_minS =
+        "\1\133\1\uffff\2\125\1\uffff\2\125\2\4\1\125\3\0\3\4\2\0\3\4\35"+
+        "\0";
+    static final String DFA75_maxS =
+        "\1\141\1\uffff\1\150\1\153\1\uffff\1\150\1\153\2\171\1\153\3\0\3"+
+        "\171\2\0\3\171\35\0";
+    static final String DFA75_acceptS =
+        "\1\uffff\1\2\2\uffff\1\1\55\uffff";
+    static final String DFA75_specialS =
+        "\12\uffff\1\3\1\4\1\1\3\uffff\1\2\1\0\40\uffff}>";
+    static final String[] DFA75_transitionS = {
+            "\2\1\3\uffff\1\1\1\2",
+            "",
+            "\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\11\4\uffff\1\12\10\uffff\6\4",
+            "\1\13\1\4\2\uffff\1\14\1\15\2\4\1\uffff\2\14\2\4\7\uffff\2\14"+
+            "\1\16",
+            "\121\31\1\17\3\31\1\22\1\20\1\31\1\21\1\31\2\22\3\31\1\23\1"+
+            "\24\1\25\1\26\1\27\1\30\2\22\17\31",
+            "\147\32\1\33\1\34\15\32",
+            "\1\35\1\1\2\uffff\1\4\1\36\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1"+
+            "\37",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\121\43\1\40\3\43\1\41\1\42\1\43\1\44\1\43\2\41\11\43\2\41\17"+
+            "\43",
+            "\147\45\1\46\1\47\15\45",
+            "\121\31\1\51\1\55\2\31\1\53\1\52\1\56\1\50\1\31\2\53\11\31\2"+
+            "\53\1\54\16\31",
+            "\1\uffff",
+            "\1\uffff",
+            "\126\31\1\57\1\56\1\50\35\31",
+            "\121\31\1\60\3\31\1\53\1\61\1\31\1\21\1\31\2\53\11\31\2\53\17"+
+            "\31",
+            "\121\31\1\60\3\31\1\53\1\61\1\31\1\21\1\31\2\53\11\31\2\53\17"+
+            "\31",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] 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 = DFA75_transitionS.length;
+        DFA75_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA75_transition[i] = DFA.unpackEncodedString(DFA75_transitionS[i]);
+        }
+    }
+
+    class DFA75 extends DFA {
+
+        public DFA75(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 75;
+            this.eot = DFA75_eot;
+            this.eof = DFA75_eof;
+            this.min = DFA75_min;
+            this.max = DFA75_max;
+            this.accept = DFA75_accept;
+            this.special = DFA75_special;
+            this.transition = DFA75_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 677:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA75_17 = input.LA(1);
+
+                         
+                        int index75_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index75_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA75_12 = input.LA(1);
+
+                         
+                        int index75_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index75_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA75_16 = input.LA(1);
+
+                         
+                        int index75_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index75_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA75_10 = input.LA(1);
+
+                         
+                        int index75_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index75_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA75_11 = input.LA(1);
+
+                         
+                        int index75_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index75_11);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 75, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit396 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit401 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_EOF_in_compilation_unit406 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_key_in_package_statement446 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_package_id_in_package_statement448 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_package_statement450 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_id472 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOT_in_package_id476 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_package_id478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement503 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement510 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement516 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement522 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement528 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement533 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement543 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_import_statement554 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_import_name_in_import_statement556 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_import_statement558 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_function_import_statement582 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_function_key_in_function_import_statement584 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement586 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement588 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_name613 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_DOT_in_import_name617 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_import_name619 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name624 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_key_in_global650 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_global652 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_global_id_in_global654 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_global656 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_id682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_key_in_function700 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_function702 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_function_id_in_function705 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_parameters_in_function707 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function709 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_id739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_key_in_query757 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_query_id_in_query759 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
+    public static final BitSet FOLLOW_parameters_in_query761 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query764 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_END_in_query766 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_query768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_id800 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_query_id813 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters829 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters836 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_COMMA_in_parameters839 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters841 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters850 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_param_definition874 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_argument_in_param_definition877 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument888 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument890 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_template_key_in_template903 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_template_id_in_template905 = new BitSet(new long[]{0x0000000000000000L,0x0000000000300000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template907 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_template_slot_in_template912 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
+    public static final BitSet FOLLOW_END_in_template917 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template919 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_id949 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_template_id962 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_template_slot979 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_slot_id_in_template_slot981 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template_slot983 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_slot_id1008 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_key_in_rule1026 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_rule_id_in_rule1028 = new BitSet(new long[]{0x0000000000000000L,0x0000200000200000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule1030 = new BitSet(new long[]{0x0000000000000000L,0x0000200000200000L});
+    public static final BitSet FOLLOW_when_part_in_rule1033 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule1036 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1065 = new BitSet(new long[]{0x0000000000000002L,0x0000000024200000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1067 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1070 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1091 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1104 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1122 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1124 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1129 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1133 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1138 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1186 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1193 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1199 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1205 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1211 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1217 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1223 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1229 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1234 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1246 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1249 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1260 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1277 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1280 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1292 = new BitSet(new long[]{0x0000000000000000L,0x0000000084000000L});
+    public static final BitSet FOLLOW_INT_in_salience1299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1308 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1324 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1327 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1339 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1342 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1356 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1359 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1370 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1373 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1384 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1387 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1398 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_INT_in_duration1401 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect1415 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1418 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1436 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1439 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1451 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1472 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1493 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1497 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1499 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1502 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1523 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1545 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1552 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1557 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1595 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1599 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1601 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1604 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1625 = new BitSet(new long[]{0x0000000000000002L,0x0000000200200000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1647 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1654 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1659 = new BitSet(new long[]{0x0000000000000002L,0x0000000200200000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1697 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1703 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1709 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1715 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1721 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1724 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1732 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1746 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist1760 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1784 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1791 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1793 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1795 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1808 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not1854 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not1871 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not1878 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not1880 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not1882 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not1890 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval1929 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval1933 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall1957 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall1959 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall1961 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall1964 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source1996 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source2005 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2037 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2054 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source2070 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2098 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2102 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2104 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2114 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2120 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2157 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2162 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2164 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2168 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2172 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2174 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2180 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2184 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2186 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2192 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2196 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2245 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2249 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement2271 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2275 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement2277 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2301 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2303 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id2326 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id2339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source2355 = new BitSet(new long[]{0x0000000000000002L,0x0000000004400000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2368 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2375 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2407 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain2409 = new BitSet(new long[]{0x0000000000000002L,0x0000080004400000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain2429 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2451 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2462 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2495 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2508 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding2528 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding2534 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2541 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2543 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2545 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2584 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2596 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2602 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2607 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
+    public static final BitSet FOLLOW_data_type_in_fact2636 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2638 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
+    public static final BitSet FOLLOW_constraints_in_fact2640 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2643 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints2668 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints2672 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_constraint_in_constraints2675 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint2689 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2700 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2704 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2707 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2722 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2726 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2729 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr2750 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2752 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr2765 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2770 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr2772 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2774 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint2794 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2796 = new BitSet(new long[]{0x0000000000000002L,0x000001FC04200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2800 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint2806 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2808 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2862 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label2888 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_COLON_in_label2890 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2906 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2918 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2921 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2936 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2948 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2951 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2973 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2978 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2983 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2985 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2987 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator3005 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator3011 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3017 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator3023 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3029 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3035 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator3041 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3044 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3047 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3050 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3053 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3056 = new BitSet(new long[]{0x0000000000000000L,0x00000E00C6200000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3059 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3066 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator3072 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3078 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3084 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3090 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3096 = new BitSet(new long[]{0x0000000000000000L,0x00000E00C6200000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3099 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3104 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3119 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator3124 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3126 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3131 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3134 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3138 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3141 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3146 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value3157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3162 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value3168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_data_type3210 = new BitSet(new long[]{0x0000000000000002L,0x0000080000400000L});
+    public static final BitSet FOLLOW_DOT_in_data_type3214 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_data_type3216 = new BitSet(new long[]{0x0000000000000002L,0x0000080000400000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type3221 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3247 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3249 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3260 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path3264 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3266 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element3290 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element3292 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3321 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3340 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data3344 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data3350 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3352 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3369 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3388 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data3391 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3405 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3410 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3426 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3446 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data3449 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3463 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3468 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3485 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3504 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk_data3507 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3521 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3526 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3545 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key3547 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3549 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3575 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key3577 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3579 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3605 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3607 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3609 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3611 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3613 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3639 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key3641 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3643 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3669 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key3671 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3699 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key3701 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3703 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3729 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key3731 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3733 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3759 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3761 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3763 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key3788 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key3810 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key3832 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key3854 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key3876 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key3898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key3920 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_when_key3942 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key3964 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key3986 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key4008 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key4030 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key4052 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key4074 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key4096 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key4118 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key4140 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key4162 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key4184 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key4206 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key4228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key4250 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key4272 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key4294 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key4316 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key4338 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key4360 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4383 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key4385 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4387 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key4412 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key4434 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key4456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key4478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key4500 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key4522 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11487 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred11489 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred21536 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31589 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_and_key_in_synpred31591 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred41638 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41640 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred51742 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61774 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred61777 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred61779 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred71861 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_or_key_in_synpred71864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred71866 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92423 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102445 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred112918 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred112921 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred122948 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred122951 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file




More information about the jboss-svn-commits mailing list