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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Apr 28 13:05:28 EDT 2008


Author: porcelli
Date: 2008-04-28 13:05:28 -0400 (Mon, 28 Apr 2008)
New Revision: 19745

Added:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g
Log:
New DRL and its TreeWalker (for now just working with normal_lhs_block rule).

New DRL parser changes:
 - Removed from original DRL grammar most hard keywords
 - Added Tree rewrite
 - Removed most java code actions

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java	2008-04-28 17:05:28 UTC (rev 19745)
@@ -0,0 +1,1941 @@
+package org.drools.lang;
+
+// $ANTLR 3.0.1 /Users/porcelli/Desktop/testes/NewDRL.g 2008-04-28 10:54:02
+
+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 NewDRLLexer extends Lexer {
+    public static final int COMMA=53;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=18;
+    public static final int VT_FACT_OR=23;
+    public static final int VK_NOT=35;
+    public static final int HexDigit=77;
+    public static final int VK_ACCUMULATE=42;
+    public static final int VT_EXPRESSION_CHAIN=20;
+    public static final int ARROW=56;
+    public static final int VT_AND_PREFIX=13;
+    public static final int MISC=73;
+    public static final int FLOAT=66;
+    public static final int VT_CURLY_CHUNK=9;
+    public static final int TILDE=80;
+    public static final int DOT=55;
+    public static final int VT_OR_PREFIX=14;
+    public static final int DOUBLE_PIPE=50;
+    public static final int LESS=61;
+    public static final int VT_PATTERN=21;
+    public static final int EscapeSequence=76;
+    public static final int VK_EXISTS=39;
+    public static final int INT=65;
+    public static final int VT_BIND_FIELD=24;
+    public static final int VK_COLLECT=47;
+    public static final int VK_EVAL=28;
+    public static final int LEFT_SQUARE=69;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=81;
+    public static final int GREATER=59;
+    public static final int VT_FACT=4;
+    public static final int VK_MATCHES=30;
+    public static final int LEFT_CURLY=71;
+    public static final int VT_FACT_BINDING=22;
+    public static final int ID=54;
+    public static final int NOT_EQUAL=63;
+    public static final int DOUBLE_AMPER=51;
+    public static final int LEFT_PAREN=48;
+    public static final int RIGHT_CURLY=72;
+    public static final int BOOL=67;
+    public static final int VT_AND_INFIX=15;
+    public static final int VK_ENTRY_POINT=34;
+    public static final int VT_ACCESSOR_PATH=26;
+    public static final int VT_FROM_SOURCE=19;
+    public static final int VT_LABEL=7;
+    public static final int VK_CONTAINS=29;
+    public static final int VK_SOUNDSLIKE=32;
+    public static final int VT_FIELD=25;
+    public static final int WS=75;
+    public static final int VT_QUALIFIED_ID=6;
+    public static final int VK_AND=38;
+    public static final int STRING=64;
+    public static final int VK_IN=36;
+    public static final int VT_ACCESSOR_ELEMENT=27;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=17;
+    public static final int VK_REVERSE=45;
+    public static final int VK_MEMBEROF=33;
+    public static final int GREATER_EQUAL=60;
+    public static final int VT_OR_INFIX=16;
+    public static final int VK_FORALL=40;
+    public static final int VT_SQUARE_CHUNK=10;
+    public static final int VK_OR=37;
+    public static final int VT_PAREN_CHUNK=11;
+    public static final int VT_NAME=8;
+    public static final int LESS_EQUAL=62;
+    public static final int VK_RESULT=46;
+    public static final int UnicodeEscape=78;
+    public static final int EQUAL=58;
+    public static final int SEMICOLON=52;
+    public static final int VT_AND_IMPLICIT=12;
+    public static final int EOF=-1;
+    public static final int VT_CONSTRAINTS=5;
+    public static final int NULL=68;
+    public static final int EOL=74;
+    public static final int VK_INIT=43;
+    public static final int Tokens=84;
+    public static final int COLON=57;
+    public static final int OctalEscape=79;
+    public static final int VK_ACTION=44;
+    public static final int MULTI_LINE_COMMENT=83;
+    public static final int VK_FROM=41;
+    public static final int VK_EXCLUDES=31;
+    public static final int RIGHT_PAREN=49;
+    public static final int RIGHT_SQUARE=70;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=82;
+    public NewDRLLexer() {;} 
+    public NewDRLLexer(CharStream input) {
+        super(input);
+        ruleMemo = new HashMap[38+1];
+     }
+    public String getGrammarFileName() { return "/Users/porcelli/Desktop/testes/NewDRL.g"; }
+
+    // $ANTLR start WS
+    public final void mWS() throws RecognitionException {
+        try {
+            int _type = WS;
+            // /Users/porcelli/Desktop/testes/NewDRL.g:458:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:458:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:458: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/Desktop/testes/NewDRL.g:458:19: ' '
+            	    {
+            	    match(' '); if (failed) return ;
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:459:19: '\\t'
+            	    {
+            	    match('\t'); if (failed) return ;
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:460:19: '\\f'
+            	    {
+            	    match('\f'); if (failed) return ;
+
+            	    }
+            	    break;
+            	case 4 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:461: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/Desktop/testes/NewDRL.g:467:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:468:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:468: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("468:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+
+                throw nvae;
+            }
+            switch (alt2) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:468:14: ( '\\r\\n' )=> '\\r\\n'
+                    {
+                    match("\r\n"); if (failed) return ;
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:469:25: '\\r'
+                    {
+                    match('\r'); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:470: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/Desktop/testes/NewDRL.g:475:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:475:4: ( '-' )? ( '0' .. '9' )+
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:475:4: ( '-' )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0=='-') ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:475:5: '-'
+                    {
+                    match('-'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:475: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/Desktop/testes/NewDRL.g:475: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/Desktop/testes/NewDRL.g:479:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:479:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:479:4: ( '-' )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0=='-') ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:479:5: '-'
+                    {
+                    match('-'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:479: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/Desktop/testes/NewDRL.g:479: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/Desktop/testes/NewDRL.g:479: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/Desktop/testes/NewDRL.g:479: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/Desktop/testes/NewDRL.g:483: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("482:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+
+                throw nvae;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    {
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:483:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    {
+                    match('\"'); if (failed) return ;
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:483: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/Desktop/testes/NewDRL.g:483:15: EscapeSequence
+                    	    {
+                    	    mEscapeSequence(); if (failed) return ;
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:483: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/Desktop/testes/NewDRL.g:484:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    {
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:484:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:484:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    {
+                    match('\''); if (failed) return ;
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:484: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/Desktop/testes/NewDRL.g:484:16: EscapeSequence
+                    	    {
+                    	    mEscapeSequence(); if (failed) return ;
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:484: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/Desktop/testes/NewDRL.g:488:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:488:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            {
+            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/Desktop/testes/NewDRL.g:492:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
+            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("490:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+
+                    throw nvae;
+                }
+
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("490:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+
+                throw nvae;
+            }
+            switch (alt11) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:492:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    {
+                    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/Desktop/testes/NewDRL.g:496:9: UnicodeEscape
+                    {
+                    mUnicodeEscape(); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:497:9: OctalEscape
+                    {
+                    mOctalEscape(); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EscapeSequence
+
+    // $ANTLR start OctalEscape
+    public final void mOctalEscape() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:502:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            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("500: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("500:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:14: ( '0' .. '3' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:15: '0' .. '3'
+                    {
+                    matchRange('0','3'); if (failed) return ;
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:25: ( '0' .. '7' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:26: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:36: ( '0' .. '7' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:502:37: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:14: ( '0' .. '7' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:15: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:25: ( '0' .. '7' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:503:26: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:504:9: '\\\\' ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:504:14: ( '0' .. '7' )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:504:15: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        finally {
+        }
+    }
+    // $ANTLR end OctalEscape
+
+    // $ANTLR start UnicodeEscape
+    public final void mUnicodeEscape() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:509:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:509:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            {
+            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/Desktop/testes/NewDRL.g:513:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:513:4: ( 'true' | 'false' )
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:513: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("513:4: ( 'true' | 'false' )", 13, 0, input);
+
+                throw nvae;
+            }
+            switch (alt13) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:513:5: 'true'
+                    {
+                    match("true"); if (failed) return ;
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:513: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/Desktop/testes/NewDRL.g:516:6: ( 'null' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:516:8: 'null'
+            {
+            match("null"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end NULL
+
+    // $ANTLR start SEMICOLON
+    public final void mSEMICOLON() throws RecognitionException {
+        try {
+            int _type = SEMICOLON;
+            // /Users/porcelli/Desktop/testes/NewDRL.g:519:2: ( ';' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:519:4: ';'
+            {
+            match(';'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end SEMICOLON
+
+    // $ANTLR start COLON
+    public final void mCOLON() throws RecognitionException {
+        try {
+            int _type = COLON;
+            // /Users/porcelli/Desktop/testes/NewDRL.g:523:2: ( ':' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:523:4: ':'
+            {
+            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/Desktop/testes/NewDRL.g:528:2: ( '==' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:528: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/Desktop/testes/NewDRL.g:532:2: ( '!=' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:532: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/Desktop/testes/NewDRL.g:536:2: ( '>' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:536: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/Desktop/testes/NewDRL.g:540:2: ( '>=' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:540: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/Desktop/testes/NewDRL.g:544:2: ( '<' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:544: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/Desktop/testes/NewDRL.g:548:2: ( '<=' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:548: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/Desktop/testes/NewDRL.g:552:2: ( '->' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:552: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/Desktop/testes/NewDRL.g:556:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:556:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            {
+            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/Desktop/testes/NewDRL.g:556: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/Desktop/testes/NewDRL.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
+            	        input.consume();
+            	    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/Desktop/testes/NewDRL.g:560:9: ( '(' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:560: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/Desktop/testes/NewDRL.g:564:9: ( ')' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:564: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/Desktop/testes/NewDRL.g:568:9: ( '[' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:568: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/Desktop/testes/NewDRL.g:572:9: ( ']' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:572: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/Desktop/testes/NewDRL.g:576:9: ( '{' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:576: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/Desktop/testes/NewDRL.g:580:9: ( '}' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:580: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/Desktop/testes/NewDRL.g:583:7: ( ',' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:583: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/Desktop/testes/NewDRL.g:586:5: ( '.' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:586: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/Desktop/testes/NewDRL.g:590:2: ( '&&' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:590: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/Desktop/testes/NewDRL.g:594:2: ( '||' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:594: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;
+            // /Users/porcelli/Desktop/testes/NewDRL.g:597:7: ( '~' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:597:9: '~'
+            {
+            match('~'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end TILDE
+
+    // $ANTLR start SH_STYLE_SINGLE_LINE_COMMENT
+    public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = SH_STYLE_SINGLE_LINE_COMMENT;
+            // /Users/porcelli/Desktop/testes/NewDRL.g:600:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:600:4: '#' ( options {greedy=false; } : . )* EOL
+            {
+            match('#'); if (failed) return ;
+            // /Users/porcelli/Desktop/testes/NewDRL.g:600: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/Desktop/testes/NewDRL.g:600: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/Desktop/testes/NewDRL.g:606:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:606:4: '//' ( options {greedy=false; } : . )* EOL
+            {
+            match("//"); if (failed) return ;
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:606: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/Desktop/testes/NewDRL.g:606: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/Desktop/testes/NewDRL.g:611:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:611:4: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); if (failed) return ;
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:611: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/Desktop/testes/NewDRL.g:611: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/Desktop/testes/NewDRL.g:615:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:
+            {
+            if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
+                input.consume();
+            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/Desktop/testes/NewDRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | NULL | SEMICOLON | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | TILDE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC )
+        int alt18=31;
+        alt18 = dfa18.predict(input);
+        switch (alt18) {
+            case 1 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:10: WS
+                {
+                mWS(); if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:13: INT
+                {
+                mINT(); if (failed) return ;
+
+                }
+                break;
+            case 3 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:17: FLOAT
+                {
+                mFLOAT(); if (failed) return ;
+
+                }
+                break;
+            case 4 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:23: STRING
+                {
+                mSTRING(); if (failed) return ;
+
+                }
+                break;
+            case 5 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:30: BOOL
+                {
+                mBOOL(); if (failed) return ;
+
+                }
+                break;
+            case 6 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:35: NULL
+                {
+                mNULL(); if (failed) return ;
+
+                }
+                break;
+            case 7 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:40: SEMICOLON
+                {
+                mSEMICOLON(); if (failed) return ;
+
+                }
+                break;
+            case 8 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:50: COLON
+                {
+                mCOLON(); if (failed) return ;
+
+                }
+                break;
+            case 9 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:56: EQUAL
+                {
+                mEQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 10 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:62: NOT_EQUAL
+                {
+                mNOT_EQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 11 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:72: GREATER
+                {
+                mGREATER(); if (failed) return ;
+
+                }
+                break;
+            case 12 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:80: GREATER_EQUAL
+                {
+                mGREATER_EQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 13 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:94: LESS
+                {
+                mLESS(); if (failed) return ;
+
+                }
+                break;
+            case 14 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:99: LESS_EQUAL
+                {
+                mLESS_EQUAL(); if (failed) return ;
+
+                }
+                break;
+            case 15 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:110: ARROW
+                {
+                mARROW(); if (failed) return ;
+
+                }
+                break;
+            case 16 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:116: ID
+                {
+                mID(); if (failed) return ;
+
+                }
+                break;
+            case 17 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:119: LEFT_PAREN
+                {
+                mLEFT_PAREN(); if (failed) return ;
+
+                }
+                break;
+            case 18 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:130: RIGHT_PAREN
+                {
+                mRIGHT_PAREN(); if (failed) return ;
+
+                }
+                break;
+            case 19 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:142: LEFT_SQUARE
+                {
+                mLEFT_SQUARE(); if (failed) return ;
+
+                }
+                break;
+            case 20 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:154: RIGHT_SQUARE
+                {
+                mRIGHT_SQUARE(); if (failed) return ;
+
+                }
+                break;
+            case 21 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:167: LEFT_CURLY
+                {
+                mLEFT_CURLY(); if (failed) return ;
+
+                }
+                break;
+            case 22 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:178: RIGHT_CURLY
+                {
+                mRIGHT_CURLY(); if (failed) return ;
+
+                }
+                break;
+            case 23 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:190: COMMA
+                {
+                mCOMMA(); if (failed) return ;
+
+                }
+                break;
+            case 24 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:196: DOT
+                {
+                mDOT(); if (failed) return ;
+
+                }
+                break;
+            case 25 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:200: DOUBLE_AMPER
+                {
+                mDOUBLE_AMPER(); if (failed) return ;
+
+                }
+                break;
+            case 26 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:213: DOUBLE_PIPE
+                {
+                mDOUBLE_PIPE(); if (failed) return ;
+
+                }
+                break;
+            case 27 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:225: TILDE
+                {
+                mTILDE(); if (failed) return ;
+
+                }
+                break;
+            case 28 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:231: SH_STYLE_SINGLE_LINE_COMMENT
+                {
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 29 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:260: C_STYLE_SINGLE_LINE_COMMENT
+                {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 30 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:288: MULTI_LINE_COMMENT
+                {
+                mMULTI_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 31 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:1:307: MISC
+                {
+                mMISC(); if (failed) return ;
+
+                }
+                break;
+
+        }
+
+    }
+
+    // $ANTLR start synpred1
+    public final void synpred1_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:468:14: ( '\\r\\n' )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:468:16: '\\r\\n'
+        {
+        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\40\1\uffff\1\36\3\35\2\uffff\2\36\1\50\1\52\11\uffff"+
+        "\2\36\2\uffff\1\36\5\uffff\3\35\12\uffff\3\35\1\65\1\35\1\67\1\uffff"+
+        "\1\65\1\uffff";
+    static final String DFA18_eofS =
+        "\70\uffff";
+    static final String DFA18_minS =
+        "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\162\1\141\1\165\2\uffff\4"+
+        "\75\11\uffff\1\46\1\174\2\uffff\1\52\5\uffff\1\165\2\154\12\uffff"+
+        "\1\145\1\163\1\154\1\60\1\145\1\60\1\uffff\1\60\1\uffff";
+    static final String DFA18_maxS =
+        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\1\162\1\141\1\165\2\uffff"+
+        "\4\75\11\uffff\1\46\1\174\2\uffff\1\57\5\uffff\1\165\2\154\12\uffff"+
+        "\1\145\1\163\1\154\1\u00ff\1\145\1\u00ff\1\uffff\1\u00ff\1\uffff";
+    static final String DFA18_acceptS =
+        "\1\uffff\1\1\2\uffff\1\4\4\uffff\1\7\1\10\4\uffff\1\20\1\21\1\22"+
+        "\1\23\1\24\1\25\1\26\1\27\1\30\2\uffff\1\33\1\34\1\uffff\1\20\1"+
+        "\37\1\17\1\2\1\3\3\uffff\1\11\1\12\1\14\1\13\1\16\1\15\1\31\1\32"+
+        "\1\36\1\35\6\uffff\1\5\1\uffff\1\6";
+    static final String DFA18_specialS =
+        "\70\uffff}>";
+    static final String[] DFA18_transitionS = {
+            "\2\1\1\uffff\2\1\22\uffff\1\1\1\14\1\4\1\33\1\17\1\36\1\30\1"+
+            "\5\1\20\1\21\2\36\1\26\1\2\1\27\1\34\12\3\1\12\1\11\1\16\1\13"+
+            "\1\15\2\36\32\35\1\22\1\36\1\23\1\36\1\17\1\uffff\5\35\1\7\7"+
+            "\35\1\10\5\35\1\6\6\35\1\24\1\31\1\25\1\32\101\uffff\100\35",
+            "",
+            "\12\3\4\uffff\1\37",
+            "\1\41\1\uffff\12\3",
+            "",
+            "\uffff\4",
+            "\1\42",
+            "\1\43",
+            "\1\44",
+            "",
+            "",
+            "\1\45",
+            "\1\46",
+            "\1\47",
+            "\1\51",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\53",
+            "\1\54",
+            "",
+            "",
+            "\1\55\4\uffff\1\56",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\57",
+            "\1\60",
+            "\1\61",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\62",
+            "\1\63",
+            "\1\64",
+            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
+            "\35",
+            "\1\66",
+            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
+            "\35",
+            "",
+            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35\105\uffff\100"+
+            "\35",
+            ""
+    };
+
+    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 | SEMICOLON | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | TILDE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC );";
+        }
+    }
+ 
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLLexer.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java	2008-04-28 17:05:28 UTC (rev 19745)
@@ -0,0 +1,10737 @@
+package org.drools.lang;
+
+// $ANTLR 3.0.1 /Users/porcelli/Desktop/testes/NewDRL.g 2008-04-28 10:54:02
+
+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 NewDRLParser extends Parser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_FACT", "VT_CONSTRAINTS", "VT_QUALIFIED_ID", "VT_LABEL", "VT_NAME", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "LEFT_PAREN", "RIGHT_PAREN", "DOUBLE_PIPE", "DOUBLE_AMPER", "SEMICOLON", "COMMA", "ID", "DOT", "ARROW", "COLON", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "STRING", "INT", "FLOAT", "BOOL", "NULL", "LEFT_SQUARE", "RIGHT_SQUA!
 RE", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "TILDE", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+    };
+    public static final int COMMA=53;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=18;
+    public static final int VT_FACT_OR=23;
+    public static final int VK_NOT=35;
+    public static final int HexDigit=77;
+    public static final int ARROW=56;
+    public static final int VT_EXPRESSION_CHAIN=20;
+    public static final int VK_ACCUMULATE=42;
+    public static final int MISC=73;
+    public static final int VT_AND_PREFIX=13;
+    public static final int FLOAT=66;
+    public static final int VT_CURLY_CHUNK=9;
+    public static final int TILDE=80;
+    public static final int DOT=55;
+    public static final int VT_OR_PREFIX=14;
+    public static final int DOUBLE_PIPE=50;
+    public static final int LESS=61;
+    public static final int VT_PATTERN=21;
+    public static final int EscapeSequence=76;
+    public static final int VK_EXISTS=39;
+    public static final int INT=65;
+    public static final int VT_BIND_FIELD=24;
+    public static final int VK_COLLECT=47;
+    public static final int VK_EVAL=28;
+    public static final int LEFT_SQUARE=69;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=81;
+    public static final int GREATER=59;
+    public static final int VT_FACT=4;
+    public static final int VK_MATCHES=30;
+    public static final int LEFT_CURLY=71;
+    public static final int VT_FACT_BINDING=22;
+    public static final int ID=54;
+    public static final int NOT_EQUAL=63;
+    public static final int DOUBLE_AMPER=51;
+    public static final int LEFT_PAREN=48;
+    public static final int RIGHT_CURLY=72;
+    public static final int BOOL=67;
+    public static final int VT_AND_INFIX=15;
+    public static final int VK_ENTRY_POINT=34;
+    public static final int VT_FROM_SOURCE=19;
+    public static final int VT_ACCESSOR_PATH=26;
+    public static final int VT_LABEL=7;
+    public static final int VK_CONTAINS=29;
+    public static final int WS=75;
+    public static final int VT_FIELD=25;
+    public static final int VK_SOUNDSLIKE=32;
+    public static final int VT_QUALIFIED_ID=6;
+    public static final int STRING=64;
+    public static final int VK_AND=38;
+    public static final int VT_ACCESSOR_ELEMENT=27;
+    public static final int VK_IN=36;
+    public static final int VK_REVERSE=45;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=17;
+    public static final int GREATER_EQUAL=60;
+    public static final int VK_MEMBEROF=33;
+    public static final int VT_OR_INFIX=16;
+    public static final int VT_SQUARE_CHUNK=10;
+    public static final int VK_FORALL=40;
+    public static final int VT_PAREN_CHUNK=11;
+    public static final int VK_OR=37;
+    public static final int VT_NAME=8;
+    public static final int LESS_EQUAL=62;
+    public static final int VK_RESULT=46;
+    public static final int UnicodeEscape=78;
+    public static final int EQUAL=58;
+    public static final int SEMICOLON=52;
+    public static final int VT_AND_IMPLICIT=12;
+    public static final int EOF=-1;
+    public static final int VT_CONSTRAINTS=5;
+    public static final int EOL=74;
+    public static final int NULL=68;
+    public static final int VK_INIT=43;
+    public static final int COLON=57;
+    public static final int OctalEscape=79;
+    public static final int MULTI_LINE_COMMENT=83;
+    public static final int VK_ACTION=44;
+    public static final int VK_EXCLUDES=31;
+    public static final int VK_FROM=41;
+    public static final int RIGHT_PAREN=49;
+    public static final int RIGHT_SQUARE=70;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=82;
+
+        public NewDRLParser(TokenStream input) {
+            super(input);
+            ruleMemo = new HashMap[77+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/Desktop/testes/NewDRL.g"; }
+
+
+    	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);
+    	}
+
+
+    public static class normal_lhs_block_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start normal_lhs_block
+    // /Users/porcelli/Desktop/testes/NewDRL.g:75:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    public final normal_lhs_block_return normal_lhs_block() throws RecognitionException {
+        normal_lhs_block_return retval = new normal_lhs_block_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        lhs_return lhs1 = null;
+
+
+        RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:76:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:76:4: ( lhs )*
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:76:4: ( lhs )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==LEFT_PAREN||LA1_0==ID) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:76:4: lhs
+            	    {
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block220);
+            	    lhs1=lhs();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_lhs.add(lhs1.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } 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();
+            // 77:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:77:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_IMPLICIT, "VT_AND_IMPLICIT"), root_1);
+
+                // /Users/porcelli/Desktop/testes/NewDRL.g:77:23: ( lhs )*
+                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/Desktop/testes/NewDRL.g:80:1: lhs : lhs_or ;
+    public final lhs_return lhs() throws RecognitionException {
+        lhs_return retval = new lhs_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        lhs_or_return lhs_or2 = null;
+
+
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:80:5: ( lhs_or )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:80:7: lhs_or
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_lhs_or_in_lhs241);
+            lhs_or2=lhs_or();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or2.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/Desktop/testes/NewDRL.g:83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
+    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_PAREN3=null;
+        Token RIGHT_PAREN5=null;
+        or_key_return or = null;
+
+        or_key_return value = null;
+
+        lhs_and_return lhs_and4 = null;
+
+        lhs_and_return lhs_and6 = null;
+
+        lhs_and_return lhs_and7 = null;
+
+
+        Object pipe_tree=null;
+        Object LEFT_PAREN3_tree=null;
+        Object RIGHT_PAREN5_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/Desktop/testes/NewDRL.g:86:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==LEFT_PAREN) ) {
+                int LA5_1 = input.LA(2);
+
+                if ( (LA5_1==ID) ) {
+                    switch ( input.LA(3) ) {
+                    case DOT:
+                    case COLON:
+                    case LEFT_SQUARE:
+                        {
+                        alt5=2;
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        int LA5_4 = input.LA(4);
+
+                        if ( (synpred1()) ) {
+                            alt5=1;
+                        }
+                        else if ( (true) ) {
+                            alt5=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 4, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case ID:
+                        {
+                        int LA5_5 = input.LA(4);
+
+                        if ( (synpred1()) ) {
+                            alt5=1;
+                        }
+                        else if ( (true) ) {
+                            alt5=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 5, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 3, input);
+
+                        throw nvae;
+                    }
+
+                }
+                else if ( (LA5_1==LEFT_PAREN) ) {
+                    alt5=2;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA5_0==ID) ) {
+                alt5=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("83:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 5, 0, input);
+
+                throw nvae;
+            }
+            switch (alt5) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:86:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    {
+                    LEFT_PAREN3=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or262); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN3);
+
+                    pushFollow(FOLLOW_or_key_in_lhs_or266);
+                    or=or_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_key.add(or.getTree());
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:86:48: ( lhs_and )+
+                    int cnt2=0;
+                    loop2:
+                    do {
+                        int alt2=2;
+                        int LA2_0 = input.LA(1);
+
+                        if ( (LA2_0==LEFT_PAREN||LA2_0==ID) ) {
+                            alt2=1;
+                        }
+
+
+                        switch (alt2) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:86:48: lhs_and
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or268);
+                    	    lhs_and4=lhs_and();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and4.getTree());
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt2 >= 1 ) break loop2;
+                    	    if (backtracking>0) {failed=true; return retval;}
+                                EarlyExitException eee =
+                                    new EarlyExitException(2, input);
+                                throw eee;
+                        }
+                        cnt2++;
+                    } while (true);
+
+                    RIGHT_PAREN5=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or271); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN5);
+
+
+                    // 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();
+                    // 87:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:87:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_PREFIX, ((Token)or.start)), root_1);
+
+                        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_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:88:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    {
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:88:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:88:5: lhs_and
+                    {
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or290);
+                    lhs_and6=lhs_and();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and6.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();
+                    // 88:13: -> lhs_and
+                    {
+                        adaptor.addChild(root_0, stream_lhs_and.next());
+
+                    }
+
+                    }
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:89:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    loop4:
+                    do {
+                        int alt4=2;
+                        int LA4_0 = input.LA(1);
+
+                        if ( (LA4_0==ID) ) {
+                            int LA4_2 = input.LA(2);
+
+                            if ( ((synpred2()&&(validateIdentifierKey("or")))) ) {
+                                alt4=1;
+                            }
+
+
+                        }
+                        else if ( (LA4_0==DOUBLE_PIPE) ) {
+                            int LA4_3 = input.LA(2);
+
+                            if ( (synpred2()) ) {
+                                alt4=1;
+                            }
+
+
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:89:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    {
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:89:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    int alt3=2;
+                    	    int LA3_0 = input.LA(1);
+
+                    	    if ( (LA3_0==ID) && ((validateIdentifierKey("or")))) {
+                    	        alt3=1;
+                    	    }
+                    	    else if ( (LA3_0==DOUBLE_PIPE) ) {
+                    	        alt3=2;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return retval;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("89:28: (value= or_key | pipe= DOUBLE_PIPE )", 3, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt3) {
+                    	        case 1 :
+                    	            // /Users/porcelli/Desktop/testes/NewDRL.g:89:29: value= or_key
+                    	            {
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or312);
+                    	            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/Desktop/testes/NewDRL.g:89:69: pipe= DOUBLE_PIPE
+                    	            {
+                    	            pipe=(Token)input.LT(1);
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or319); if (failed) return retval;
+                    	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
+
+                    	            if ( backtracking==0 ) {
+                    	              orToken = pipe;
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or324);
+                    	    lhs_and7=lhs_and();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and7.getTree());
+
+                    	    // AST REWRITE
+                    	    // elements: lhs_and, 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();
+                    	    // 90:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    {
+                    	        // /Users/porcelli/Desktop/testes/NewDRL.g:90:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        {
+                    	        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 loop4;
+                        }
+                    } 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/Desktop/testes/NewDRL.g:93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
+    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_PAREN8=null;
+        Token RIGHT_PAREN10=null;
+        and_key_return and = null;
+
+        and_key_return value = null;
+
+        lhs_unary_return lhs_unary9 = null;
+
+        lhs_unary_return lhs_unary11 = null;
+
+        lhs_unary_return lhs_unary12 = null;
+
+
+        Object amper_tree=null;
+        Object LEFT_PAREN8_tree=null;
+        Object RIGHT_PAREN10_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/Desktop/testes/NewDRL.g:96:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==LEFT_PAREN) ) {
+                int LA9_1 = input.LA(2);
+
+                if ( (LA9_1==ID) ) {
+                    switch ( input.LA(3) ) {
+                    case DOT:
+                    case COLON:
+                    case LEFT_SQUARE:
+                        {
+                        alt9=2;
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        switch ( input.LA(4) ) {
+                        case LEFT_PAREN:
+                            {
+                            int LA9_6 = input.LA(5);
+
+                            if ( (synpred3()) ) {
+                                alt9=1;
+                            }
+                            else if ( (true) ) {
+                                alt9=2;
+                            }
+                            else {
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 6, input);
+
+                                throw nvae;
+                            }
+                            }
+                            break;
+                        case ID:
+                            {
+                            int LA9_7 = input.LA(5);
+
+                            if ( (synpred3()) ) {
+                                alt9=1;
+                            }
+                            else if ( (true) ) {
+                                alt9=2;
+                            }
+                            else {
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 7, input);
+
+                                throw nvae;
+                            }
+                            }
+                            break;
+                        case VT_FACT:
+                        case VT_CONSTRAINTS:
+                        case VT_QUALIFIED_ID:
+                        case VT_LABEL:
+                        case VT_NAME:
+                        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 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 RIGHT_PAREN:
+                        case DOUBLE_PIPE:
+                        case DOUBLE_AMPER:
+                        case SEMICOLON:
+                        case COMMA:
+                        case DOT:
+                        case ARROW:
+                        case COLON:
+                        case EQUAL:
+                        case GREATER:
+                        case GREATER_EQUAL:
+                        case LESS:
+                        case LESS_EQUAL:
+                        case NOT_EQUAL:
+                        case STRING:
+                        case INT:
+                        case FLOAT:
+                        case BOOL:
+                        case NULL:
+                        case LEFT_SQUARE:
+                        case RIGHT_SQUARE:
+                        case LEFT_CURLY:
+                        case RIGHT_CURLY:
+                        case MISC:
+                        case EOL:
+                        case WS:
+                        case EscapeSequence:
+                        case HexDigit:
+                        case UnicodeEscape:
+                        case OctalEscape:
+                        case TILDE:
+                        case SH_STYLE_SINGLE_LINE_COMMENT:
+                        case C_STYLE_SINGLE_LINE_COMMENT:
+                        case MULTI_LINE_COMMENT:
+                            {
+                            alt9=2;
+                            }
+                            break;
+                        default:
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 4, input);
+
+                            throw nvae;
+                        }
+
+                        }
+                        break;
+                    case ID:
+                        {
+                        int LA9_5 = input.LA(4);
+
+                        if ( (synpred3()) ) {
+                            alt9=1;
+                        }
+                        else if ( (true) ) {
+                            alt9=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 5, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 3, input);
+
+                        throw nvae;
+                    }
+
+                }
+                else if ( (LA9_1==LEFT_PAREN) ) {
+                    alt9=2;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA9_0==ID) ) {
+                alt9=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("93:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 9, 0, input);
+
+                throw nvae;
+            }
+            switch (alt9) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:96:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    {
+                    LEFT_PAREN8=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and362); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN8);
+
+                    pushFollow(FOLLOW_and_key_in_lhs_and366);
+                    and=and_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_and_key.add(and.getTree());
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:96:51: ( lhs_unary )+
+                    int cnt6=0;
+                    loop6:
+                    do {
+                        int alt6=2;
+                        int LA6_0 = input.LA(1);
+
+                        if ( (LA6_0==LEFT_PAREN||LA6_0==ID) ) {
+                            alt6=1;
+                        }
+
+
+                        switch (alt6) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:96:51: lhs_unary
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and368);
+                    	    lhs_unary9=lhs_unary();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary9.getTree());
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt6 >= 1 ) break loop6;
+                    	    if (backtracking>0) {failed=true; return retval;}
+                                EarlyExitException eee =
+                                    new EarlyExitException(6, input);
+                                throw eee;
+                        }
+                        cnt6++;
+                    } while (true);
+
+                    RIGHT_PAREN10=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and371); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN10);
+
+
+                    // 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();
+                    // 97:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:97:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_PREFIX, ((Token)and.start)), root_1);
+
+                        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_0, root_1);
+                        }
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:98:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    {
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:98:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:98:5: lhs_unary
+                    {
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and390);
+                    lhs_unary11=lhs_unary();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary11.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();
+                    // 98:15: -> lhs_unary
+                    {
+                        adaptor.addChild(root_0, stream_lhs_unary.next());
+
+                    }
+
+                    }
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:99:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    loop8:
+                    do {
+                        int alt8=2;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0==ID) ) {
+                            int LA8_2 = input.LA(2);
+
+                            if ( ((synpred4()&&(validateIdentifierKey("and")))) ) {
+                                alt8=1;
+                            }
+
+
+                        }
+                        else if ( (LA8_0==DOUBLE_AMPER) ) {
+                            int LA8_3 = input.LA(2);
+
+                            if ( (synpred4()) ) {
+                                alt8=1;
+                            }
+
+
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:99:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    {
+                    	    // /Users/porcelli/Desktop/testes/NewDRL.g:99:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    int alt7=2;
+                    	    int LA7_0 = input.LA(1);
+
+                    	    if ( (LA7_0==ID) && ((validateIdentifierKey("and")))) {
+                    	        alt7=1;
+                    	    }
+                    	    else if ( (LA7_0==DOUBLE_AMPER) ) {
+                    	        alt7=2;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return retval;}
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("99:30: (value= and_key | amper= DOUBLE_AMPER )", 7, 0, input);
+
+                    	        throw nvae;
+                    	    }
+                    	    switch (alt7) {
+                    	        case 1 :
+                    	            // /Users/porcelli/Desktop/testes/NewDRL.g:99:31: value= and_key
+                    	            {
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and412);
+                    	            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/Desktop/testes/NewDRL.g:99:73: amper= DOUBLE_AMPER
+                    	            {
+                    	            amper=(Token)input.LT(1);
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and419); if (failed) return retval;
+                    	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
+
+                    	            if ( backtracking==0 ) {
+                    	              andToken = amper;
+                    	            }
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and424);
+                    	    lhs_unary12=lhs_unary();
+                    	    _fsp--;
+                    	    if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary12.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();
+                    	    // 100:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    {
+                    	        // /Users/porcelli/Desktop/testes/NewDRL.g:100:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        {
+                    	        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 loop8;
+                        }
+                    } 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/Desktop/testes/NewDRL.g:103:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
+    public final lhs_unary_return lhs_unary() throws RecognitionException {
+        lhs_unary_return retval = new lhs_unary_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN17=null;
+        Token RIGHT_PAREN19=null;
+        Token SEMICOLON21=null;
+        lhs_exist_return lhs_exist13 = null;
+
+        lhs_not_return lhs_not14 = null;
+
+        lhs_eval_return lhs_eval15 = null;
+
+        lhs_forall_return lhs_forall16 = null;
+
+        lhs_or_return lhs_or18 = null;
+
+        pattern_source_return pattern_source20 = null;
+
+
+        Object LEFT_PAREN17_tree=null;
+        Object RIGHT_PAREN19_tree=null;
+        Object SEMICOLON21_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:105:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            int alt10=6;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==ID) ) {
+                int LA10_1 = input.LA(2);
+
+                if ( ((validateIdentifierKey("exists"))) ) {
+                    alt10=1;
+                }
+                else if ( ((validateIdentifierKey("not"))) ) {
+                    alt10=2;
+                }
+                else if ( ((validateIdentifierKey("eval"))) ) {
+                    alt10=3;
+                }
+                else if ( ((validateIdentifierKey("forall"))) ) {
+                    alt10=4;
+                }
+                else if ( (true) ) {
+                    alt10=6;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 10, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA10_0==LEFT_PAREN) ) {
+                alt10=5;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("105:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 10, 0, input);
+
+                throw nvae;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:105:6: lhs_exist
+                    {
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary462);
+                    lhs_exist13=lhs_exist();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist13.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:106:5: lhs_not
+                    {
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary468);
+                    lhs_not14=lhs_not();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not14.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:107:5: lhs_eval
+                    {
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary474);
+                    lhs_eval15=lhs_eval();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval15.getTree());
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:108:5: lhs_forall
+                    {
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary480);
+                    lhs_forall16=lhs_forall();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall16.getTree());
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:109:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN17=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary486); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary489);
+                    lhs_or18=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or18.getTree());
+                    RIGHT_PAREN19=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary491); if (failed) return retval;
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:110:5: pattern_source
+                    {
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary498);
+                    pattern_source20=pattern_source();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source20.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:112:3: ( ( SEMICOLON )=> SEMICOLON )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==SEMICOLON) ) {
+                int LA11_1 = input.LA(2);
+
+                if ( (synpred5()) ) {
+                    alt11=1;
+                }
+            }
+            switch (alt11) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:112:4: ( SEMICOLON )=> SEMICOLON
+                    {
+                    SEMICOLON21=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary512); 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/Desktop/testes/NewDRL.g:115:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ) ;
+    public final lhs_exist_return lhs_exist() throws RecognitionException {
+        lhs_exist_return retval = new lhs_exist_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN24=null;
+        Token RIGHT_PAREN26=null;
+        exists_key_return exists_key22 = null;
+
+        lhs_or_return lhs_or23 = null;
+
+        lhs_or_return lhs_or25 = null;
+
+        lhs_pattern_return lhs_pattern27 = null;
+
+
+        Object LEFT_PAREN24_tree=null;
+        Object RIGHT_PAREN26_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
+        RewriteRuleSubtreeStream stream_exists_key=new RewriteRuleSubtreeStream(adaptor,"rule exists_key");
+        RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:116:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:116:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            {
+            pushFollow(FOLLOW_exists_key_in_lhs_exist526);
+            exists_key22=exists_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_exists_key.add(exists_key22.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:117:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt12=3;
+            alt12 = dfa12.predict(input);
+            switch (alt12) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:117:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    {
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist550);
+                    lhs_or23=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or23.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:118:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN24=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist557); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN24);
+
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist559);
+                    lhs_or25=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or25.getTree());
+                    RIGHT_PAREN26=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist561); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN26);
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:119:12: lhs_pattern
+                    {
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist574);
+                    lhs_pattern27=lhs_pattern();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern27.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: exists_key, lhs_or, lhs_pattern
+            // 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();
+            // 121:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:121:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_exists_key.nextNode(), root_1);
+
+                // /Users/porcelli/Desktop/testes/NewDRL.g:121:26: ( lhs_or )?
+                if ( stream_lhs_or.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_or.next());
+
+                }
+                stream_lhs_or.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:121:34: ( lhs_pattern )?
+                if ( stream_lhs_pattern.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_pattern.next());
+
+                }
+                stream_lhs_pattern.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/Desktop/testes/NewDRL.g:124:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ) ;
+    public final lhs_not_return lhs_not() throws RecognitionException {
+        lhs_not_return retval = new lhs_not_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN30=null;
+        Token RIGHT_PAREN32=null;
+        not_key_return not_key28 = null;
+
+        lhs_or_return lhs_or29 = null;
+
+        lhs_or_return lhs_or31 = null;
+
+        lhs_pattern_return lhs_pattern33 = null;
+
+
+        Object LEFT_PAREN30_tree=null;
+        Object RIGHT_PAREN32_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
+        RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
+        RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:124:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:124:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            {
+            pushFollow(FOLLOW_not_key_in_lhs_not619);
+            not_key28=not_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_not_key.add(not_key28.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:125:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt13=3;
+            alt13 = dfa13.predict(input);
+            switch (alt13) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:125:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    {
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not636);
+                    lhs_or29=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or29.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:126:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN30=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not643); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN30);
+
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not645);
+                    lhs_or31=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or31.getTree());
+                    RIGHT_PAREN32=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not647); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN32);
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:127:6: lhs_pattern
+                    {
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not655);
+                    lhs_pattern33=lhs_pattern();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern33.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: lhs_or, lhs_pattern, not_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();
+            // 128:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:128:13: ^( not_key ( lhs_or )? ( lhs_pattern )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
+
+                // /Users/porcelli/Desktop/testes/NewDRL.g:128:23: ( lhs_or )?
+                if ( stream_lhs_or.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_or.next());
+
+                }
+                stream_lhs_or.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:128:31: ( lhs_pattern )?
+                if ( stream_lhs_pattern.hasNext() ) {
+                    adaptor.addChild(root_1, stream_lhs_pattern.next());
+
+                }
+                stream_lhs_pattern.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/Desktop/testes/NewDRL.g:131:1: lhs_eval : eval_key paren_chunk -> ^( eval_key paren_chunk ) ;
+    public final lhs_eval_return lhs_eval() throws RecognitionException {
+        lhs_eval_return retval = new lhs_eval_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        eval_key_return eval_key34 = null;
+
+        paren_chunk_return paren_chunk35 = null;
+
+
+        RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:132:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:132:4: eval_key paren_chunk
+            {
+            pushFollow(FOLLOW_eval_key_in_lhs_eval689);
+            eval_key34=eval_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_eval_key.add(eval_key34.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval691);
+            paren_chunk35=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk35.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();
+            // 133:3: -> ^( eval_key paren_chunk )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:133: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/Desktop/testes/NewDRL.g:136:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ ) ;
+    public final lhs_forall_return lhs_forall() throws RecognitionException {
+        lhs_forall_return retval = new lhs_forall_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN37=null;
+        Token RIGHT_PAREN39=null;
+        forall_key_return forall_key36 = null;
+
+        lhs_pattern_return lhs_pattern38 = null;
+
+
+        Object LEFT_PAREN37_tree=null;
+        Object RIGHT_PAREN39_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
+        RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:137:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:137:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_forall_key_in_lhs_forall712);
+            forall_key36=forall_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_forall_key.add(forall_key36.getTree());
+            LEFT_PAREN37=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall714); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN37);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:137:26: ( lhs_pattern )+
+            int cnt14=0;
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( (LA14_0==ID) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:137:26: lhs_pattern
+            	    {
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall716);
+            	    lhs_pattern38=lhs_pattern();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern38.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt14 >= 1 ) break loop14;
+            	    if (backtracking>0) {failed=true; return retval;}
+                        EarlyExitException eee =
+                            new EarlyExitException(14, input);
+                        throw eee;
+                }
+                cnt14++;
+            } while (true);
+
+            RIGHT_PAREN39=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall719); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN39);
+
+
+            // AST REWRITE
+            // elements: 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();
+            // 138:3: -> ^( forall_key ( lhs_pattern )+ )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:138:6: ^( forall_key ( lhs_pattern )+ )
+                {
+                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_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/Desktop/testes/NewDRL.g:141:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    public final pattern_source_return pattern_source() throws RecognitionException {
+        pattern_source_return retval = new pattern_source_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        lhs_pattern_return lhs_pattern40 = null;
+
+        from_key_return from_key41 = null;
+
+        accumulate_statement_return accumulate_statement42 = null;
+
+        collect_statement_return collect_statement43 = null;
+
+        entrypoint_statement_return entrypoint_statement44 = null;
+
+        from_source_return from_source45 = null;
+
+
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:143:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:143:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source749);
+            lhs_pattern40=lhs_pattern();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern40.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:144:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==ID) ) {
+                int LA16_1 = input.LA(2);
+
+                if ( (LA16_1==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                    int LA16_3 = input.LA(3);
+
+                    if ( (LA16_3==EOF||(LA16_3>=RIGHT_PAREN && LA16_3<=COMMA)||LA16_3==MISC) && ((validateIdentifierKey("from")))) {
+                        alt16=1;
+                    }
+                    else if ( (LA16_3==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA16_6 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("from"))) ) {
+                            alt16=1;
+                        }
+                    }
+                    else if ( (LA16_3==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA16_7 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("from"))) ) {
+                            alt16=1;
+                        }
+                    }
+                    else if ( (LA16_3==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA16_8 = input.LA(4);
+
+                        if ( (LA16_8==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                            int LA16_10 = input.LA(5);
+
+                            if ( (LA16_10==LEFT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA16_11 = input.LA(6);
+
+                                if ( (LA16_11==RIGHT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                    int LA16_14 = input.LA(7);
+
+                                    if ( (LA16_14==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                        int LA16_16 = input.LA(8);
+
+                                        if ( ((validateIdentifierKey("from"))) ) {
+                                            alt16=1;
+                                        }
+                                    }
+                                    else if ( (LA16_14==EOF||(LA16_14>=RIGHT_PAREN && LA16_14<=DOT)) && ((validateIdentifierKey("from")))) {
+                                        alt16=1;
+                                    }
+                                }
+                                else if ( ((LA16_11>=VT_FACT && LA16_11<=LEFT_SQUARE)||(LA16_11>=LEFT_CURLY && LA16_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("from")))) {
+                                    alt16=1;
+                                }
+                            }
+                            else if ( (LA16_10==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA16_12 = input.LA(6);
+
+                                if ( ((validateIdentifierKey("from"))) ) {
+                                    alt16=1;
+                                }
+                            }
+                            else if ( (LA16_10==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                int LA16_13 = input.LA(6);
+
+                                if ( (LA16_13==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                                    int LA16_15 = input.LA(7);
+
+                                    if ( ((validateIdentifierKey("from"))) ) {
+                                        alt16=1;
+                                    }
+                                }
+                            }
+                            else if ( (LA16_10==EOF||(LA16_10>=RIGHT_PAREN && LA16_10<=ID)) && ((validateIdentifierKey("from")))) {
+                                alt16=1;
+                            }
+                        }
+                    }
+                }
+            }
+            switch (alt16) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:145:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    {
+                    pushFollow(FOLLOW_from_key_in_pattern_source758);
+                    from_key41=from_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key41.getTree(), root_0);
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    int alt15=4;
+                    int LA15_0 = input.LA(1);
+
+                    if ( (LA15_0==ID) ) {
+                        int LA15_1 = input.LA(2);
+
+                        if ( (LA15_1==MISC) && ((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point")))) {
+                            alt15=3;
+                        }
+                        else if ( (LA15_1==LEFT_PAREN) ) {
+                            switch ( input.LA(3) ) {
+                            case ID:
+                                {
+                                int LA15_5 = input.LA(4);
+
+                                if ( ((validateIdentifierKey("accumulate"))) ) {
+                                    alt15=1;
+                                }
+                                else if ( ((validateIdentifierKey("collect"))) ) {
+                                    alt15=2;
+                                }
+                                else if ( (true) ) {
+                                    alt15=4;
+                                }
+                                else {
+                                    if (backtracking>0) {failed=true; return retval;}
+                                    NoViableAltException nvae =
+                                        new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 5, input);
+
+                                    throw nvae;
+                                }
+                                }
+                                break;
+                            case VT_FACT:
+                            case VT_CONSTRAINTS:
+                            case VT_QUALIFIED_ID:
+                            case VT_LABEL:
+                            case VT_NAME:
+                            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 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 RIGHT_PAREN:
+                            case DOUBLE_PIPE:
+                            case DOUBLE_AMPER:
+                            case SEMICOLON:
+                            case COMMA:
+                            case DOT:
+                            case ARROW:
+                            case COLON:
+                            case EQUAL:
+                            case GREATER:
+                            case GREATER_EQUAL:
+                            case LESS:
+                            case LESS_EQUAL:
+                            case NOT_EQUAL:
+                            case STRING:
+                            case INT:
+                            case FLOAT:
+                            case BOOL:
+                            case NULL:
+                            case LEFT_SQUARE:
+                            case RIGHT_SQUARE:
+                            case LEFT_CURLY:
+                            case RIGHT_CURLY:
+                            case MISC:
+                            case EOL:
+                            case WS:
+                            case EscapeSequence:
+                            case HexDigit:
+                            case UnicodeEscape:
+                            case OctalEscape:
+                            case TILDE:
+                            case SH_STYLE_SINGLE_LINE_COMMENT:
+                            case C_STYLE_SINGLE_LINE_COMMENT:
+                            case MULTI_LINE_COMMENT:
+                                {
+                                alt15=4;
+                                }
+                                break;
+                            case LEFT_PAREN:
+                                {
+                                int LA15_6 = input.LA(4);
+
+                                if ( ((validateIdentifierKey("accumulate"))) ) {
+                                    alt15=1;
+                                }
+                                else if ( (true) ) {
+                                    alt15=4;
+                                }
+                                else {
+                                    if (backtracking>0) {failed=true; return retval;}
+                                    NoViableAltException nvae =
+                                        new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 6, input);
+
+                                    throw nvae;
+                                }
+                                }
+                                break;
+                            default:
+                                if (backtracking>0) {failed=true; return retval;}
+                                NoViableAltException nvae =
+                                    new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 3, input);
+
+                                throw nvae;
+                            }
+
+                        }
+                        else if ( (LA15_1==EOF||(LA15_1>=RIGHT_PAREN && LA15_1<=DOT)) ) {
+                            alt15=4;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 1, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("146:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 15, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt15) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:146:14: accumulate_statement
+                            {
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source774);
+                            accumulate_statement42=accumulate_statement();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement42.getTree());
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:147:15: collect_statement
+                            {
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source790);
+                            collect_statement43=collect_statement();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement43.getTree());
+
+                            }
+                            break;
+                        case 3 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:148:15: entrypoint_statement
+                            {
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source807);
+                            entrypoint_statement44=entrypoint_statement();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement44.getTree());
+
+                            }
+                            break;
+                        case 4 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:149:15: from_source
+                            {
+                            pushFollow(FOLLOW_from_source_in_pattern_source823);
+                            from_source45=from_source();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source45.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/Desktop/testes/NewDRL.g:154:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? ) ;
+    public final accumulate_statement_return accumulate_statement() throws RecognitionException {
+        accumulate_statement_return retval = new accumulate_statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN47=null;
+        Token COMMA49=null;
+        Token RIGHT_PAREN52=null;
+        accumulate_key_return accumulate_key46 = null;
+
+        lhs_or_return lhs_or48 = null;
+
+        accumulate_init_clause_return accumulate_init_clause50 = null;
+
+        accumulate_id_clause_return accumulate_id_clause51 = null;
+
+
+        Object LEFT_PAREN47_tree=null;
+        Object COMMA49_tree=null;
+        Object RIGHT_PAREN52_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/Desktop/testes/NewDRL.g:155:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:155:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement851);
+            accumulate_key46=accumulate_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key46.getTree());
+            LEFT_PAREN47=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement855); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN47);
+
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement857);
+            lhs_or48=lhs_or();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_lhs_or.add(lhs_or48.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:156:21: ( COMMA )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
+
+            if ( (LA17_0==COMMA) ) {
+                alt17=1;
+            }
+            switch (alt17) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:156:21: COMMA
+                    {
+                    COMMA49=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement859); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA49);
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:157:3: ( accumulate_init_clause | accumulate_id_clause )
+            int alt18=2;
+            alt18 = dfa18.predict(input);
+            switch (alt18) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:157:5: accumulate_init_clause
+                    {
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement867);
+                    accumulate_init_clause50=accumulate_init_clause();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause50.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:158:5: accumulate_id_clause
+                    {
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement873);
+                    accumulate_id_clause51=accumulate_id_clause();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause51.getTree());
+
+                    }
+                    break;
+
+            }
+
+            RIGHT_PAREN52=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement881); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN52);
+
+
+            // AST REWRITE
+            // elements: accumulate_init_clause, accumulate_id_clause, lhs_or, accumulate_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();
+            // 161:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:161:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_accumulate_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_lhs_or.next());
+                // /Users/porcelli/Desktop/testes/NewDRL.g:161:30: ( accumulate_init_clause )?
+                if ( stream_accumulate_init_clause.hasNext() ) {
+                    adaptor.addChild(root_1, stream_accumulate_init_clause.next());
+
+                }
+                stream_accumulate_init_clause.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:161:54: ( accumulate_id_clause )?
+                if ( stream_accumulate_id_clause.hasNext() ) {
+                    adaptor.addChild(root_1, stream_accumulate_id_clause.next());
+
+                }
+                stream_accumulate_id_clause.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 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/Desktop/testes/NewDRL.g:164:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
+    public final accumulate_init_clause_return accumulate_init_clause() throws RecognitionException {
+        accumulate_init_clause_return retval = new accumulate_init_clause_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token COMMA54=null;
+        Token COMMA56=null;
+        Token COMMA58=null;
+        paren_chunk_return pc1 = null;
+
+        paren_chunk_return pc2 = null;
+
+        paren_chunk_return pc3 = null;
+
+        paren_chunk_return pc4 = null;
+
+        init_key_return init_key53 = null;
+
+        action_key_return action_key55 = null;
+
+        reverse_key_return reverse_key57 = null;
+
+        result_key_return result_key59 = null;
+
+
+        Object COMMA54_tree=null;
+        Object COMMA56_tree=null;
+        Object COMMA58_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/Desktop/testes/NewDRL.g:165:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:165:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
+            {
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause908);
+            init_key53=init_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_init_key.add(init_key53.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause913);
+            pc1=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc1.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:166:18: ( COMMA )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==COMMA) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:166:18: COMMA
+                    {
+                    COMMA54=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause915); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA54);
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause919);
+            action_key55=action_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_action_key.add(action_key55.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause923);
+            pc2=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc2.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:167:29: ( COMMA )?
+            int alt20=2;
+            int LA20_0 = input.LA(1);
+
+            if ( (LA20_0==COMMA) ) {
+                alt20=1;
+            }
+            switch (alt20) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:167:29: COMMA
+                    {
+                    COMMA56=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause925); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA56);
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:168:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            int alt22=2;
+            alt22 = dfa22.predict(input);
+            switch (alt22) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:168:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    {
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause931);
+                    reverse_key57=reverse_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key57.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause935);
+                    pc3=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(pc3.getTree());
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:168:32: ( COMMA )?
+                    int alt21=2;
+                    int LA21_0 = input.LA(1);
+
+                    if ( (LA21_0==COMMA) ) {
+                        alt21=1;
+                    }
+                    switch (alt21) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:168:32: COMMA
+                            {
+                            COMMA58=(Token)input.LT(1);
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause937); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COMMA.add(COMMA58);
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause943);
+            result_key59=result_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_result_key.add(result_key59.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause947);
+            pc4=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(pc4.getTree());
+
+            // AST REWRITE
+            // elements: reverse_key, pc1, init_key, pc2, pc3, action_key, pc4, result_key
+            // 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();
+            // 170:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:170:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_INIT_CLAUSE, "VT_ACCUMULATE_INIT_CLAUSE"), root_1);
+
+                // /Users/porcelli/Desktop/testes/NewDRL.g:170:33: ^( init_key $pc1)
+                {
+                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/Desktop/testes/NewDRL.g:170: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/Desktop/testes/NewDRL.g:170:69: ( ^( reverse_key $pc3) )?
+                if ( stream_reverse_key.hasNext()||stream_pc3.hasNext() ) {
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:170: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_reverse_key.reset();
+                stream_pc3.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:170: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/Desktop/testes/NewDRL.g:173: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/Desktop/testes/NewDRL.g:174:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:174:4: id= ID text= paren_chunk
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause996); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause1000);
+            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();
+            // 175:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:175: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/Desktop/testes/NewDRL.g:178:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source ) ;
+    public final collect_statement_return collect_statement() throws RecognitionException {
+        collect_statement_return retval = new collect_statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN61=null;
+        Token RIGHT_PAREN63=null;
+        collect_key_return collect_key60 = null;
+
+        pattern_source_return pattern_source62 = null;
+
+
+        Object LEFT_PAREN61_tree=null;
+        Object RIGHT_PAREN63_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_collect_key=new RewriteRuleSubtreeStream(adaptor,"rule collect_key");
+        RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:179:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:179:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_collect_key_in_collect_statement1022);
+            collect_key60=collect_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_collect_key.add(collect_key60.getTree());
+            LEFT_PAREN61=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement1026); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN61);
+
+            pushFollow(FOLLOW_pattern_source_in_collect_statement1028);
+            pattern_source62=pattern_source();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_pattern_source.add(pattern_source62.getTree());
+            RIGHT_PAREN63=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement1030); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN63);
+
+
+            // AST REWRITE
+            // elements: 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();
+            // 181:2: -> ^( collect_key pattern_source )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:181:5: ^( collect_key pattern_source )
+                {
+                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_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/Desktop/testes/NewDRL.g:184:1: entrypoint_statement : entry_point_key name -> ^( entry_point_key name ) ;
+    public final entrypoint_statement_return entrypoint_statement() throws RecognitionException {
+        entrypoint_statement_return retval = new entrypoint_statement_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        entry_point_key_return entry_point_key64 = null;
+
+        name_return name65 = null;
+
+
+        RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
+        RewriteRuleSubtreeStream stream_name=new RewriteRuleSubtreeStream(adaptor,"rule name");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:185:2: ( entry_point_key name -> ^( entry_point_key name ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:185:4: entry_point_key name
+            {
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement1050);
+            entry_point_key64=entry_point_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key64.getTree());
+            pushFollow(FOLLOW_name_in_entrypoint_statement1052);
+            name65=name();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_name.add(name65.getTree());
+
+            // AST REWRITE
+            // elements: name, entry_point_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();
+            // 186:2: -> ^( entry_point_key name )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:186:5: ^( entry_point_key name )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_name.next());
+
+                adaptor.addChild(root_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 from_source_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start from_source
+    // /Users/porcelli/Desktop/testes/NewDRL.g:189:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    public final from_source_return from_source() throws RecognitionException {
+        from_source_return retval = new from_source_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID66=null;
+        paren_chunk_return args = null;
+
+        expression_chain_return expression_chain67 = null;
+
+
+        Object ID66_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:190:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:190:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            {
+            ID66=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_source1072); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID66);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:191:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            int alt23=2;
+            alt23 = dfa23.predict(input);
+            switch (alt23) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:191:5: ( LEFT_PAREN )=>args= paren_chunk
+                    {
+                    pushFollow(FOLLOW_paren_chunk_in_from_source1085);
+                    args=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(args.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:192:3: ( expression_chain )?
+            int alt24=2;
+            int LA24_0 = input.LA(1);
+
+            if ( (LA24_0==DOT) ) {
+                alt24=1;
+            }
+            switch (alt24) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:192:3: expression_chain
+                    {
+                    pushFollow(FOLLOW_expression_chain_in_from_source1092);
+                    expression_chain67=expression_chain();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain67.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: paren_chunk, expression_chain, 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();
+            // 193:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:193:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FROM_SOURCE, "VT_FROM_SOURCE"), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                // /Users/porcelli/Desktop/testes/NewDRL.g:193:25: ( paren_chunk )?
+                if ( stream_paren_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                }
+                stream_paren_chunk.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:193:38: ( expression_chain )?
+                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/Desktop/testes/NewDRL.g:196:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
+    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 ID68=null;
+        square_chunk_return square_chunk69 = null;
+
+        paren_chunk_return paren_chunk70 = null;
+
+        expression_chain_return expression_chain71 = null;
+
+
+        Object startToken_tree=null;
+        Object ID68_tree=null;
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
+        RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:197:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:198:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
+            {
+            startToken=(Token)input.LT(1);
+            match(input,DOT,FOLLOW_DOT_in_expression_chain1124); if (failed) return retval;
+            if ( backtracking==0 ) stream_DOT.add(startToken);
+
+            ID68=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain1126); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID68);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:199:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            int alt25=3;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0==LEFT_SQUARE) && (synpred9())) {
+                alt25=1;
+            }
+            else if ( (LA25_0==LEFT_PAREN) ) {
+                int LA25_2 = input.LA(2);
+
+                if ( (LA25_2==LEFT_PAREN) ) {
+                    int LA25_4 = input.LA(3);
+
+                    if ( (synpred10()) ) {
+                        alt25=2;
+                    }
+                }
+                else if ( (LA25_2==ID) ) {
+                    int LA25_5 = input.LA(3);
+
+                    if ( (synpred10()) ) {
+                        alt25=2;
+                    }
+                }
+                else if ( ((LA25_2>=VT_FACT && LA25_2<=VK_COLLECT)||(LA25_2>=DOUBLE_PIPE && LA25_2<=COMMA)||(LA25_2>=DOT && LA25_2<=MULTI_LINE_COMMENT)) && (synpred10())) {
+                    alt25=2;
+                }
+                else if ( (LA25_2==RIGHT_PAREN) && (synpred10())) {
+                    alt25=2;
+                }
+            }
+            switch (alt25) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:200:6: ( LEFT_SQUARE )=> square_chunk
+                    {
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain1146);
+                    square_chunk69=square_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk69.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:202:6: ( LEFT_PAREN )=> paren_chunk
+                    {
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain1168);
+                    paren_chunk70=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk70.getTree());
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:204:4: ( expression_chain )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+
+            if ( (LA26_0==DOT) ) {
+                alt26=1;
+            }
+            switch (alt26) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:204:4: expression_chain
+                    {
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain1179);
+                    expression_chain71=expression_chain();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain71.getTree());
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: square_chunk, ID, expression_chain, paren_chunk
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 205:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:205:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_EXPRESSION_CHAIN, startToken), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                // /Users/porcelli/Desktop/testes/NewDRL.g:205:45: ( square_chunk )?
+                if ( stream_square_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_square_chunk.next());
+
+                }
+                stream_square_chunk.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:205:59: ( paren_chunk )?
+                if ( stream_paren_chunk.hasNext() ) {
+                    adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                }
+                stream_paren_chunk.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:205:72: ( expression_chain )?
+                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/Desktop/testes/NewDRL.g:208:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    public final lhs_pattern_return lhs_pattern() throws RecognitionException {
+        lhs_pattern_return retval = new lhs_pattern_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        fact_binding_return fact_binding72 = null;
+
+        fact_return fact73 = null;
+
+
+        RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
+        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:209:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            int alt27=2;
+            int LA27_0 = input.LA(1);
+
+            if ( (LA27_0==ID) ) {
+                int LA27_1 = input.LA(2);
+
+                if ( (LA27_1==COLON) ) {
+                    alt27=1;
+                }
+                else if ( (LA27_1==LEFT_PAREN||LA27_1==DOT||LA27_1==LEFT_SQUARE) ) {
+                    alt27=2;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("208:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 27, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("208:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 27, 0, input);
+
+                throw nvae;
+            }
+            switch (alt27) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:209:4: fact_binding
+                    {
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern1212);
+                    fact_binding72=fact_binding();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding72.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();
+                    // 209:17: -> ^( VT_PATTERN fact_binding )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:209: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/Desktop/testes/NewDRL.g:210:4: fact
+                    {
+                    pushFollow(FOLLOW_fact_in_lhs_pattern1225);
+                    fact73=fact();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact.add(fact73.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();
+                    // 210:9: -> ^( VT_PATTERN fact )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:210: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/Desktop/testes/NewDRL.g:213:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ) ;
+    public final fact_binding_return fact_binding() throws RecognitionException {
+        fact_binding_return retval = new fact_binding_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN76=null;
+        Token RIGHT_PAREN78=null;
+        label_return label74 = null;
+
+        fact_return fact75 = null;
+
+        fact_binding_expression_return fact_binding_expression77 = null;
+
+
+        Object LEFT_PAREN76_tree=null;
+        Object RIGHT_PAREN78_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
+        RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
+        RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:214:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:214:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            {
+            pushFollow(FOLLOW_label_in_fact_binding1245);
+            label74=label();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_label.add(label74.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:215:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==ID) ) {
+                alt28=1;
+            }
+            else if ( (LA28_0==LEFT_PAREN) ) {
+                alt28=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("215:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 28, 0, input);
+
+                throw nvae;
+            }
+            switch (alt28) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:215:5: fact
+                    {
+                    pushFollow(FOLLOW_fact_in_fact_binding1251);
+                    fact75=fact();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact.add(fact75.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:216:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    {
+                    LEFT_PAREN76=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding1258); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN76);
+
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding1260);
+                    fact_binding_expression77=fact_binding_expression();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression77.getTree());
+                    RIGHT_PAREN78=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding1262); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN78);
+
+
+                    }
+                    break;
+
+            }
+
+
+            // AST REWRITE
+            // elements: fact, fact_binding_expression, 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();
+            // 218:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:218:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_BINDING, "VT_FACT_BINDING"), root_1);
+
+                adaptor.addChild(root_1, stream_label.next());
+                // /Users/porcelli/Desktop/testes/NewDRL.g:218:30: ( fact )?
+                if ( stream_fact.hasNext() ) {
+                    adaptor.addChild(root_1, stream_fact.next());
+
+                }
+                stream_fact.reset();
+                // /Users/porcelli/Desktop/testes/NewDRL.g:218:36: ( fact_binding_expression )?
+                if ( stream_fact_binding_expression.hasNext() ) {
+                    adaptor.addChild(root_1, stream_fact_binding_expression.next());
+
+                }
+                stream_fact_binding_expression.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/Desktop/testes/NewDRL.g:221:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
+    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 fact79 = null;
+
+        fact_return fact80 = 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/Desktop/testes/NewDRL.g:224:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:224:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:224:5: ( fact -> fact )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:224:6: fact
+            {
+            pushFollow(FOLLOW_fact_in_fact_binding_expression1298);
+            fact79=fact();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_fact.add(fact79.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();
+            // 224:11: -> fact
+            {
+                adaptor.addChild(root_0, stream_fact.next());
+
+            }
+
+            }
+
+            }
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:224:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            loop30:
+            do {
+                int alt30=2;
+                int LA30_0 = input.LA(1);
+
+                if ( (LA30_0==ID) && ((validateIdentifierKey("or")))) {
+                    alt30=1;
+                }
+                else if ( (LA30_0==DOUBLE_PIPE) ) {
+                    alt30=1;
+                }
+
+
+                switch (alt30) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:224:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    {
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:224:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    int alt29=2;
+            	    int LA29_0 = input.LA(1);
+
+            	    if ( (LA29_0==ID) && ((validateIdentifierKey("or")))) {
+            	        alt29=1;
+            	    }
+            	    else if ( (LA29_0==DOUBLE_PIPE) ) {
+            	        alt29=2;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        NoViableAltException nvae =
+            	            new NoViableAltException("224:22: (value= or_key | pipe= DOUBLE_PIPE )", 29, 0, input);
+
+            	        throw nvae;
+            	    }
+            	    switch (alt29) {
+            	        case 1 :
+            	            // /Users/porcelli/Desktop/testes/NewDRL.g:224:23: value= or_key
+            	            {
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression1310);
+            	            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/Desktop/testes/NewDRL.g:224:62: pipe= DOUBLE_PIPE
+            	            {
+            	            pipe=(Token)input.LT(1);
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression1316); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
+
+            	            if ( backtracking==0 ) {
+            	              orToken = pipe;
+            	            }
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression1321);
+            	    fact80=fact();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_fact.add(fact80.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();
+            	    // 225:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    {
+            	        // /Users/porcelli/Desktop/testes/NewDRL.g:225:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        {
+            	        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 loop30;
+                }
+            } 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/Desktop/testes/NewDRL.g:228:1: fact : qualified_id LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT qualified_id ( constraints )? ) ;
+    public final fact_return fact() throws RecognitionException {
+        fact_return retval = new fact_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN82=null;
+        Token RIGHT_PAREN84=null;
+        qualified_id_return qualified_id81 = null;
+
+        constraints_return constraints83 = null;
+
+
+        Object LEFT_PAREN82_tree=null;
+        Object RIGHT_PAREN84_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
+        RewriteRuleSubtreeStream stream_qualified_id=new RewriteRuleSubtreeStream(adaptor,"rule qualified_id");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:229:2: ( qualified_id LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT qualified_id ( constraints )? ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:229:4: qualified_id LEFT_PAREN ( constraints )? RIGHT_PAREN
+            {
+            pushFollow(FOLLOW_qualified_id_in_fact1350);
+            qualified_id81=qualified_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_qualified_id.add(qualified_id81.getTree());
+            LEFT_PAREN82=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact1352); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN82);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:229:28: ( constraints )?
+            int alt31=2;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==LEFT_PAREN||LA31_0==ID) ) {
+                alt31=1;
+            }
+            switch (alt31) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:229:28: constraints
+                    {
+                    pushFollow(FOLLOW_constraints_in_fact1354);
+                    constraints83=constraints();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_constraints.add(constraints83.getTree());
+
+                    }
+                    break;
+
+            }
+
+            RIGHT_PAREN84=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact1357); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN84);
+
+
+            // AST REWRITE
+            // elements: constraints, qualified_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();
+            // 230:2: -> ^( VT_FACT qualified_id ( constraints )? )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:230:5: ^( VT_FACT qualified_id ( constraints )? )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT, "VT_FACT"), root_1);
+
+                adaptor.addChild(root_1, stream_qualified_id.next());
+                // /Users/porcelli/Desktop/testes/NewDRL.g:230:28: ( constraints )?
+                if ( stream_constraints.hasNext() ) {
+                    adaptor.addChild(root_1, stream_constraints.next());
+
+                }
+                stream_constraints.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
+
+    public static class constraints_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start constraints
+    // /Users/porcelli/Desktop/testes/NewDRL.g:233:1: constraints : constraint ( COMMA constraint )* ;
+    public final constraints_return constraints() throws RecognitionException {
+        constraints_return retval = new constraints_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token COMMA86=null;
+        constraint_return constraint85 = null;
+
+        constraint_return constraint87 = null;
+
+
+        Object COMMA86_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:234:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:234:4: constraint ( COMMA constraint )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_constraint_in_constraints1380);
+            constraint85=constraint();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint85.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:234:15: ( COMMA constraint )*
+            loop32:
+            do {
+                int alt32=2;
+                int LA32_0 = input.LA(1);
+
+                if ( (LA32_0==COMMA) ) {
+                    alt32=1;
+                }
+
+
+                switch (alt32) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:234:17: COMMA constraint
+            	    {
+            	    COMMA86=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints1384); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints1387);
+            	    constraint87=constraint();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint87.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop32;
+                }
+            } 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/Desktop/testes/NewDRL.g:237:1: constraint : or_constr ;
+    public final constraint_return constraint() throws RecognitionException {
+        constraint_return retval = new constraint_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        or_constr_return or_constr88 = null;
+
+
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:238:2: ( or_constr )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:238:4: or_constr
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_or_constr_in_constraint1401);
+            or_constr88=or_constr();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr88.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/Desktop/testes/NewDRL.g:241:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    public final or_constr_return or_constr() throws RecognitionException {
+        or_constr_return retval = new or_constr_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token DOUBLE_PIPE90=null;
+        and_constr_return and_constr89 = null;
+
+        and_constr_return and_constr91 = null;
+
+
+        Object DOUBLE_PIPE90_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:242:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:242:4: and_constr ( DOUBLE_PIPE and_constr )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_and_constr_in_or_constr1412);
+            and_constr89=and_constr();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr89.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:242:15: ( DOUBLE_PIPE and_constr )*
+            loop33:
+            do {
+                int alt33=2;
+                int LA33_0 = input.LA(1);
+
+                if ( (LA33_0==DOUBLE_PIPE) ) {
+                    alt33=1;
+                }
+
+
+                switch (alt33) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:242:17: DOUBLE_PIPE and_constr
+            	    {
+            	    DOUBLE_PIPE90=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr1416); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_PIPE90_tree = (Object)adaptor.create(DOUBLE_PIPE90);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE90_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_and_constr_in_or_constr1419);
+            	    and_constr91=and_constr();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr91.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop33;
+                }
+            } 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/Desktop/testes/NewDRL.g:245:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    public final and_constr_return and_constr() throws RecognitionException {
+        and_constr_return retval = new and_constr_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token DOUBLE_AMPER93=null;
+        unary_constr_return unary_constr92 = null;
+
+        unary_constr_return unary_constr94 = null;
+
+
+        Object DOUBLE_AMPER93_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:246:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:246:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_unary_constr_in_and_constr1434);
+            unary_constr92=unary_constr();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr92.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:246:17: ( DOUBLE_AMPER unary_constr )*
+            loop34:
+            do {
+                int alt34=2;
+                int LA34_0 = input.LA(1);
+
+                if ( (LA34_0==DOUBLE_AMPER) ) {
+                    alt34=1;
+                }
+
+
+                switch (alt34) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:246:19: DOUBLE_AMPER unary_constr
+            	    {
+            	    DOUBLE_AMPER93=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr1438); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_AMPER93_tree = (Object)adaptor.create(DOUBLE_AMPER93);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER93_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr1441);
+            	    unary_constr94=unary_constr();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr94.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop34;
+                }
+            } 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/Desktop/testes/NewDRL.g:249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );
+    public final unary_constr_return unary_constr() throws RecognitionException {
+        unary_constr_return retval = new unary_constr_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN98=null;
+        Token RIGHT_PAREN100=null;
+        eval_key_return eval_key95 = null;
+
+        paren_chunk_return paren_chunk96 = null;
+
+        field_constraint_return field_constraint97 = null;
+
+        or_constr_return or_constr99 = null;
+
+
+        Object LEFT_PAREN98_tree=null;
+        Object RIGHT_PAREN100_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_or_constr=new RewriteRuleSubtreeStream(adaptor,"rule or_constr");
+        RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:251:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr )
+            int alt35=3;
+            int LA35_0 = input.LA(1);
+
+            if ( (LA35_0==ID) ) {
+                int LA35_1 = input.LA(2);
+
+                if ( ((LA35_1>=ID && LA35_1<=DOT)||(LA35_1>=COLON && LA35_1<=NOT_EQUAL)||LA35_1==LEFT_SQUARE) ) {
+                    alt35=2;
+                }
+                else if ( (LA35_1==LEFT_PAREN) ) {
+                    int LA35_13 = input.LA(3);
+
+                    if ( ((validateIdentifierKey("eval"))) ) {
+                        alt35=1;
+                    }
+                    else if ( (true) ) {
+                        alt35=2;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 35, 13, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 35, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else if ( (LA35_0==LEFT_PAREN) ) {
+                alt35=3;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("249:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr );", 35, 0, input);
+
+                throw nvae;
+            }
+            switch (alt35) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:251:4: eval_key paren_chunk
+                    {
+                    pushFollow(FOLLOW_eval_key_in_unary_constr1462);
+                    eval_key95=eval_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_eval_key.add(eval_key95.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr1464);
+                    paren_chunk96=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk96.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();
+                    // 251:25: -> ^( eval_key paren_chunk )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:251: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/Desktop/testes/NewDRL.g:252:4: field_constraint
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr1477);
+                    field_constraint97=field_constraint();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint97.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:253:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    {
+                    LEFT_PAREN98=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr1482); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN98);
+
+                    pushFollow(FOLLOW_or_constr_in_unary_constr1484);
+                    or_constr99=or_constr();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_constr.add(or_constr99.getTree());
+                    RIGHT_PAREN100=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr1486); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN100);
+
+
+                    // AST REWRITE
+                    // elements: or_constr
+                    // 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();
+                    // 253:37: -> or_constr
+                    {
+                        adaptor.addChild(root_0, stream_or_constr.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/Desktop/testes/NewDRL.g:257:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
+    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 label101 = null;
+
+        accessor_path_return accessor_path102 = null;
+
+        or_restr_connective_return or_restr_connective103 = null;
+
+        paren_chunk_return paren_chunk104 = null;
+
+        accessor_path_return accessor_path105 = null;
+
+        or_restr_connective_return or_restr_connective106 = 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/Desktop/testes/NewDRL.g:260:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
+            int alt37=2;
+            int LA37_0 = input.LA(1);
+
+            if ( (LA37_0==ID) ) {
+                int LA37_1 = input.LA(2);
+
+                if ( (LA37_1==COLON) ) {
+                    alt37=1;
+                }
+                else if ( (LA37_1==LEFT_PAREN||(LA37_1>=ID && LA37_1<=DOT)||(LA37_1>=EQUAL && LA37_1<=NOT_EQUAL)||LA37_1==LEFT_SQUARE) ) {
+                    alt37=2;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("257:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 37, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("257:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) ) -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 37, 0, input);
+
+                throw nvae;
+            }
+            switch (alt37) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:260:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    {
+                    pushFollow(FOLLOW_label_in_field_constraint1505);
+                    label101=label();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_label.add(label101.getTree());
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint1507);
+                    accessor_path102=accessor_path();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path102.getTree());
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:260:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    int alt36=3;
+                    int LA36_0 = input.LA(1);
+
+                    if ( (LA36_0==LEFT_PAREN||LA36_0==ID||(LA36_0>=EQUAL && LA36_0<=NOT_EQUAL)) ) {
+                        alt36=1;
+                    }
+                    else if ( (LA36_0==ARROW) ) {
+                        alt36=2;
+                    }
+                    switch (alt36) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:260:27: or_restr_connective
+                            {
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint1511);
+                            or_restr_connective103=or_restr_connective();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective103.getTree());
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:260:49: arw= ARROW paren_chunk
+                            {
+                            arw=(Token)input.LT(1);
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint1517); if (failed) return retval;
+                            if ( backtracking==0 ) stream_ARROW.add(arw);
+
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint1519);
+                            paren_chunk104=paren_chunk();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk104.getTree());
+                            if ( backtracking==0 ) {
+                              isArrow = true;
+                            }
+
+                            }
+                            break;
+
+                    }
+
+
+                    // AST REWRITE
+                    // elements: or_restr_connective, label, paren_chunk, label, accessor_path, 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();
+                    // 261:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) )
+                    if (isArrow) {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:261:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? ) )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
+
+                        adaptor.addChild(root_1, stream_label.next());
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:261:39: ^( VT_FIELD accessor_path ( ^( VK_EVAL[$arw] paren_chunk ) )? )
+                        {
+                        Object root_2 = (Object)adaptor.nil();
+                        root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
+
+                        adaptor.addChild(root_2, stream_accessor_path.next());
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:261:64: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        if ( stream_paren_chunk.hasNext() ) {
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:261:64: ^( VK_EVAL[$arw] paren_chunk )
+                            {
+                            Object root_3 = (Object)adaptor.nil();
+                            root_3 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_3);
+
+                            adaptor.addChild(root_3, stream_paren_chunk.next());
+
+                            adaptor.addChild(root_2, root_3);
+                            }
+
+                        }
+                        stream_paren_chunk.reset();
+
+                        adaptor.addChild(root_1, root_2);
+                        }
+
+                        adaptor.addChild(root_0, root_1);
+                        }
+
+                    }
+                    else // 262:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:262:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        {
+                        Object root_1 = (Object)adaptor.nil();
+                        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
+
+                        adaptor.addChild(root_1, stream_label.next());
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:262:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        {
+                        Object root_2 = (Object)adaptor.nil();
+                        root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
+
+                        adaptor.addChild(root_2, stream_accessor_path.next());
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:262:53: ( or_restr_connective )?
+                        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/Desktop/testes/NewDRL.g:263:4: accessor_path or_restr_connective
+                    {
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint1573);
+                    accessor_path105=accessor_path();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path105.getTree());
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint1575);
+                    or_restr_connective106=or_restr_connective();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective106.getTree());
+
+                    // AST REWRITE
+                    // elements: accessor_path, 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();
+                    // 264:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    {
+                        // /Users/porcelli/Desktop/testes/NewDRL.g:264: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/Desktop/testes/NewDRL.g:267: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 COLON107=null;
+
+        Object value_tree=null;
+        Object COLON107_tree=null;
+        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:267:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:267:9: value= ID COLON
+            {
+            value=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_label1599); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(value);
+
+            COLON107=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_label1601); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON107);
+
+
+            // 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();
+            // 267: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/Desktop/testes/NewDRL.g:270:1: or_restr_connective : and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* ;
+    public final or_restr_connective_return or_restr_connective() throws RecognitionException {
+        or_restr_connective_return retval = new or_restr_connective_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token DOUBLE_PIPE109=null;
+        and_restr_connective_return and_restr_connective108 = null;
+
+        and_restr_connective_return and_restr_connective110 = null;
+
+
+        Object DOUBLE_PIPE109_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:271:2: ( and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:271:4: and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective1617);
+            and_restr_connective108=and_restr_connective();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective108.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:271:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            loop38:
+            do {
+                int alt38=2;
+                alt38 = dfa38.predict(input);
+                switch (alt38) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:271:53: DOUBLE_PIPE and_restr_connective
+            	    {
+            	    DOUBLE_PIPE109=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective1629); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_PIPE109_tree = (Object)adaptor.create(DOUBLE_PIPE109);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE109_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective1632);
+            	    and_restr_connective110=and_restr_connective();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective110.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop38;
+                }
+            } 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/Desktop/testes/NewDRL.g:274:1: and_restr_connective : constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* ;
+    public final and_restr_connective_return and_restr_connective() throws RecognitionException {
+        and_restr_connective_return retval = new and_restr_connective_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token DOUBLE_AMPER112=null;
+        constraint_expression_return constraint_expression111 = null;
+
+        constraint_expression_return constraint_expression113 = null;
+
+
+        Object DOUBLE_AMPER112_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:275:2: ( constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:275:4: constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective1647);
+            constraint_expression111=constraint_expression();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression111.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:275:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            loop39:
+            do {
+                int alt39=2;
+                alt39 = dfa39.predict(input);
+                switch (alt39) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:275:54: DOUBLE_AMPER constraint_expression
+            	    {
+            	    DOUBLE_AMPER112=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective1659); if (failed) return retval;
+            	    if ( backtracking==0 ) {
+            	    DOUBLE_AMPER112_tree = (Object)adaptor.create(DOUBLE_AMPER112);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER112_tree, root_0);
+            	    }
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective1662);
+            	    constraint_expression113=constraint_expression();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression113.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop39;
+                }
+            } 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/Desktop/testes/NewDRL.g:278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );
+    public final constraint_expression_return constraint_expression() throws RecognitionException {
+        constraint_expression_return retval = new constraint_expression_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN116=null;
+        Token RIGHT_PAREN118=null;
+        compound_operator_return compound_operator114 = null;
+
+        simple_operator_return simple_operator115 = null;
+
+        or_restr_connective_return or_restr_connective117 = null;
+
+
+        Object LEFT_PAREN116_tree=null;
+        Object RIGHT_PAREN118_tree=null;
+        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
+        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_or_restr_connective=new RewriteRuleSubtreeStream(adaptor,"rule or_restr_connective");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:281:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective )
+            int alt40=3;
+            switch ( input.LA(1) ) {
+            case ID:
+                {
+                switch ( input.LA(2) ) {
+                case ID:
+                    {
+                    int LA40_9 = input.LA(3);
+
+                    if ( (LA40_9==LEFT_SQUARE) ) {
+                        alt40=2;
+                    }
+                    else if ( (LA40_9==ID||(LA40_9>=STRING && LA40_9<=NULL)) && ((validateIdentifierKey("not")))) {
+                        alt40=2;
+                    }
+                    else if ( (LA40_9==LEFT_PAREN) && ((validateIdentifierKey("not")))) {
+                        int LA40_16 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("not"))) ) {
+                            alt40=1;
+                        }
+                        else if ( ((validateIdentifierKey("not"))) ) {
+                            alt40=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 16, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else if ( (LA40_9==EOF||(LA40_9>=RIGHT_PAREN && LA40_9<=DOUBLE_AMPER)||LA40_9==COMMA||LA40_9==DOT) ) {
+                        alt40=2;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 9, input);
+
+                        throw nvae;
+                    }
+                    }
+                    break;
+                case STRING:
+                case INT:
+                case FLOAT:
+                case BOOL:
+                case NULL:
+                case LEFT_SQUARE:
+                    {
+                    alt40=2;
+                    }
+                    break;
+                case LEFT_PAREN:
+                    {
+                    switch ( input.LA(3) ) {
+                    case ID:
+                        {
+                        int LA40_23 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt40=1;
+                        }
+                        else if ( (true) ) {
+                            alt40=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 23, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case LEFT_PAREN:
+                        {
+                        int LA40_24 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt40=1;
+                        }
+                        else if ( (true) ) {
+                            alt40=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 24, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    case VT_FACT:
+                    case VT_CONSTRAINTS:
+                    case VT_QUALIFIED_ID:
+                    case VT_LABEL:
+                    case VT_NAME:
+                    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 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 RIGHT_PAREN:
+                    case DOUBLE_PIPE:
+                    case DOUBLE_AMPER:
+                    case SEMICOLON:
+                    case COMMA:
+                    case DOT:
+                    case ARROW:
+                    case COLON:
+                    case EQUAL:
+                    case GREATER:
+                    case GREATER_EQUAL:
+                    case LESS:
+                    case LESS_EQUAL:
+                    case NOT_EQUAL:
+                    case LEFT_SQUARE:
+                    case RIGHT_SQUARE:
+                    case LEFT_CURLY:
+                    case RIGHT_CURLY:
+                    case MISC:
+                    case EOL:
+                    case WS:
+                    case EscapeSequence:
+                    case HexDigit:
+                    case UnicodeEscape:
+                    case OctalEscape:
+                    case TILDE:
+                    case SH_STYLE_SINGLE_LINE_COMMENT:
+                    case C_STYLE_SINGLE_LINE_COMMENT:
+                    case MULTI_LINE_COMMENT:
+                        {
+                        alt40=2;
+                        }
+                        break;
+                    case STRING:
+                    case INT:
+                    case FLOAT:
+                    case BOOL:
+                    case NULL:
+                        {
+                        int LA40_26 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt40=1;
+                        }
+                        else if ( (true) ) {
+                            alt40=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 26, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 11, input);
+
+                        throw nvae;
+                    }
+
+                    }
+                    break;
+                default:
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 1, input);
+
+                    throw nvae;
+                }
+
+                }
+                break;
+            case EQUAL:
+            case GREATER:
+            case GREATER_EQUAL:
+            case LESS:
+            case LESS_EQUAL:
+            case NOT_EQUAL:
+                {
+                alt40=2;
+                }
+                break;
+            case LEFT_PAREN:
+                {
+                alt40=3;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("278:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective );", 40, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt40) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:281:5: compound_operator
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression1684);
+                    compound_operator114=compound_operator();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator114.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:282:4: simple_operator
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression1689);
+                    simple_operator115=simple_operator();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator115.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:283:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    {
+                    LEFT_PAREN116=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression1694); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN116);
+
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression1696);
+                    or_restr_connective117=or_restr_connective();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective117.getTree());
+                    RIGHT_PAREN118=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression1698); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN118);
+
+
+                    // AST REWRITE
+                    // elements: 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();
+                    // 283:47: -> or_restr_connective
+                    {
+                        adaptor.addChild(root_0, stream_or_restr_connective.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/Desktop/testes/NewDRL.g:286:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value ;
+    public final simple_operator_return simple_operator() throws RecognitionException {
+        simple_operator_return retval = new simple_operator_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token EQUAL119=null;
+        Token GREATER120=null;
+        Token GREATER_EQUAL121=null;
+        Token LESS122=null;
+        Token LESS_EQUAL123=null;
+        Token NOT_EQUAL124=null;
+        Token ID130=null;
+        Token ID137=null;
+        not_key_return not_key125 = null;
+
+        contains_key_return contains_key126 = null;
+
+        soundslike_key_return soundslike_key127 = null;
+
+        matches_key_return matches_key128 = null;
+
+        memberof_key_return memberof_key129 = null;
+
+        square_chunk_return square_chunk131 = null;
+
+        contains_key_return contains_key132 = null;
+
+        excludes_key_return excludes_key133 = null;
+
+        matches_key_return matches_key134 = null;
+
+        soundslike_key_return soundslike_key135 = null;
+
+        memberof_key_return memberof_key136 = null;
+
+        square_chunk_return square_chunk138 = null;
+
+        expression_value_return expression_value139 = null;
+
+
+        Object EQUAL119_tree=null;
+        Object GREATER120_tree=null;
+        Object GREATER_EQUAL121_tree=null;
+        Object LESS122_tree=null;
+        Object LESS_EQUAL123_tree=null;
+        Object NOT_EQUAL124_tree=null;
+        Object ID130_tree=null;
+        Object ID137_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:287:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )
+            int alt44=13;
+            switch ( input.LA(1) ) {
+            case EQUAL:
+                {
+                alt44=1;
+                }
+                break;
+            case GREATER:
+                {
+                alt44=2;
+                }
+                break;
+            case GREATER_EQUAL:
+                {
+                alt44=3;
+                }
+                break;
+            case LESS:
+                {
+                alt44=4;
+                }
+                break;
+            case LESS_EQUAL:
+                {
+                alt44=5;
+                }
+                break;
+            case NOT_EQUAL:
+                {
+                alt44=6;
+                }
+                break;
+            case ID:
+                {
+                int LA44_7 = input.LA(2);
+
+                if ( (LA44_7==ID) && ((validateIdentifierKey("not")))) {
+                    alt44=7;
+                }
+                else if ( ((validateIdentifierKey("contains"))) ) {
+                    alt44=8;
+                }
+                else if ( ((validateIdentifierKey("excludes"))) ) {
+                    alt44=9;
+                }
+                else if ( ((validateIdentifierKey("matches"))) ) {
+                    alt44=10;
+                }
+                else if ( ((validateIdentifierKey("soundslike"))) ) {
+                    alt44=11;
+                }
+                else if ( ((validateIdentifierKey("memberof"))) ) {
+                    alt44=12;
+                }
+                else if ( (true) ) {
+                    alt44=13;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 44, 7, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("287:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 44, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt44) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:287:5: EQUAL
+                    {
+                    EQUAL119=(Token)input.LT(1);
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator1714); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    EQUAL119_tree = (Object)adaptor.create(EQUAL119);
+                    root_0 = (Object)adaptor.becomeRoot(EQUAL119_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:288:4: GREATER
+                    {
+                    GREATER120=(Token)input.LT(1);
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator1720); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    GREATER120_tree = (Object)adaptor.create(GREATER120);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER120_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:289:4: GREATER_EQUAL
+                    {
+                    GREATER_EQUAL121=(Token)input.LT(1);
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator1726); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    GREATER_EQUAL121_tree = (Object)adaptor.create(GREATER_EQUAL121);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL121_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:290:4: LESS
+                    {
+                    LESS122=(Token)input.LT(1);
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator1732); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    LESS122_tree = (Object)adaptor.create(LESS122);
+                    root_0 = (Object)adaptor.becomeRoot(LESS122_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:291:4: LESS_EQUAL
+                    {
+                    LESS_EQUAL123=(Token)input.LT(1);
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator1738); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    LESS_EQUAL123_tree = (Object)adaptor.create(LESS_EQUAL123);
+                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL123_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:292:4: NOT_EQUAL
+                    {
+                    NOT_EQUAL124=(Token)input.LT(1);
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator1744); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    NOT_EQUAL124_tree = (Object)adaptor.create(NOT_EQUAL124);
+                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL124_tree, root_0);
+                    }
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:293:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    {
+                    pushFollow(FOLLOW_not_key_in_simple_operator1750);
+                    not_key125=not_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key125.getTree());
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:293:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    int alt42=5;
+                    int LA42_0 = input.LA(1);
+
+                    if ( (LA42_0==ID) ) {
+                        int LA42_1 = input.LA(2);
+
+                        if ( ((validateIdentifierKey("contains"))) ) {
+                            alt42=1;
+                        }
+                        else if ( ((validateIdentifierKey("soundslike"))) ) {
+                            alt42=2;
+                        }
+                        else if ( ((validateIdentifierKey("matches"))) ) {
+                            alt42=3;
+                        }
+                        else if ( ((validateIdentifierKey("memberof"))) ) {
+                            alt42=4;
+                        }
+                        else if ( (true) ) {
+                            alt42=5;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("293:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 42, 1, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("293:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 42, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt42) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:13: contains_key
+                            {
+                            pushFollow(FOLLOW_contains_key_in_simple_operator1753);
+                            contains_key126=contains_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key126.getTree(), root_0);
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:27: soundslike_key
+                            {
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator1756);
+                            soundslike_key127=soundslike_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key127.getTree(), root_0);
+
+                            }
+                            break;
+                        case 3 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:43: matches_key
+                            {
+                            pushFollow(FOLLOW_matches_key_in_simple_operator1759);
+                            matches_key128=matches_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key128.getTree(), root_0);
+
+                            }
+                            break;
+                        case 4 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:56: memberof_key
+                            {
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator1762);
+                            memberof_key129=memberof_key();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key129.getTree(), root_0);
+
+                            }
+                            break;
+                        case 5 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:70: ID ( square_chunk )?
+                            {
+                            ID130=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator1765); if (failed) return retval;
+                            if ( backtracking==0 ) {
+                            ID130_tree = (Object)adaptor.create(ID130);
+                            root_0 = (Object)adaptor.becomeRoot(ID130_tree, root_0);
+                            }
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:293:74: ( square_chunk )?
+                            int alt41=2;
+                            int LA41_0 = input.LA(1);
+
+                            if ( (LA41_0==LEFT_SQUARE) ) {
+                                alt41=1;
+                            }
+                            switch (alt41) {
+                                case 1 :
+                                    // /Users/porcelli/Desktop/testes/NewDRL.g:293:74: square_chunk
+                                    {
+                                    pushFollow(FOLLOW_square_chunk_in_simple_operator1768);
+                                    square_chunk131=square_chunk();
+                                    _fsp--;
+                                    if (failed) return retval;
+                                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk131.getTree());
+
+                                    }
+                                    break;
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:294:10: contains_key
+                    {
+                    pushFollow(FOLLOW_contains_key_in_simple_operator1781);
+                    contains_key132=contains_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key132.getTree(), root_0);
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:295:4: excludes_key
+                    {
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator1787);
+                    excludes_key133=excludes_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key133.getTree(), root_0);
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:296:4: matches_key
+                    {
+                    pushFollow(FOLLOW_matches_key_in_simple_operator1793);
+                    matches_key134=matches_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key134.getTree(), root_0);
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:297:4: soundslike_key
+                    {
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator1799);
+                    soundslike_key135=soundslike_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key135.getTree(), root_0);
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:298:4: memberof_key
+                    {
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator1805);
+                    memberof_key136=memberof_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key136.getTree(), root_0);
+
+                    }
+                    break;
+                case 13 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:299:4: ID ( square_chunk )?
+                    {
+                    ID137=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator1811); if (failed) return retval;
+                    if ( backtracking==0 ) {
+                    ID137_tree = (Object)adaptor.create(ID137);
+                    root_0 = (Object)adaptor.becomeRoot(ID137_tree, root_0);
+                    }
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:299:8: ( square_chunk )?
+                    int alt43=2;
+                    int LA43_0 = input.LA(1);
+
+                    if ( (LA43_0==LEFT_SQUARE) ) {
+                        alt43=1;
+                    }
+                    switch (alt43) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/NewDRL.g:299:8: square_chunk
+                            {
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator1814);
+                            square_chunk138=square_chunk();
+                            _fsp--;
+                            if (failed) return retval;
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk138.getTree());
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_expression_value_in_simple_operator1819);
+            expression_value139=expression_value();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value139.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/Desktop/testes/NewDRL.g:304:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    public final compound_operator_return compound_operator() throws RecognitionException {
+        compound_operator_return retval = new compound_operator_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_PAREN143=null;
+        Token COMMA145=null;
+        Token RIGHT_PAREN147=null;
+        in_key_return in_key140 = null;
+
+        not_key_return not_key141 = null;
+
+        in_key_return in_key142 = null;
+
+        expression_value_return expression_value144 = null;
+
+        expression_value_return expression_value146 = null;
+
+
+        Object LEFT_PAREN143_tree=null;
+        Object COMMA145_tree=null;
+        Object RIGHT_PAREN147_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:305:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:305:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            {
+            root_0 = (Object)adaptor.nil();
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:305:4: ( in_key | not_key in_key )
+            int alt45=2;
+            int LA45_0 = input.LA(1);
+
+            if ( (LA45_0==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("in"))))) {
+                int LA45_1 = input.LA(2);
+
+                if ( (LA45_1==ID) && ((validateIdentifierKey("not")))) {
+                    alt45=2;
+                }
+                else if ( (LA45_1==LEFT_PAREN) && ((validateIdentifierKey("in")))) {
+                    alt45=1;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("305:4: ( in_key | not_key in_key )", 45, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("305:4: ( in_key | not_key in_key )", 45, 0, input);
+
+                throw nvae;
+            }
+            switch (alt45) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:305:6: in_key
+                    {
+                    pushFollow(FOLLOW_in_key_in_compound_operator1834);
+                    in_key140=in_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key140.getTree(), root_0);
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:305:16: not_key in_key
+                    {
+                    pushFollow(FOLLOW_not_key_in_compound_operator1839);
+                    not_key141=not_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key141.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator1841);
+                    in_key142=in_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key142.getTree(), root_0);
+
+                    }
+                    break;
+
+            }
+
+            LEFT_PAREN143=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator1846); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator1849);
+            expression_value144=expression_value();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value144.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:305:63: ( COMMA expression_value )*
+            loop46:
+            do {
+                int alt46=2;
+                int LA46_0 = input.LA(1);
+
+                if ( (LA46_0==COMMA) ) {
+                    alt46=1;
+                }
+
+
+                switch (alt46) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:305:65: COMMA expression_value
+            	    {
+            	    COMMA145=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator1853); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator1856);
+            	    expression_value146=expression_value();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value146.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop46;
+                }
+            } while (true);
+
+            RIGHT_PAREN147=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator1861); if (failed) return retval;
+
+            }
+
+            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/Desktop/testes/NewDRL.g:308:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    public final expression_value_return expression_value() throws RecognitionException {
+        expression_value_return retval = new expression_value_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        accessor_path_return accessor_path148 = null;
+
+        literal_constraint_return literal_constraint149 = null;
+
+        paren_chunk_return paren_chunk150 = null;
+
+
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:309:2: ( accessor_path | literal_constraint | paren_chunk )
+            int alt47=3;
+            switch ( input.LA(1) ) {
+            case ID:
+                {
+                alt47=1;
+                }
+                break;
+            case STRING:
+            case INT:
+            case FLOAT:
+            case BOOL:
+            case NULL:
+                {
+                alt47=2;
+                }
+                break;
+            case LEFT_PAREN:
+                {
+                alt47=3;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("308:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 47, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt47) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:309:4: accessor_path
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_accessor_path_in_expression_value1873);
+                    accessor_path148=accessor_path();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path148.getTree());
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:310:4: literal_constraint
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value1878);
+                    literal_constraint149=literal_constraint();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint149.getTree());
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:311:4: paren_chunk
+                    {
+                    root_0 = (Object)adaptor.nil();
+
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value1884);
+                    paren_chunk150=paren_chunk();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk150.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/Desktop/testes/NewDRL.g:314:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    public final literal_constraint_return literal_constraint() throws RecognitionException {
+        literal_constraint_return retval = new literal_constraint_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token set151=null;
+
+        Object set151_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:315:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:
+            {
+            root_0 = (Object)adaptor.nil();
+
+            set151=(Token)input.LT(1);
+            if ( (input.LA(1)>=STRING && input.LA(1)<=NULL) ) {
+                input.consume();
+                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set151));
+                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 qualified_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start qualified_id
+    // /Users/porcelli/Desktop/testes/NewDRL.g:322:1: qualified_id : ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )* -> ^( VT_QUALIFIED_ID ( ID )+ ) ;
+    public final qualified_id_return qualified_id() throws RecognitionException {
+        qualified_id_return retval = new qualified_id_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID152=null;
+        Token DOT153=null;
+        Token ID154=null;
+        Token LEFT_SQUARE155=null;
+        Token RIGHT_SQUARE156=null;
+
+        Object ID152_tree=null;
+        Object DOT153_tree=null;
+        Object ID154_tree=null;
+        Object LEFT_SQUARE155_tree=null;
+        Object RIGHT_SQUARE156_tree=null;
+        RewriteRuleTokenStream stream_LEFT_SQUARE=new RewriteRuleTokenStream(adaptor,"token LEFT_SQUARE");
+        RewriteRuleTokenStream stream_RIGHT_SQUARE=new RewriteRuleTokenStream(adaptor,"token RIGHT_SQUARE");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:323:2: ( ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )* -> ^( VT_QUALIFIED_ID ( ID )+ ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:323:4: ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )*
+            {
+            ID152=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_qualified_id1926); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID152);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:323:7: ( DOT ID )*
+            loop48:
+            do {
+                int alt48=2;
+                int LA48_0 = input.LA(1);
+
+                if ( (LA48_0==DOT) ) {
+                    alt48=1;
+                }
+
+
+                switch (alt48) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:323:9: DOT ID
+            	    {
+            	    DOT153=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_qualified_id1930); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT153);
+
+            	    ID154=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_qualified_id1932); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID154);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop48;
+                }
+            } while (true);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:323:19: ( LEFT_SQUARE RIGHT_SQUARE )*
+            loop49:
+            do {
+                int alt49=2;
+                int LA49_0 = input.LA(1);
+
+                if ( (LA49_0==LEFT_SQUARE) ) {
+                    alt49=1;
+                }
+
+
+                switch (alt49) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:323:21: LEFT_SQUARE RIGHT_SQUARE
+            	    {
+            	    LEFT_SQUARE155=(Token)input.LT(1);
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_qualified_id1939); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_LEFT_SQUARE.add(LEFT_SQUARE155);
+
+            	    RIGHT_SQUARE156=(Token)input.LT(1);
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_qualified_id1941); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_RIGHT_SQUARE.add(RIGHT_SQUARE156);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop49;
+                }
+            } 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();
+            // 324:2: -> ^( VT_QUALIFIED_ID ( ID )+ )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:324:5: ^( VT_QUALIFIED_ID ( ID )+ )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_QUALIFIED_ID, "VT_QUALIFIED_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 qualified_id
+
+    public static class accessor_path_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start accessor_path
+    // /Users/porcelli/Desktop/testes/NewDRL.g:327:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    public final accessor_path_return accessor_path() throws RecognitionException {
+        accessor_path_return retval = new accessor_path_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token DOT158=null;
+        accessor_element_return accessor_element157 = null;
+
+        accessor_element_return accessor_element159 = null;
+
+
+        Object DOT158_tree=null;
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+        RewriteRuleSubtreeStream stream_accessor_element=new RewriteRuleSubtreeStream(adaptor,"rule accessor_element");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:328:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:328:4: accessor_element ( DOT accessor_element )*
+            {
+            pushFollow(FOLLOW_accessor_element_in_accessor_path1966);
+            accessor_element157=accessor_element();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element157.getTree());
+            // /Users/porcelli/Desktop/testes/NewDRL.g:328:21: ( DOT accessor_element )*
+            loop50:
+            do {
+                int alt50=2;
+                int LA50_0 = input.LA(1);
+
+                if ( (LA50_0==DOT) ) {
+                    alt50=1;
+                }
+
+
+                switch (alt50) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:328:23: DOT accessor_element
+            	    {
+            	    DOT158=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path1970); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT158);
+
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path1972);
+            	    accessor_element159=accessor_element();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element159.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop50;
+                }
+            } 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();
+            // 329:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:329: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/Desktop/testes/NewDRL.g:332:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    public final accessor_element_return accessor_element() throws RecognitionException {
+        accessor_element_return retval = new accessor_element_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID160=null;
+        square_chunk_return square_chunk161 = null;
+
+
+        Object ID160_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:333:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:333:4: ID ( square_chunk )*
+            {
+            ID160=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element1996); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID160);
+
+            // /Users/porcelli/Desktop/testes/NewDRL.g:333:7: ( square_chunk )*
+            loop51:
+            do {
+                int alt51=2;
+                int LA51_0 = input.LA(1);
+
+                if ( (LA51_0==LEFT_SQUARE) ) {
+                    alt51=1;
+                }
+
+
+                switch (alt51) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:333:7: square_chunk
+            	    {
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element1998);
+            	    square_chunk161=square_chunk();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk161.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop51;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: square_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();
+            // 334:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            {
+                // /Users/porcelli/Desktop/testes/NewDRL.g:334:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_ELEMENT, "VT_ACCESSOR_ELEMENT"), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                // /Users/porcelli/Desktop/testes/NewDRL.g:334:30: ( square_chunk )*
+                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 name_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start name
+    // /Users/porcelli/Desktop/testes/NewDRL.g:337:1: name : (value= ID -> VT_NAME[$value] | value= STRING -> VT_NAME[$value] );
+    public final name_return name() throws RecognitionException {
+        name_return retval = new name_return();
+        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/Desktop/testes/NewDRL.g:338:2: (value= ID -> VT_NAME[$value] | value= STRING -> VT_NAME[$value] )
+            int alt52=2;
+            int LA52_0 = input.LA(1);
+
+            if ( (LA52_0==ID) ) {
+                alt52=1;
+            }
+            else if ( (LA52_0==STRING) ) {
+                alt52=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("337:1: name : (value= ID -> VT_NAME[$value] | value= STRING -> VT_NAME[$value] );", 52, 0, input);
+
+                throw nvae;
+            }
+            switch (alt52) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:338:5: value= ID
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_name2025); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(value);
+
+
+                    // 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();
+                    // 338:14: -> VT_NAME[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_NAME, value));
+
+                    }
+
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/NewDRL.g:339:5: value= STRING
+                    {
+                    value=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_name2038); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(value);
+
+
+                    // 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();
+                    // 339:18: -> VT_NAME[$value]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(VT_NAME, 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 name
+
+    public static class curly_chunk_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start curly_chunk
+    // /Users/porcelli/Desktop/testes/NewDRL.g:342: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/Desktop/testes/NewDRL.g:345:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:345:5: cc= curly_chunk_data
+            {
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk2059);
+            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();
+            // 346: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/Desktop/testes/NewDRL.g:349:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    public final curly_chunk_data_return curly_chunk_data() throws RecognitionException {
+        curly_chunk_data_return retval = new curly_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token LEFT_CURLY162=null;
+        Token set163=null;
+        Token RIGHT_CURLY165=null;
+        curly_chunk_data_return curly_chunk_data164 = null;
+
+
+        Object LEFT_CURLY162_tree=null;
+        Object set163_tree=null;
+        Object RIGHT_CURLY165_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:350:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:350:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            {
+            root_0 = (Object)adaptor.nil();
+
+            LEFT_CURLY162=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data2078); if (failed) return retval;
+            if ( backtracking==0 ) {
+            LEFT_CURLY162_tree = (Object)adaptor.create(LEFT_CURLY162);
+            adaptor.addChild(root_0, LEFT_CURLY162_tree);
+            }
+            // /Users/porcelli/Desktop/testes/NewDRL.g:350:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            loop53:
+            do {
+                int alt53=3;
+                int LA53_0 = input.LA(1);
+
+                if ( ((LA53_0>=VT_FACT && LA53_0<=RIGHT_SQUARE)||(LA53_0>=MISC && LA53_0<=MULTI_LINE_COMMENT)) ) {
+                    alt53=1;
+                }
+                else if ( (LA53_0==LEFT_CURLY) ) {
+                    alt53=2;
+                }
+
+
+                switch (alt53) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:350:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    {
+            	    set163=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_FACT && input.LA(1)<=RIGHT_SQUARE)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set163));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data2081);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:350:49: curly_chunk_data
+            	    {
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data2095);
+            	    curly_chunk_data164=curly_chunk_data();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data164.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop53;
+                }
+            } while (true);
+
+            RIGHT_CURLY165=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data2100); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_CURLY165_tree = (Object)adaptor.create(RIGHT_CURLY165);
+            adaptor.addChild(root_0, RIGHT_CURLY165_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/Desktop/testes/NewDRL.g:353: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/Desktop/testes/NewDRL.g:356:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:356:5: pc= paren_chunk_data
+            {
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk2117);
+            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();
+            // 357: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/Desktop/testes/NewDRL.g:360:1: paren_chunk_data : value= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    public final paren_chunk_data_return paren_chunk_data() throws RecognitionException {
+        paren_chunk_data_return retval = new paren_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token value=null;
+        Token set166=null;
+        Token RIGHT_PAREN168=null;
+        paren_chunk_data_return paren_chunk_data167 = null;
+
+
+        Object value_tree=null;
+        Object set166_tree=null;
+        Object RIGHT_PAREN168_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:361:2: (value= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:361:4: value= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            {
+            root_0 = (Object)adaptor.nil();
+
+            value=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data2139); if (failed) return retval;
+            if ( backtracking==0 ) {
+            value_tree = (Object)adaptor.create(value);
+            adaptor.addChild(root_0, value_tree);
+            }
+            // /Users/porcelli/Desktop/testes/NewDRL.g:361:21: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            loop54:
+            do {
+                int alt54=3;
+                int LA54_0 = input.LA(1);
+
+                if ( ((LA54_0>=VT_FACT && LA54_0<=VK_COLLECT)||(LA54_0>=DOUBLE_PIPE && LA54_0<=MULTI_LINE_COMMENT)) ) {
+                    alt54=1;
+                }
+                else if ( (LA54_0==LEFT_PAREN) ) {
+                    alt54=2;
+                }
+
+
+                switch (alt54) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:361:22: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    {
+            	    set166=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_FACT && input.LA(1)<=VK_COLLECT)||(input.LA(1)>=DOUBLE_PIPE && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set166));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data2142);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:361:55: paren_chunk_data
+            	    {
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data2156);
+            	    paren_chunk_data167=paren_chunk_data();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data167.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop54;
+                }
+            } while (true);
+
+            RIGHT_PAREN168=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data2161); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_PAREN168_tree = (Object)adaptor.create(RIGHT_PAREN168);
+            adaptor.addChild(root_0, RIGHT_PAREN168_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/Desktop/testes/NewDRL.g:364: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/Desktop/testes/NewDRL.g:367:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:367:5: sc= square_chunk_data
+            {
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk2178);
+            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();
+            // 368: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/Desktop/testes/NewDRL.g:371:1: square_chunk_data : value= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    public final square_chunk_data_return square_chunk_data() throws RecognitionException {
+        square_chunk_data_return retval = new square_chunk_data_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token value=null;
+        Token set169=null;
+        Token RIGHT_SQUARE171=null;
+        square_chunk_data_return square_chunk_data170 = null;
+
+
+        Object value_tree=null;
+        Object set169_tree=null;
+        Object RIGHT_SQUARE171_tree=null;
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:372:2: (value= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:372:4: value= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            {
+            root_0 = (Object)adaptor.nil();
+
+            value=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data2199); if (failed) return retval;
+            if ( backtracking==0 ) {
+            value_tree = (Object)adaptor.create(value);
+            adaptor.addChild(root_0, value_tree);
+            }
+            // /Users/porcelli/Desktop/testes/NewDRL.g:372:22: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            loop55:
+            do {
+                int alt55=3;
+                int LA55_0 = input.LA(1);
+
+                if ( ((LA55_0>=VT_FACT && LA55_0<=NULL)||(LA55_0>=LEFT_CURLY && LA55_0<=MULTI_LINE_COMMENT)) ) {
+                    alt55=1;
+                }
+                else if ( (LA55_0==LEFT_SQUARE) ) {
+                    alt55=2;
+                }
+
+
+                switch (alt55) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:372:23: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    {
+            	    set169=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_FACT && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_CURLY && input.LA(1)<=MULTI_LINE_COMMENT) ) {
+            	        input.consume();
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set169));
+            	        errorRecovery=false;failed=false;
+            	    }
+            	    else {
+            	        if (backtracking>0) {failed=true; return retval;}
+            	        MismatchedSetException mse =
+            	            new MismatchedSetException(null,input);
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data2202);    throw mse;
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // /Users/porcelli/Desktop/testes/NewDRL.g:372:58: square_chunk_data
+            	    {
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data2216);
+            	    square_chunk_data170=square_chunk_data();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data170.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop55;
+                }
+            } while (true);
+
+            RIGHT_SQUARE171=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data2221); if (failed) return retval;
+            if ( backtracking==0 ) {
+            RIGHT_SQUARE171_tree = (Object)adaptor.create(RIGHT_SQUARE171);
+            adaptor.addChild(root_0, RIGHT_SQUARE171_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 eval_key_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start eval_key
+    // /Users/porcelli/Desktop/testes/NewDRL.g:375:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    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/Desktop/testes/NewDRL.g:376:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:376:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("eval"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(\"eval\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_eval_key2238); if (failed) return retval;
+            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();
+            // 376: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/Desktop/testes/NewDRL.g:379: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/Desktop/testes/NewDRL.g:380:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:380:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("contains"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(\"contains\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_contains_key2260); if (failed) return retval;
+            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();
+            // 380: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/Desktop/testes/NewDRL.g:383: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/Desktop/testes/NewDRL.g:384:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:384:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("matches"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(\"matches\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_matches_key2282); if (failed) return retval;
+            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();
+            // 384: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/Desktop/testes/NewDRL.g:387: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/Desktop/testes/NewDRL.g:388:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:388:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("excludes"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(\"excludes\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_excludes_key2304); if (failed) return retval;
+            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();
+            // 388: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/Desktop/testes/NewDRL.g:391: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/Desktop/testes/NewDRL.g:392:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:392:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("soundslike"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(\"soundslike\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_soundslike_key2326); if (failed) return retval;
+            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();
+            // 392: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/Desktop/testes/NewDRL.g:395: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/Desktop/testes/NewDRL.g:396:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:396:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("memberof"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(\"memberof\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_memberof_key2348); if (failed) return retval;
+            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();
+            // 396: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/Desktop/testes/NewDRL.g:399: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/Desktop/testes/NewDRL.g:400:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:400:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("not"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(\"not\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_not_key2370); if (failed) return retval;
+            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();
+            // 400: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/Desktop/testes/NewDRL.g:403: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/Desktop/testes/NewDRL.g:404:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:404:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("in"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(\"in\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_in_key2392); if (failed) return retval;
+            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();
+            // 404: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/Desktop/testes/NewDRL.g:407: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/Desktop/testes/NewDRL.g:408:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:408:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("or"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(\"or\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_or_key2414); if (failed) return retval;
+            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();
+            // 408: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/Desktop/testes/NewDRL.g:411: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/Desktop/testes/NewDRL.g:412:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:412:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("and"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(\"and\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_and_key2436); if (failed) return retval;
+            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();
+            // 412: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/Desktop/testes/NewDRL.g:415: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/Desktop/testes/NewDRL.g:416:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:416:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("exists"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(\"exists\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_exists_key2458); if (failed) return retval;
+            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();
+            // 416: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/Desktop/testes/NewDRL.g:419: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/Desktop/testes/NewDRL.g:420:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:420:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("forall"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(\"forall\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_forall_key2480); if (failed) return retval;
+            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();
+            // 420: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/Desktop/testes/NewDRL.g:423: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/Desktop/testes/NewDRL.g:424:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:424:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("from"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(\"from\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_key2502); if (failed) return retval;
+            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();
+            // 424: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/Desktop/testes/NewDRL.g:427:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    public final entry_point_key_return entry_point_key() throws RecognitionException {
+        entry_point_key_return retval = new entry_point_key_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID172=null;
+        Token MISC173=null;
+        Token ID174=null;
+
+        Object ID172_tree=null;
+        Object MISC173_tree=null;
+        Object ID174_tree=null;
+        RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+
+        	String text = "";
+
+        try {
+            // /Users/porcelli/Desktop/testes/NewDRL.g:430:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:430:5: {...}? => ID MISC ID
+            {
+            if ( !((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(\"entry\") && validateLT(2, \"-\") && validateLT(3, \"point\"))");
+            }
+            ID172=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key2525); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID172);
+
+            MISC173=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key2527); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC173);
+
+            ID174=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key2529); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID174);
+
+            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();
+            // 431: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/Desktop/testes/NewDRL.g:434: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/Desktop/testes/NewDRL.g:435:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:435:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("accumulate"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(\"accumulate\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accumulate_key2554); if (failed) return retval;
+            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();
+            // 435: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/Desktop/testes/NewDRL.g:438: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/Desktop/testes/NewDRL.g:439:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:439:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("init"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(\"init\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_init_key2576); if (failed) return retval;
+            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();
+            // 439: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/Desktop/testes/NewDRL.g:442: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/Desktop/testes/NewDRL.g:443:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:443:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("action"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(\"action\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_action_key2598); if (failed) return retval;
+            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();
+            // 443: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/Desktop/testes/NewDRL.g:446: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/Desktop/testes/NewDRL.g:447:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:447:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("reverse"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(\"reverse\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_reverse_key2620); if (failed) return retval;
+            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();
+            // 447: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/Desktop/testes/NewDRL.g:450: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/Desktop/testes/NewDRL.g:451:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:451:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("result"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(\"result\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_result_key2642); if (failed) return retval;
+            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();
+            // 451: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/Desktop/testes/NewDRL.g:454: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/Desktop/testes/NewDRL.g:455:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Desktop/testes/NewDRL.g:455:4: {...}? =>id= ID
+            {
+            if ( !((validateIdentifierKey("collect"))) ) {
+                if (backtracking>0) {failed=true; return retval;}
+                throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(\"collect\"))");
+            }
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_collect_key2664); if (failed) return retval;
+            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();
+            // 455: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/Desktop/testes/NewDRL.g:86:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:86:6: LEFT_PAREN or_key
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred1256); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred1258);
+        or_key();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred1
+
+    // $ANTLR start synpred2
+    public final void synpred2_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:89:5: ( or_key | DOUBLE_PIPE )
+        int alt56=2;
+        int LA56_0 = input.LA(1);
+
+        if ( (LA56_0==ID) && ((validateIdentifierKey("or")))) {
+            alt56=1;
+        }
+        else if ( (LA56_0==DOUBLE_PIPE) ) {
+            alt56=2;
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("89:5: synpred2 : ( or_key | DOUBLE_PIPE );", 56, 0, input);
+
+            throw nvae;
+        }
+        switch (alt56) {
+            case 1 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:89:6: or_key
+                {
+                pushFollow(FOLLOW_or_key_in_synpred2303);
+                or_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:89:13: DOUBLE_PIPE
+                {
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred2305); if (failed) return ;
+
+                }
+                break;
+
+        }}
+    // $ANTLR end synpred2
+
+    // $ANTLR start synpred3
+    public final void synpred3_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:96:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:96:6: LEFT_PAREN and_key
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred3356); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred3358);
+        and_key();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred3
+
+    // $ANTLR start synpred4
+    public final void synpred4_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:99:5: ( and_key | DOUBLE_AMPER )
+        int alt57=2;
+        int LA57_0 = input.LA(1);
+
+        if ( (LA57_0==ID) && ((validateIdentifierKey("and")))) {
+            alt57=1;
+        }
+        else if ( (LA57_0==DOUBLE_AMPER) ) {
+            alt57=2;
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("99:5: synpred4 : ( and_key | DOUBLE_AMPER );", 57, 0, input);
+
+            throw nvae;
+        }
+        switch (alt57) {
+            case 1 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:99:6: and_key
+                {
+                pushFollow(FOLLOW_and_key_in_synpred4403);
+                and_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:99:14: DOUBLE_AMPER
+                {
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred4405); if (failed) return ;
+
+                }
+                break;
+
+        }}
+    // $ANTLR end synpred4
+
+    // $ANTLR start synpred5
+    public final void synpred5_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:112:4: ( SEMICOLON )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:112:5: SEMICOLON
+        {
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred5508); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred5
+
+    // $ANTLR start synpred6
+    public final void synpred6_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:117:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:117:13: LEFT_PAREN ( or_key | and_key )
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred6540); if (failed) return ;
+        // /Users/porcelli/Desktop/testes/NewDRL.g:117:24: ( or_key | and_key )
+        int alt58=2;
+        int LA58_0 = input.LA(1);
+
+        if ( (LA58_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA58_1 = input.LA(2);
+
+            if ( ((validateIdentifierKey("or"))) ) {
+                alt58=1;
+            }
+            else if ( ((validateIdentifierKey("and"))) ) {
+                alt58=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("117:24: ( or_key | and_key )", 58, 1, input);
+
+                throw nvae;
+            }
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("117:24: ( or_key | and_key )", 58, 0, input);
+
+            throw nvae;
+        }
+        switch (alt58) {
+            case 1 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:117:25: or_key
+                {
+                pushFollow(FOLLOW_or_key_in_synpred6543);
+                or_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:117:32: and_key
+                {
+                pushFollow(FOLLOW_and_key_in_synpred6545);
+                and_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred6
+
+    // $ANTLR start synpred7
+    public final void synpred7_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:125:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:125:6: LEFT_PAREN ( or_key | and_key )
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred7626); if (failed) return ;
+        // /Users/porcelli/Desktop/testes/NewDRL.g:125:17: ( or_key | and_key )
+        int alt59=2;
+        int LA59_0 = input.LA(1);
+
+        if ( (LA59_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA59_1 = input.LA(2);
+
+            if ( ((validateIdentifierKey("or"))) ) {
+                alt59=1;
+            }
+            else if ( ((validateIdentifierKey("and"))) ) {
+                alt59=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("125:17: ( or_key | and_key )", 59, 1, input);
+
+                throw nvae;
+            }
+        }
+        else {
+            if (backtracking>0) {failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("125:17: ( or_key | and_key )", 59, 0, input);
+
+            throw nvae;
+        }
+        switch (alt59) {
+            case 1 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:125:18: or_key
+                {
+                pushFollow(FOLLOW_or_key_in_synpred7629);
+                or_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // /Users/porcelli/Desktop/testes/NewDRL.g:125:25: and_key
+                {
+                pushFollow(FOLLOW_and_key_in_synpred7631);
+                and_key();
+                _fsp--;
+                if (failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred7
+
+    // $ANTLR start synpred8
+    public final void synpred8_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:191:5: ( LEFT_PAREN )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:191:6: LEFT_PAREN
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred81079); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred8
+
+    // $ANTLR start synpred9
+    public final void synpred9_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:200:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:200:8: LEFT_SQUARE
+        {
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred91140); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred9
+
+    // $ANTLR start synpred10
+    public final void synpred10_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:202:6: ( LEFT_PAREN )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:202:8: LEFT_PAREN
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred101162); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred10
+
+    // $ANTLR start synpred11
+    public final void synpred11_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:271:53: ( DOUBLE_PIPE and_restr_connective )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:271:53: DOUBLE_PIPE and_restr_connective
+        {
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred111629); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred111632);
+        and_restr_connective();
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred11
+
+    // $ANTLR start synpred12
+    public final void synpred12_fragment() throws RecognitionException {   
+        // /Users/porcelli/Desktop/testes/NewDRL.g:275:54: ( DOUBLE_AMPER constraint_expression )
+        // /Users/porcelli/Desktop/testes/NewDRL.g:275:54: DOUBLE_AMPER constraint_expression
+        {
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred121659); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred121662);
+        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 DFA12 dfa12 = new DFA12(this);
+    protected DFA13 dfa13 = new DFA13(this);
+    protected DFA18 dfa18 = new DFA18(this);
+    protected DFA22 dfa22 = new DFA22(this);
+    protected DFA23 dfa23 = new DFA23(this);
+    protected DFA38 dfa38 = new DFA38(this);
+    protected DFA39 dfa39 = new DFA39(this);
+    static final String DFA12_eotS =
+        "\164\uffff";
+    static final String DFA12_eofS =
+        "\164\uffff";
+    static final String DFA12_minS =
+        "\3\60\2\0\1\60\1\0\1\uffff\1\66\1\106\2\uffff\1\60\1\66\1\uffff"+
+        "\2\60\1\66\1\106\6\60\2\0\1\66\1\106\2\60\2\0\1\66\1\0\1\4\1\66"+
+        "\7\60\2\uffff\3\60\1\0\1\61\1\66\1\0\1\4\1\66\7\60\1\uffff\1\60"+
+        "\1\uffff\1\4\24\0\1\uffff\4\0\1\uffff\30\0";
+    static final String DFA12_maxS =
+        "\2\66\1\105\2\0\1\66\1\0\1\uffff\1\66\1\106\2\uffff\1\105\1\66\1"+
+        "\uffff\2\105\1\66\1\106\1\66\1\105\1\66\3\105\2\0\1\66\1\106\1\66"+
+        "\1\105\2\0\1\66\1\0\1\123\1\66\1\105\6\104\2\uffff\3\105\1\0\2\66"+
+        "\1\0\1\123\1\66\1\105\6\104\1\uffff\1\105\1\uffff\1\123\24\0\1\uffff"+
+        "\4\0\1\uffff\30\0";
+    static final String DFA12_acceptS =
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1"+
+        "\uffff\1\3\25\uffff\1\3\4\uffff\1\3\30\uffff";
+    static final String DFA12_specialS =
+        "\2\uffff\1\1\1\3\1\4\1\uffff\1\0\22\uffff\1\10\1\2\4\uffff\1\11"+
+        "\1\6\1\uffff\1\7\16\uffff\1\12\2\uffff\1\5\77\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\1\1\5\uffff\1\2",
+            "\1\3\5\uffff\1\4",
+            "\1\6\5\uffff\1\7\1\10\1\uffff\1\5\13\uffff\1\11",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\15\5\uffff\1\14",
+            "\1\uffff",
+            "",
+            "\1\17",
+            "\1\20",
+            "",
+            "",
+            "\1\23\6\uffff\1\21\15\uffff\1\22",
+            "\1\24",
+            "",
+            "\1\25\6\uffff\1\10\15\uffff\1\11",
+            "\1\25\24\uffff\1\11",
+            "\1\26",
+            "\1\27",
+            "\1\31\1\32\4\uffff\1\30",
+            "\1\35\6\uffff\1\33\15\uffff\1\34",
+            "\1\37\1\40\4\uffff\1\36",
+            "\1\23\6\uffff\1\21\15\uffff\1\22",
+            "\1\23\24\uffff\1\22",
+            "\1\42\5\uffff\1\45\1\44\1\uffff\1\41\1\46\1\47\1\50\1\51\1\52"+
+            "\1\53\5\uffff\1\43",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\56",
+            "\1\57",
+            "\1\61\1\62\4\uffff\1\60",
+            "\1\64\5\uffff\1\67\1\66\1\uffff\1\63\1\70\1\71\1\72\1\73\1\74"+
+            "\1\75\5\uffff\1\65",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\77",
+            "\1\uffff",
+            "\101\101\1\102\1\103\15\101",
+            "\1\104",
+            "\1\107\5\uffff\1\105\11\uffff\5\106\1\110",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "",
+            "",
+            "\1\35\6\uffff\1\33\15\uffff\1\34",
+            "\1\35\24\uffff\1\34",
+            "\1\125\5\uffff\1\116\1\115\1\uffff\1\113\1\117\1\120\1\121\1"+
+            "\122\1\123\1\124\5\uffff\1\114",
+            "\1\uffff",
+            "\1\131\1\130\3\uffff\1\127",
+            "\1\132",
+            "\1\uffff",
+            "\101\134\1\135\1\136\15\134",
+            "\1\137",
+            "\1\142\5\uffff\1\140\11\uffff\5\141\1\143",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "",
+            "\1\157\1\32\1\162\1\161\1\uffff\1\163\1\150\1\147\1\160\1\uffff"+
+            "\1\151\1\152\1\153\1\154\1\155\1\156\5\uffff\1\146",
+            "",
+            "\101\101\1\102\1\103\15\101",
+            "\1\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[] 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 "117:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA12_6 = input.LA(1);
+
+                         
+                        int index12_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (((synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("eval")))||synpred6()||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("forall"))))) ) {s = 7;}
+
+                        else if ( (true) ) {s = 14;}
+
+                         
+                        input.seek(index12_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_2 = input.LA(1);
+
+                         
+                        int index12_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA12_2==COLON) ) {s = 5;}
+
+                        else if ( (LA12_2==LEFT_PAREN) ) {s = 6;}
+
+                        else if ( (LA12_2==ID) && (((synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))))) {s = 7;}
+
+                        else if ( (LA12_2==DOT) ) {s = 8;}
+
+                        else if ( (LA12_2==LEFT_SQUARE) ) {s = 9;}
+
+                         
+                        input.seek(index12_2);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_26 = input.LA(1);
+
+                         
+                        int index12_26 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index12_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA12_3 = input.LA(1);
+
+                         
+                        int index12_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 10;}
+
+                         
+                        input.seek(index12_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA12_4 = input.LA(1);
+
+                         
+                        int index12_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 11;}
+
+                         
+                        input.seek(index12_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA12_52 = input.LA(1);
+
+                         
+                        int index12_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 91;}
+
+                         
+                        input.seek(index12_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA12_32 = input.LA(1);
+
+                         
+                        int index12_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index12_32);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA12_34 = input.LA(1);
+
+                         
+                        int index12_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 64;}
+
+                         
+                        input.seek(index12_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA12_25 = input.LA(1);
+
+                         
+                        int index12_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 44;}
+
+                         
+                        input.seek(index12_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA12_31 = input.LA(1);
+
+                         
+                        int index12_31 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 62;}
+
+                         
+                        input.seek(index12_31);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA12_49 = input.LA(1);
+
+                         
+                        int index12_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 86;}
+
+                         
+                        input.seek(index12_49);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 12, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA13_eotS =
+        "\164\uffff";
+    static final String DFA13_eofS =
+        "\164\uffff";
+    static final String DFA13_minS =
+        "\3\60\2\0\1\60\1\0\1\66\1\106\3\uffff\1\60\1\66\1\uffff\2\60\1\66"+
+        "\1\106\6\60\2\0\1\66\1\106\2\60\2\0\1\66\1\0\1\4\1\66\7\60\2\uffff"+
+        "\3\60\1\0\1\61\1\66\1\0\1\4\1\66\7\60\1\uffff\1\60\1\uffff\1\4\24"+
+        "\0\1\uffff\4\0\1\uffff\30\0";
+    static final String DFA13_maxS =
+        "\2\66\1\105\2\0\1\66\1\0\1\66\1\106\3\uffff\1\105\1\66\1\uffff\2"+
+        "\105\1\66\1\106\1\66\1\105\1\66\3\105\2\0\1\66\1\106\1\66\1\105"+
+        "\2\0\1\66\1\0\1\123\1\66\1\105\6\104\2\uffff\3\105\1\0\2\66\1\0"+
+        "\1\123\1\66\1\105\6\104\1\uffff\1\105\1\uffff\1\123\24\0\1\uffff"+
+        "\4\0\1\uffff\30\0";
+    static final String DFA13_acceptS =
+        "\11\uffff\1\1\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1\uffff"+
+        "\1\3\25\uffff\1\3\4\uffff\1\3\30\uffff";
+    static final String DFA13_specialS =
+        "\2\uffff\1\3\1\2\1\5\1\uffff\1\12\22\uffff\1\10\1\1\4\uffff\1\7"+
+        "\1\4\1\uffff\1\6\16\uffff\1\11\2\uffff\1\0\77\uffff}>";
+    static final String[] DFA13_transitionS = {
+            "\1\1\5\uffff\1\2",
+            "\1\4\5\uffff\1\3",
+            "\1\6\5\uffff\1\11\1\7\1\uffff\1\5\13\uffff\1\10",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\15\5\uffff\1\14",
+            "\1\uffff",
+            "\1\17",
+            "\1\20",
+            "",
+            "",
+            "",
+            "\1\23\6\uffff\1\21\15\uffff\1\22",
+            "\1\24",
+            "",
+            "\1\25\6\uffff\1\7\15\uffff\1\10",
+            "\1\25\24\uffff\1\10",
+            "\1\26",
+            "\1\27",
+            "\1\31\1\32\4\uffff\1\30",
+            "\1\35\6\uffff\1\33\15\uffff\1\34",
+            "\1\37\1\40\4\uffff\1\36",
+            "\1\23\6\uffff\1\21\15\uffff\1\22",
+            "\1\23\24\uffff\1\22",
+            "\1\42\5\uffff\1\45\1\44\1\uffff\1\41\1\46\1\47\1\50\1\51\1\52"+
+            "\1\53\5\uffff\1\43",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\56",
+            "\1\57",
+            "\1\61\1\62\4\uffff\1\60",
+            "\1\64\5\uffff\1\67\1\66\1\uffff\1\63\1\70\1\71\1\72\1\73\1\74"+
+            "\1\75\5\uffff\1\65",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\77",
+            "\1\uffff",
+            "\101\101\1\102\1\103\15\101",
+            "\1\104",
+            "\1\107\5\uffff\1\105\11\uffff\5\106\1\110",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "\1\112\5\uffff\1\111\11\uffff\5\106",
+            "",
+            "",
+            "\1\35\6\uffff\1\33\15\uffff\1\34",
+            "\1\35\24\uffff\1\34",
+            "\1\114\5\uffff\1\117\1\116\1\uffff\1\113\1\120\1\121\1\122\1"+
+            "\123\1\124\1\125\5\uffff\1\115",
+            "\1\uffff",
+            "\1\131\1\130\3\uffff\1\127",
+            "\1\132",
+            "\1\uffff",
+            "\101\134\1\135\1\136\15\134",
+            "\1\137",
+            "\1\142\5\uffff\1\140\11\uffff\5\141\1\143",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "\1\145\5\uffff\1\144\11\uffff\5\141",
+            "",
+            "\1\157\1\32\1\162\1\161\1\uffff\1\163\1\150\1\147\1\160\1\uffff"+
+            "\1\151\1\152\1\153\1\154\1\155\1\156\5\uffff\1\146",
+            "",
+            "\101\101\1\102\1\103\15\101",
+            "\1\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[] DFA13_eot = DFA.unpackEncodedString(DFA13_eotS);
+    static final short[] DFA13_eof = DFA.unpackEncodedString(DFA13_eofS);
+    static final char[] DFA13_min = DFA.unpackEncodedStringToUnsignedChars(DFA13_minS);
+    static final char[] DFA13_max = DFA.unpackEncodedStringToUnsignedChars(DFA13_maxS);
+    static final short[] DFA13_accept = DFA.unpackEncodedString(DFA13_acceptS);
+    static final short[] DFA13_special = DFA.unpackEncodedString(DFA13_specialS);
+    static final short[][] DFA13_transition;
+
+    static {
+        int numStates = DFA13_transitionS.length;
+        DFA13_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA13_transition[i] = DFA.unpackEncodedString(DFA13_transitionS[i]);
+        }
+    }
+
+    class DFA13 extends DFA {
+
+        public DFA13(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 13;
+            this.eot = DFA13_eot;
+            this.eof = DFA13_eof;
+            this.min = DFA13_min;
+            this.max = DFA13_max;
+            this.accept = DFA13_accept;
+            this.special = DFA13_special;
+            this.transition = DFA13_transition;
+        }
+        public String getDescription() {
+            return "125:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA13_52 = input.LA(1);
+
+                         
+                        int index13_52 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 91;}
+
+                         
+                        input.seek(index13_52);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA13_26 = input.LA(1);
+
+                         
+                        int index13_26 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index13_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA13_3 = input.LA(1);
+
+                         
+                        int index13_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 10;}
+
+                         
+                        input.seek(index13_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA13_2 = input.LA(1);
+
+                         
+                        int index13_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA13_2==COLON) ) {s = 5;}
+
+                        else if ( (LA13_2==LEFT_PAREN) ) {s = 6;}
+
+                        else if ( (LA13_2==DOT) ) {s = 7;}
+
+                        else if ( (LA13_2==LEFT_SQUARE) ) {s = 8;}
+
+                        else if ( (LA13_2==ID) && (((synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))))) {s = 9;}
+
+                         
+                        input.seek(index13_2);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA13_32 = input.LA(1);
+
+                         
+                        int index13_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 45;}
+
+                         
+                        input.seek(index13_32);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA13_4 = input.LA(1);
+
+                         
+                        int index13_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 11;}
+
+                         
+                        input.seek(index13_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA13_34 = input.LA(1);
+
+                         
+                        int index13_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 64;}
+
+                         
+                        input.seek(index13_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA13_31 = input.LA(1);
+
+                         
+                        int index13_31 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 62;}
+
+                         
+                        input.seek(index13_31);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA13_25 = input.LA(1);
+
+                         
+                        int index13_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 44;}
+
+                         
+                        input.seek(index13_25);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA13_49 = input.LA(1);
+
+                         
+                        int index13_49 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 86;}
+
+                         
+                        input.seek(index13_49);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA13_6 = input.LA(1);
+
+                         
+                        int index13_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (((synpred7()&&(validateIdentifierKey("exists")))||synpred7()||(synpred7()&&(validateIdentifierKey("eval")))||(synpred7()&&(validateIdentifierKey("forall")))||(synpred7()&&(validateIdentifierKey("not"))))) ) {s = 9;}
+
+                        else if ( (true) ) {s = 14;}
+
+                         
+                        input.seek(index13_6);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 13, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA18_eotS =
+        "\13\uffff";
+    static final String DFA18_eofS =
+        "\13\uffff";
+    static final String DFA18_minS =
+        "\1\66\1\60\2\4\1\0\1\61\1\0\4\uffff";
+    static final String DFA18_maxS =
+        "\1\66\1\60\2\123\1\0\1\66\1\0\4\uffff";
+    static final String DFA18_acceptS =
+        "\7\uffff\1\1\1\2\1\1\1\2";
+    static final String DFA18_specialS =
+        "\4\uffff\1\1\1\0\1\2\4\uffff}>";
+    static final String[] DFA18_transitionS = {
+            "\1\1",
+            "\1\2",
+            "\54\3\1\4\1\5\42\3",
+            "\54\3\1\6\1\5\42\3",
+            "\1\uffff",
+            "\1\12\3\uffff\2\11",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    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 "157:3: ( accumulate_init_clause | accumulate_id_clause )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA18_5 = input.LA(1);
+
+                         
+                        int index18_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA18_5>=COMMA && LA18_5<=ID)) && ((validateIdentifierKey("init")))) {s = 9;}
+
+                        else if ( (LA18_5==RIGHT_PAREN) ) {s = 10;}
+
+                         
+                        input.seek(index18_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA18_4 = input.LA(1);
+
+                         
+                        int index18_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("init"))) ) {s = 7;}
+
+                        else if ( (true) ) {s = 8;}
+
+                         
+                        input.seek(index18_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA18_6 = input.LA(1);
+
+                         
+                        int index18_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("init"))) ) {s = 9;}
+
+                        else if ( (true) ) {s = 10;}
+
+                         
+                        input.seek(index18_6);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 18, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA22_eotS =
+        "\13\uffff";
+    static final String DFA22_eofS =
+        "\13\uffff";
+    static final String DFA22_minS =
+        "\1\66\1\60\2\4\1\0\1\61\1\0\4\uffff";
+    static final String DFA22_maxS =
+        "\1\66\1\60\2\123\1\0\1\66\1\0\4\uffff";
+    static final String DFA22_acceptS =
+        "\7\uffff\1\1\1\2\1\1\1\2";
+    static final String DFA22_specialS =
+        "\1\4\1\6\1\0\1\5\1\2\1\1\1\3\4\uffff}>";
+    static final String[] DFA22_transitionS = {
+            "\1\1",
+            "\1\2",
+            "\54\3\1\4\1\5\42\3",
+            "\54\3\1\6\1\5\42\3",
+            "\1\uffff",
+            "\1\12\3\uffff\2\11",
+            "\1\uffff",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA22_eot = DFA.unpackEncodedString(DFA22_eotS);
+    static final short[] DFA22_eof = DFA.unpackEncodedString(DFA22_eofS);
+    static final char[] DFA22_min = DFA.unpackEncodedStringToUnsignedChars(DFA22_minS);
+    static final char[] DFA22_max = DFA.unpackEncodedStringToUnsignedChars(DFA22_maxS);
+    static final short[] DFA22_accept = DFA.unpackEncodedString(DFA22_acceptS);
+    static final short[] DFA22_special = DFA.unpackEncodedString(DFA22_specialS);
+    static final short[][] DFA22_transition;
+
+    static {
+        int numStates = DFA22_transitionS.length;
+        DFA22_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA22_transition[i] = DFA.unpackEncodedString(DFA22_transitionS[i]);
+        }
+    }
+
+    class DFA22 extends DFA {
+
+        public DFA22(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 22;
+            this.eot = DFA22_eot;
+            this.eof = DFA22_eof;
+            this.min = DFA22_min;
+            this.max = DFA22_max;
+            this.accept = DFA22_accept;
+            this.special = DFA22_special;
+            this.transition = DFA22_transition;
+        }
+        public String getDescription() {
+            return "168:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA22_2 = input.LA(1);
+
+                         
+                        int index22_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA22_2>=VT_FACT && LA22_2<=VK_COLLECT)||(LA22_2>=DOUBLE_PIPE && LA22_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
+
+                        else if ( (LA22_2==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 4;}
+
+                        else if ( (LA22_2==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
+
+                         
+                        input.seek(index22_2);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA22_5 = input.LA(1);
+
+                         
+                        int index22_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA22_5>=COMMA && LA22_5<=ID)) && ((validateIdentifierKey("reverse")))) {s = 9;}
+
+                        else if ( (LA22_5==RIGHT_PAREN) && ((validateIdentifierKey("result")))) {s = 10;}
+
+                         
+                        input.seek(index22_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA22_4 = input.LA(1);
+
+                         
+                        int index22_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("reverse"))) ) {s = 7;}
+
+                        else if ( ((validateIdentifierKey("result"))) ) {s = 8;}
+
+                         
+                        input.seek(index22_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA22_6 = input.LA(1);
+
+                         
+                        int index22_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey("reverse"))) ) {s = 9;}
+
+                        else if ( ((validateIdentifierKey("result"))) ) {s = 10;}
+
+                         
+                        input.seek(index22_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA22_0 = input.LA(1);
+
+                         
+                        int index22_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA22_0==ID) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 1;}
+
+                         
+                        input.seek(index22_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA22_3 = input.LA(1);
+
+                         
+                        int index22_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA22_3==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
+
+                        else if ( ((LA22_3>=VT_FACT && LA22_3<=VK_COLLECT)||(LA22_3>=DOUBLE_PIPE && LA22_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
+
+                        else if ( (LA22_3==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 6;}
+
+                         
+                        input.seek(index22_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA22_1 = input.LA(1);
+
+                         
+                        int index22_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA22_1==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 2;}
+
+                         
+                        input.seek(index22_1);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 22, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA23_eotS =
+        "\25\uffff";
+    static final String DFA23_eofS =
+        "\1\2\24\uffff";
+    static final String DFA23_minS =
+        "\1\60\1\4\1\uffff\1\4\1\0\2\uffff\1\4\2\0\3\4\1\0\1\4\1\uffff\1"+
+        "\4\4\0";
+    static final String DFA23_maxS =
+        "\1\67\1\123\1\uffff\1\123\1\0\2\uffff\1\123\2\0\3\123\1\0\1\123"+
+        "\1\uffff\1\123\4\0";
+    static final String DFA23_acceptS =
+        "\2\uffff\1\2\2\uffff\2\1\10\uffff\1\1\5\uffff";
+    static final String DFA23_specialS =
+        "\1\uffff\1\3\1\uffff\1\7\1\2\2\uffff\1\11\1\6\1\0\1\12\1\1\1\5\1"+
+        "\4\1\10\1\uffff\1\13\4\uffff}>";
+    static final String[] DFA23_transitionS = {
+            "\1\1\7\2",
+            "\54\5\1\4\1\6\4\5\1\3\35\5",
+            "",
+            "\54\5\1\10\1\6\4\5\1\11\1\12\1\5\1\7\13\5\1\13\16\5",
+            "\1\uffff",
+            "",
+            "",
+            "\54\5\1\15\1\6\4\5\1\14\35\5",
+            "\1\uffff",
+            "\1\uffff",
+            "\54\5\1\17\1\6\4\5\1\16\35\5",
+            "\54\5\1\17\1\6\24\5\1\20\15\5",
+            "\54\5\1\22\1\6\5\5\1\21\15\5\1\23\16\5",
+            "\1\uffff",
+            "\54\5\1\24\1\6\5\5\1\12\15\5\1\13\16\5",
+            "",
+            "\54\5\1\24\1\6\23\5\1\13\16\5",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA23_eot = DFA.unpackEncodedString(DFA23_eotS);
+    static final short[] DFA23_eof = DFA.unpackEncodedString(DFA23_eofS);
+    static final char[] DFA23_min = DFA.unpackEncodedStringToUnsignedChars(DFA23_minS);
+    static final char[] DFA23_max = DFA.unpackEncodedStringToUnsignedChars(DFA23_maxS);
+    static final short[] DFA23_accept = DFA.unpackEncodedString(DFA23_acceptS);
+    static final short[] DFA23_special = DFA.unpackEncodedString(DFA23_specialS);
+    static final short[][] DFA23_transition;
+
+    static {
+        int numStates = DFA23_transitionS.length;
+        DFA23_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA23_transition[i] = DFA.unpackEncodedString(DFA23_transitionS[i]);
+        }
+    }
+
+    class DFA23 extends DFA {
+
+        public DFA23(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 23;
+            this.eot = DFA23_eot;
+            this.eof = DFA23_eof;
+            this.min = DFA23_min;
+            this.max = DFA23_max;
+            this.accept = DFA23_accept;
+            this.special = DFA23_special;
+            this.transition = DFA23_transition;
+        }
+        public String getDescription() {
+            return "191:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA23_9 = input.LA(1);
+
+                         
+                        int index23_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index23_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA23_11 = input.LA(1);
+
+                         
+                        int index23_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_11==RIGHT_SQUARE) ) {s = 16;}
+
+                        else if ( (LA23_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA23_11>=VT_FACT && LA23_11<=VK_COLLECT)||(LA23_11>=DOUBLE_PIPE && LA23_11<=LEFT_SQUARE)||(LA23_11>=LEFT_CURLY && LA23_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                        else if ( (LA23_11==LEFT_PAREN) && (synpred8())) {s = 15;}
+
+                         
+                        input.seek(index23_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA23_4 = input.LA(1);
+
+                         
+                        int index23_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index23_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA23_1 = input.LA(1);
+
+                         
+                        int index23_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_1==ID) ) {s = 3;}
+
+                        else if ( (LA23_1==LEFT_PAREN) ) {s = 4;}
+
+                        else if ( ((LA23_1>=VT_FACT && LA23_1<=VK_COLLECT)||(LA23_1>=DOUBLE_PIPE && LA23_1<=COMMA)||(LA23_1>=DOT && LA23_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                        else if ( (LA23_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                         
+                        input.seek(index23_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA23_13 = input.LA(1);
+
+                         
+                        int index23_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 15;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index23_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA23_12 = input.LA(1);
+
+                         
+                        int index23_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( (LA23_12==DOT) ) {s = 17;}
+
+                        else if ( (LA23_12==LEFT_PAREN) ) {s = 18;}
+
+                        else if ( (LA23_12==LEFT_SQUARE) ) {s = 19;}
+
+                        else if ( ((LA23_12>=VT_FACT && LA23_12<=VK_COLLECT)||(LA23_12>=DOUBLE_PIPE && LA23_12<=ID)||(LA23_12>=ARROW && LA23_12<=NULL)||(LA23_12>=RIGHT_SQUARE && LA23_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                         
+                        input.seek(index23_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA23_8 = input.LA(1);
+
+                         
+                        int index23_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index23_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA23_3 = input.LA(1);
+
+                         
+                        int index23_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_3==COLON) ) {s = 7;}
+
+                        else if ( (LA23_3==LEFT_PAREN) ) {s = 8;}
+
+                        else if ( (LA23_3==ID) ) {s = 9;}
+
+                        else if ( (LA23_3==DOT) ) {s = 10;}
+
+                        else if ( (LA23_3==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( (LA23_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA23_3>=VT_FACT && LA23_3<=VK_COLLECT)||(LA23_3>=DOUBLE_PIPE && LA23_3<=COMMA)||LA23_3==ARROW||(LA23_3>=EQUAL && LA23_3<=NULL)||(LA23_3>=RIGHT_SQUARE && LA23_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                         
+                        input.seek(index23_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA23_14 = input.LA(1);
+
+                         
+                        int index23_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_14==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( (LA23_14==LEFT_PAREN) ) {s = 20;}
+
+                        else if ( (LA23_14==DOT) ) {s = 10;}
+
+                        else if ( (LA23_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA23_14>=VT_FACT && LA23_14<=VK_COLLECT)||(LA23_14>=DOUBLE_PIPE && LA23_14<=ID)||(LA23_14>=ARROW && LA23_14<=NULL)||(LA23_14>=RIGHT_SQUARE && LA23_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                         
+                        input.seek(index23_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA23_7 = input.LA(1);
+
+                         
+                        int index23_7 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_7==ID) ) {s = 12;}
+
+                        else if ( (LA23_7==LEFT_PAREN) ) {s = 13;}
+
+                        else if ( (LA23_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA23_7>=VT_FACT && LA23_7<=VK_COLLECT)||(LA23_7>=DOUBLE_PIPE && LA23_7<=COMMA)||(LA23_7>=DOT && LA23_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                         
+                        input.seek(index23_7);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA23_10 = input.LA(1);
+
+                         
+                        int index23_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_10==ID) ) {s = 14;}
+
+                        else if ( (LA23_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA23_10>=VT_FACT && LA23_10<=VK_COLLECT)||(LA23_10>=DOUBLE_PIPE && LA23_10<=COMMA)||(LA23_10>=DOT && LA23_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                        else if ( (LA23_10==LEFT_PAREN) && (synpred8())) {s = 15;}
+
+                         
+                        input.seek(index23_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA23_16 = input.LA(1);
+
+                         
+                        int index23_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA23_16==LEFT_PAREN) ) {s = 20;}
+
+                        else if ( (LA23_16==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( (LA23_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA23_16>=VT_FACT && LA23_16<=VK_COLLECT)||(LA23_16>=DOUBLE_PIPE && LA23_16<=NULL)||(LA23_16>=RIGHT_SQUARE && LA23_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                         
+                        input.seek(index23_16);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 23, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA38_eotS =
+        "\30\uffff";
+    static final String DFA38_eofS =
+        "\30\uffff";
+    static final String DFA38_minS =
+        "\1\61\1\uffff\2\60\1\0\1\uffff\1\0\1\60\1\4\2\0\3\4\12\0";
+    static final String DFA38_maxS =
+        "\1\65\1\uffff\1\77\1\105\1\0\1\uffff\1\0\1\105\1\123\2\0\3\123\12"+
+        "\0";
+    static final String DFA38_acceptS =
+        "\1\uffff\1\2\3\uffff\1\1\22\uffff";
+    static final String DFA38_specialS =
+        "\4\uffff\1\0\1\uffff\1\3\2\uffff\1\2\1\1\15\uffff}>";
+    static final String[] DFA38_transitionS = {
+            "\1\1\1\2\1\1\1\uffff\1\1",
+            "",
+            "\1\4\5\uffff\1\3\3\uffff\6\5",
+            "\1\6\5\uffff\1\7\1\1\1\uffff\7\1\5\5\1\10",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\13\3\5\1\uffff\1\5\1\11\1\5\10\uffff\5\12\1\14",
+            "\101\15\1\16\1\17\15\15",
+            "\1\uffff",
+            "\1\uffff",
+            "\54\23\1\22\1\24\4\23\1\20\11\23\5\21\17\23",
+            "\101\25\1\26\1\27\15\25",
+            "\101\15\1\16\1\17\15\15",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
+    };
+
+    static final short[] DFA38_eot = DFA.unpackEncodedString(DFA38_eotS);
+    static final short[] DFA38_eof = DFA.unpackEncodedString(DFA38_eofS);
+    static final char[] DFA38_min = DFA.unpackEncodedStringToUnsignedChars(DFA38_minS);
+    static final char[] DFA38_max = DFA.unpackEncodedStringToUnsignedChars(DFA38_maxS);
+    static final short[] DFA38_accept = DFA.unpackEncodedString(DFA38_acceptS);
+    static final short[] DFA38_special = DFA.unpackEncodedString(DFA38_specialS);
+    static final short[][] DFA38_transition;
+
+    static {
+        int numStates = DFA38_transitionS.length;
+        DFA38_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA38_transition[i] = DFA.unpackEncodedString(DFA38_transitionS[i]);
+        }
+    }
+
+    class DFA38 extends DFA {
+
+        public DFA38(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 38;
+            this.eot = DFA38_eot;
+            this.eof = DFA38_eof;
+            this.min = DFA38_min;
+            this.max = DFA38_max;
+            this.accept = DFA38_accept;
+            this.special = DFA38_special;
+            this.transition = DFA38_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 271:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA38_4 = input.LA(1);
+
+                         
+                        int index38_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index38_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA38_10 = input.LA(1);
+
+                         
+                        int index38_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index38_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA38_9 = input.LA(1);
+
+                         
+                        int index38_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index38_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA38_6 = input.LA(1);
+
+                         
+                        int index38_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred11()) ) {s = 5;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index38_6);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 38, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA39_eotS =
+        "\61\uffff";
+    static final String DFA39_eofS =
+        "\1\1\5\uffff\1\4\52\uffff";
+    static final String DFA39_minS =
+        "\1\61\1\uffff\2\60\1\uffff\2\60\2\4\1\60\3\0\5\4\37\0";
+    static final String DFA39_maxS =
+        "\1\65\1\uffff\1\77\1\105\1\uffff\1\77\1\105\2\123\1\105\3\0\5\123"+
+        "\37\0";
+    static final String DFA39_acceptS =
+        "\1\uffff\1\2\2\uffff\1\1\54\uffff";
+    static final String DFA39_specialS =
+        "\12\uffff\1\1\1\0\1\2\44\uffff}>";
+    static final String[] DFA39_transitionS = {
+            "\2\1\1\2\1\uffff\1\1",
+            "",
+            "\1\5\5\uffff\1\3\3\uffff\6\4",
+            "\1\7\5\uffff\1\6\1\1\1\uffff\7\1\5\4\1\10",
+            "",
+            "\1\12\5\uffff\1\11\3\uffff\6\4",
+            "\1\15\3\4\1\uffff\1\4\1\13\1\4\10\uffff\5\14\1\16",
+            "\54\31\1\26\1\30\4\31\1\17\3\31\1\20\1\21\1\22\1\23\1\24\1\25"+
+            "\5\27\17\31",
+            "\101\32\1\33\1\34\15\32",
+            "\1\36\5\uffff\1\35\1\1\1\uffff\7\1\5\4\1\37",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\54\43\1\42\1\44\4\43\1\40\11\43\5\41\17\43",
+            "\101\45\1\46\1\47\15\45",
+            "\54\31\1\52\1\50\3\31\1\56\1\51\1\55\10\31\5\53\1\54\16\31",
+            "\54\31\1\60\1\30\4\31\1\57\11\31\5\53\17\31",
+            "\54\31\1\60\1\30\4\31\1\57\11\31\5\53\17\31",
+            "\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[] DFA39_eot = DFA.unpackEncodedString(DFA39_eotS);
+    static final short[] DFA39_eof = DFA.unpackEncodedString(DFA39_eofS);
+    static final char[] DFA39_min = DFA.unpackEncodedStringToUnsignedChars(DFA39_minS);
+    static final char[] DFA39_max = DFA.unpackEncodedStringToUnsignedChars(DFA39_maxS);
+    static final short[] DFA39_accept = DFA.unpackEncodedString(DFA39_acceptS);
+    static final short[] DFA39_special = DFA.unpackEncodedString(DFA39_specialS);
+    static final short[][] DFA39_transition;
+
+    static {
+        int numStates = DFA39_transitionS.length;
+        DFA39_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA39_transition[i] = DFA.unpackEncodedString(DFA39_transitionS[i]);
+        }
+    }
+
+    class DFA39 extends DFA {
+
+        public DFA39(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 39;
+            this.eot = DFA39_eot;
+            this.eof = DFA39_eof;
+            this.min = DFA39_min;
+            this.max = DFA39_max;
+            this.accept = DFA39_accept;
+            this.special = DFA39_special;
+            this.transition = DFA39_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 275:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA39_11 = input.LA(1);
+
+                         
+                        int index39_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index39_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA39_10 = input.LA(1);
+
+                         
+                        int index39_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index39_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA39_12 = input.LA(1);
+
+                         
+                        int index39_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred12()) ) {s = 4;}
+
+                        else if ( (true) ) {s = 1;}
+
+                         
+                        input.seek(index39_12);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 39, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block220 = new BitSet(new long[]{0x0041000000000002L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs241 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or262 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or266 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or268 = new BitSet(new long[]{0x0043000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or290 = new BitSet(new long[]{0x0044000000000002L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or312 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or319 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or324 = new BitSet(new long[]{0x0044000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and362 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and366 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and368 = new BitSet(new long[]{0x0043000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and371 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and390 = new BitSet(new long[]{0x0048000000000002L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and412 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and419 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and424 = new BitSet(new long[]{0x0048000000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary462 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary468 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary474 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary480 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary486 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary489 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary491 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary498 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary512 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist526 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist550 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist557 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist559 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist561 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist574 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not619 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not636 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not643 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not645 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not647 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not655 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval689 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval691 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall712 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall714 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall716 = new BitSet(new long[]{0x0042000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall719 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source749 = new BitSet(new long[]{0x0040000000000002L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source758 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source774 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source807 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source823 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement851 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement855 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement857 = new BitSet(new long[]{0x0060000000000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement859 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement867 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement873 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement881 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause908 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause913 = new BitSet(new long[]{0x0060000000000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause915 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause919 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause923 = new BitSet(new long[]{0x0060000000000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause925 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause931 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause935 = new BitSet(new long[]{0x0060000000000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause937 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause943 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause947 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause996 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause1000 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement1022 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement1026 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement1028 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement1030 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement1050 = new BitSet(new long[]{0x0040000000000000L,0x0000000000000001L});
+    public static final BitSet FOLLOW_name_in_entrypoint_statement1052 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1072 = new BitSet(new long[]{0x0081000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source1085 = new BitSet(new long[]{0x0080000000000002L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source1092 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain1124 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain1126 = new BitSet(new long[]{0x0081000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain1146 = new BitSet(new long[]{0x0080000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1168 = new BitSet(new long[]{0x0080000000000002L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain1179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern1212 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern1225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding1245 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding1251 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding1258 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding1260 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding1262 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression1298 = new BitSet(new long[]{0x0044000000000002L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression1310 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression1316 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression1321 = new BitSet(new long[]{0x0044000000000002L});
+    public static final BitSet FOLLOW_qualified_id_in_fact1350 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact1352 = new BitSet(new long[]{0x0043000000000000L});
+    public static final BitSet FOLLOW_constraints_in_fact1354 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact1357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints1380 = new BitSet(new long[]{0x0020000000000002L});
+    public static final BitSet FOLLOW_COMMA_in_constraints1384 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_constraint_in_constraints1387 = new BitSet(new long[]{0x0020000000000002L});
+    public static final BitSet FOLLOW_or_constr_in_constraint1401 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr1412 = new BitSet(new long[]{0x0004000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr1416 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr1419 = new BitSet(new long[]{0x0004000000000002L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr1434 = new BitSet(new long[]{0x0008000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr1438 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr1441 = new BitSet(new long[]{0x0008000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr1462 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr1464 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr1477 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr1482 = new BitSet(new long[]{0x0041000000000000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr1484 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr1486 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint1505 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint1507 = new BitSet(new long[]{0xFD41000000000002L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint1511 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint1517 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint1519 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint1573 = new BitSet(new long[]{0xFC41000000000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint1575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label1599 = new BitSet(new long[]{0x0200000000000000L});
+    public static final BitSet FOLLOW_COLON_in_label1601 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective1617 = new BitSet(new long[]{0x0004000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective1629 = new BitSet(new long[]{0xFC41000000000000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective1632 = new BitSet(new long[]{0x0004000000000002L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective1647 = new BitSet(new long[]{0x0008000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective1659 = new BitSet(new long[]{0xFC41000000000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective1662 = new BitSet(new long[]{0x0008000000000002L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression1684 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression1689 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression1694 = new BitSet(new long[]{0xFC41000000000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression1696 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression1698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator1714 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator1720 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator1726 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_LESS_in_simple_operator1732 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator1738 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator1744 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_not_key_in_simple_operator1750 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator1753 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator1756 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator1759 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator1762 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_ID_in_simple_operator1765 = new BitSet(new long[]{0x0041000000000000L,0x000000000000003FL});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator1768 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator1781 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator1787 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator1793 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator1799 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator1805 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_ID_in_simple_operator1811 = new BitSet(new long[]{0x0041000000000000L,0x000000000000003FL});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator1814 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator1819 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator1834 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator1839 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator1841 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator1846 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator1849 = new BitSet(new long[]{0x0022000000000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator1853 = new BitSet(new long[]{0x0041000000000000L,0x000000000000001FL});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator1856 = new BitSet(new long[]{0x0022000000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator1861 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value1873 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value1878 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value1884 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_qualified_id1926 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_DOT_in_qualified_id1930 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_ID_in_qualified_id1932 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_qualified_id1939 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_qualified_id1941 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path1966 = new BitSet(new long[]{0x0080000000000002L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path1970 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path1972 = new BitSet(new long[]{0x0080000000000002L});
+    public static final BitSet FOLLOW_ID_in_accessor_element1996 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element1998 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_name2025 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_name2038 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk2059 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data2078 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data2081 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data2095 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data2100 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk2117 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data2139 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data2142 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data2156 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data2161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk2178 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data2199 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk_data2202 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data2216 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000FFFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data2221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key2238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key2260 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key2282 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key2304 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key2326 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key2348 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key2370 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key2392 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key2414 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key2436 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key2458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key2480 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key2502 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key2525 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key2527 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key2529 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key2554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key2576 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key2598 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key2620 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key2642 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key2664 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred1256 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred1258 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred2303 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred2305 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred3356 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_and_key_in_synpred3358 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred4403 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred4405 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred5508 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred6540 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred6543 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred6545 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred7626 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred7629 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred7631 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred81079 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred91140 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred101162 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred111629 = new BitSet(new long[]{0xFC41000000000000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred111632 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred121659 = new BitSet(new long[]{0xFC41000000000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred121662 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/NewDRLParser.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java	2008-04-28 17:05:28 UTC (rev 19745)
@@ -0,0 +1,1957 @@
+package org.drools.lang;
+
+import org.antlr.runtime.*;
+import org.antlr.runtime.tree.*;import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+public class TreeNewDRL extends TreeParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_FACT", "VT_CONSTRAINTS", "VT_QUALIFIED_ID", "VT_LABEL", "VT_NAME", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "LEFT_PAREN", "RIGHT_PAREN", "DOUBLE_PIPE", "DOUBLE_AMPER", "SEMICOLON", "COMMA", "ID", "DOT", "ARROW", "COLON", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "STRING", "INT", "FLOAT", "BOOL", "NULL", "LEFT_SQUARE", "RIGHT_SQUA!
 RE", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "TILDE", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+    };
+    public static final int COMMA=53;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=18;
+    public static final int VT_FACT_OR=23;
+    public static final int VK_NOT=35;
+    public static final int HexDigit=77;
+    public static final int VK_ACCUMULATE=42;
+    public static final int VT_EXPRESSION_CHAIN=20;
+    public static final int ARROW=56;
+    public static final int VT_AND_PREFIX=13;
+    public static final int MISC=73;
+    public static final int FLOAT=66;
+    public static final int VT_CURLY_CHUNK=9;
+    public static final int TILDE=80;
+    public static final int DOT=55;
+    public static final int VT_OR_PREFIX=14;
+    public static final int DOUBLE_PIPE=50;
+    public static final int LESS=61;
+    public static final int VT_PATTERN=21;
+    public static final int EscapeSequence=76;
+    public static final int VK_EXISTS=39;
+    public static final int INT=65;
+    public static final int VT_BIND_FIELD=24;
+    public static final int VK_COLLECT=47;
+    public static final int VK_EVAL=28;
+    public static final int LEFT_SQUARE=69;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=81;
+    public static final int GREATER=59;
+    public static final int VT_FACT=4;
+    public static final int VK_MATCHES=30;
+    public static final int LEFT_CURLY=71;
+    public static final int VT_FACT_BINDING=22;
+    public static final int ID=54;
+    public static final int NOT_EQUAL=63;
+    public static final int DOUBLE_AMPER=51;
+    public static final int LEFT_PAREN=48;
+    public static final int RIGHT_CURLY=72;
+    public static final int BOOL=67;
+    public static final int VT_AND_INFIX=15;
+    public static final int VK_ENTRY_POINT=34;
+    public static final int VT_ACCESSOR_PATH=26;
+    public static final int VT_FROM_SOURCE=19;
+    public static final int VT_LABEL=7;
+    public static final int VK_CONTAINS=29;
+    public static final int VK_SOUNDSLIKE=32;
+    public static final int VT_FIELD=25;
+    public static final int WS=75;
+    public static final int VT_QUALIFIED_ID=6;
+    public static final int VK_AND=38;
+    public static final int STRING=64;
+    public static final int VK_IN=36;
+    public static final int VT_ACCESSOR_ELEMENT=27;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=17;
+    public static final int VK_REVERSE=45;
+    public static final int VK_MEMBEROF=33;
+    public static final int GREATER_EQUAL=60;
+    public static final int VT_OR_INFIX=16;
+    public static final int VK_FORALL=40;
+    public static final int VT_SQUARE_CHUNK=10;
+    public static final int VK_OR=37;
+    public static final int VT_PAREN_CHUNK=11;
+    public static final int VT_NAME=8;
+    public static final int LESS_EQUAL=62;
+    public static final int VK_RESULT=46;
+    public static final int UnicodeEscape=78;
+    public static final int EQUAL=58;
+    public static final int SEMICOLON=52;
+    public static final int VT_AND_IMPLICIT=12;
+    public static final int EOF=-1;
+    public static final int VT_CONSTRAINTS=5;
+    public static final int NULL=68;
+    public static final int EOL=74;
+    public static final int VK_INIT=43;
+    public static final int COLON=57;
+    public static final int OctalEscape=79;
+    public static final int VK_ACTION=44;
+    public static final int MULTI_LINE_COMMENT=83;
+    public static final int VK_FROM=41;
+    public static final int VK_EXCLUDES=31;
+    public static final int RIGHT_PAREN=49;
+    public static final int RIGHT_SQUARE=70;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=82;
+
+        public TreeNewDRL(TreeNodeStream input) {
+            super(input);
+        }
+        
+
+    public String[] getTokenNames() { return tokenNames; }
+    public String getGrammarFileName() { return "/Users/porcelli/Desktop/testes/TreeNewDRL.g"; }
+
+    // $ANTLR start lhs_block
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:23:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    public final void lhs_block() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:4: ^( VT_AND_IMPLICIT ( lhs )* )
+            {
+            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block43); 
+
+            if ( input.LA(1)==Token.DOWN ) {
+                match(input, Token.DOWN, null); 
+                // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:22: ( lhs )*
+                loop1:
+                do {
+                    int alt1=2;
+                    int LA1_0 = input.LA(1);
+
+                    if ( ((LA1_0>=VT_AND_PREFIX && LA1_0<=VT_OR_INFIX)||LA1_0==VT_PATTERN||LA1_0==VK_EVAL||LA1_0==VK_NOT||(LA1_0>=VK_EXISTS && LA1_0<=VK_FROM)) ) {
+                        alt1=1;
+                    }
+
+
+                    switch (alt1) {
+                	case 1 :
+                	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:24:22: lhs
+                	    {
+                	    pushFollow(FOLLOW_lhs_in_lhs_block45);
+                	    lhs();
+                	    _fsp--;
+
+
+                	    }
+                	    break;
+
+                	default :
+                	    break loop1;
+                    }
+                } while (true);
+
+
+                match(input, Token.UP, null); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end lhs_block
+
+
+    // $ANTLR start lhs
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );
+    public final void lhs() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:5: ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern )
+            int alt5=10;
+            switch ( input.LA(1) ) {
+            case VT_OR_PREFIX:
+                {
+                alt5=1;
+                }
+                break;
+            case VT_OR_INFIX:
+                {
+                alt5=2;
+                }
+                break;
+            case VT_AND_PREFIX:
+                {
+                alt5=3;
+                }
+                break;
+            case VT_AND_INFIX:
+                {
+                alt5=4;
+                }
+                break;
+            case VK_EXISTS:
+                {
+                alt5=5;
+                }
+                break;
+            case VK_NOT:
+                {
+                alt5=6;
+                }
+                break;
+            case VK_EVAL:
+                {
+                alt5=7;
+                }
+                break;
+            case VK_FORALL:
+                {
+                alt5=8;
+                }
+                break;
+            case VK_FROM:
+                {
+                alt5=9;
+                }
+                break;
+            case VT_PATTERN:
+                {
+                alt5=10;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("28:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );", 5, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt5) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:7: ^( VT_OR_PREFIX ( lhs )+ )
+                    {
+                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs59); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:22: ( lhs )+
+                    int cnt2=0;
+                    loop2:
+                    do {
+                        int alt2=2;
+                        int LA2_0 = input.LA(1);
+
+                        if ( ((LA2_0>=VT_AND_PREFIX && LA2_0<=VT_OR_INFIX)||LA2_0==VT_PATTERN||LA2_0==VK_EVAL||LA2_0==VK_NOT||(LA2_0>=VK_EXISTS && LA2_0<=VK_FROM)) ) {
+                            alt2=1;
+                        }
+
+
+                        switch (alt2) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:28:22: lhs
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_in_lhs61);
+                    	    lhs();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt2 >= 1 ) break loop2;
+                                EarlyExitException eee =
+                                    new EarlyExitException(2, input);
+                                throw eee;
+                        }
+                        cnt2++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:29:4: ^( VT_OR_INFIX lhs lhs )
+                    {
+                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs69); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs71);
+                    lhs();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_lhs_in_lhs73);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:30:4: ^( VT_AND_PREFIX ( lhs )+ )
+                    {
+                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs80); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:30:20: ( lhs )+
+                    int cnt3=0;
+                    loop3:
+                    do {
+                        int alt3=2;
+                        int LA3_0 = input.LA(1);
+
+                        if ( ((LA3_0>=VT_AND_PREFIX && LA3_0<=VT_OR_INFIX)||LA3_0==VT_PATTERN||LA3_0==VK_EVAL||LA3_0==VK_NOT||(LA3_0>=VK_EXISTS && LA3_0<=VK_FROM)) ) {
+                            alt3=1;
+                        }
+
+
+                        switch (alt3) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:30:20: lhs
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_in_lhs82);
+                    	    lhs();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt3 >= 1 ) break loop3;
+                                EarlyExitException eee =
+                                    new EarlyExitException(3, input);
+                                throw eee;
+                        }
+                        cnt3++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:31:4: ^( VT_AND_INFIX lhs lhs )
+                    {
+                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs90); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs92);
+                    lhs();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_lhs_in_lhs94);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:32:4: ^( VK_EXISTS lhs )
+                    {
+                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs101); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs103);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:33:4: ^( VK_NOT lhs )
+                    {
+                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs110); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs112);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:34:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    {
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs120); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs122); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:35:4: ^( VK_FORALL ( lhs )+ )
+                    {
+                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs129); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:35:16: ( lhs )+
+                    int cnt4=0;
+                    loop4:
+                    do {
+                        int alt4=2;
+                        int LA4_0 = input.LA(1);
+
+                        if ( ((LA4_0>=VT_AND_PREFIX && LA4_0<=VT_OR_INFIX)||LA4_0==VT_PATTERN||LA4_0==VK_EVAL||LA4_0==VK_NOT||(LA4_0>=VK_EXISTS && LA4_0<=VK_FROM)) ) {
+                            alt4=1;
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:35:16: lhs
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_in_lhs131);
+                    	    lhs();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt4 >= 1 ) break loop4;
+                                EarlyExitException eee =
+                                    new EarlyExitException(4, input);
+                                throw eee;
+                        }
+                        cnt4++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:36:4: ^( VK_FROM lhs_pattern from_elements )
+                    {
+                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs139); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs141);
+                    lhs_pattern();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_from_elements_in_lhs143);
+                    from_elements();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:37:4: lhs_pattern
+                    {
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs149);
+                    lhs_pattern();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end lhs
+
+
+    // $ANTLR start from_elements
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:40:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_NAME ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );
+    public final void from_elements() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:2: ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_NAME ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            int alt9=4;
+            switch ( input.LA(1) ) {
+            case VK_ACCUMULATE:
+                {
+                alt9=1;
+                }
+                break;
+            case VK_COLLECT:
+                {
+                alt9=2;
+                }
+                break;
+            case VK_ENTRY_POINT:
+                {
+                alt9=3;
+                }
+                break;
+            case VT_FROM_SOURCE:
+                {
+                alt9=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("40:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_NAME ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:4: ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
+                    {
+                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements161); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_from_elements163);
+                    lhs();
+                    _fsp--;
+
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:24: ( accumulate_init_clause | accumulate_id_clause )
+                    int alt6=2;
+                    int LA6_0 = input.LA(1);
+
+                    if ( (LA6_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
+                        alt6=1;
+                    }
+                    else if ( (LA6_0==VT_ACCUMULATE_ID_CLAUSE) ) {
+                        alt6=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("41:24: ( accumulate_init_clause | accumulate_id_clause )", 6, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt6) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:25: accumulate_init_clause
+                            {
+                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements166);
+                            accumulate_init_clause();
+                            _fsp--;
+
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:41:48: accumulate_id_clause
+                            {
+                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements168);
+                            accumulate_id_clause();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:42:4: ^( VK_COLLECT lhs )
+                    {
+                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements176); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_from_elements178);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:43:4: ^( VK_ENTRY_POINT VT_NAME )
+                    {
+                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements185); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_NAME,FOLLOW_VT_NAME_in_from_elements187); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
+                    {
+                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements194); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,ID,FOLLOW_ID_in_from_elements196); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:24: ( VT_PAREN_CHUNK )?
+                    int alt7=2;
+                    int LA7_0 = input.LA(1);
+
+                    if ( (LA7_0==VT_PAREN_CHUNK) ) {
+                        alt7=1;
+                    }
+                    switch (alt7) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:24: VT_PAREN_CHUNK
+                            {
+                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements198); 
+
+                            }
+                            break;
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:40: ( expression_chain )?
+                    int alt8=2;
+                    int LA8_0 = input.LA(1);
+
+                    if ( (LA8_0==VT_EXPRESSION_CHAIN) ) {
+                        alt8=1;
+                    }
+                    switch (alt8) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:44:40: expression_chain
+                            {
+                            pushFollow(FOLLOW_expression_chain_in_from_elements201);
+                            expression_chain();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end from_elements
+
+
+    // $ANTLR start accumulate_init_clause
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:47:1: accumulate_init_clause : ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) ;
+    public final void accumulate_init_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:48:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:48:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) )
+            {
+            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause215); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause222); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause224); 
+
+            match(input, Token.UP, null); 
+            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause232); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause234); 
+
+            match(input, Token.UP, null); 
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:51:4: ( accumulate_init_reverse_clause )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==VK_REVERSE) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:51:4: accumulate_init_reverse_clause
+                    {
+                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause241);
+                    accumulate_init_reverse_clause();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause248); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause250); 
+
+            match(input, Token.UP, null); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end accumulate_init_clause
+
+
+    // $ANTLR start accumulate_init_reverse_clause
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:55:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
+    public final void accumulate_init_reverse_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:56:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:56:4: ^( VK_REVERSE VT_PAREN_CHUNK )
+            {
+            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause264); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause266); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end accumulate_init_reverse_clause
+
+
+    // $ANTLR start accumulate_id_clause
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:60:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
+    public final void accumulate_id_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:61:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:61:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
+            {
+            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause280); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause282); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause284); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end accumulate_id_clause
+
+
+    // $ANTLR start lhs_pattern
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:64:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ;
+    public final void lhs_pattern() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:65:2: ( ^( VT_PATTERN fact_expression ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:65:4: ^( VT_PATTERN fact_expression )
+            {
+            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern297); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_fact_expression_in_lhs_pattern299);
+            fact_expression();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end lhs_pattern
+
+
+    // $ANTLR start fact_expression
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:68:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accesso!
 r_element )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );
+    public final void fact_expression() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:69:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element !
 )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK )
+            int alt24=28;
+            switch ( input.LA(1) ) {
+            case DOUBLE_PIPE:
+                {
+                alt24=1;
+                }
+                break;
+            case DOUBLE_AMPER:
+                {
+                alt24=2;
+                }
+                break;
+            case VT_FACT_BINDING:
+                {
+                alt24=3;
+                }
+                break;
+            case VT_FACT:
+                {
+                alt24=4;
+                }
+                break;
+            case VT_FACT_OR:
+                {
+                alt24=5;
+                }
+                break;
+            case VK_EVAL:
+                {
+                alt24=6;
+                }
+                break;
+            case VK_IN:
+                {
+                alt24=7;
+                }
+                break;
+            case EQUAL:
+                {
+                alt24=8;
+                }
+                break;
+            case GREATER:
+                {
+                alt24=9;
+                }
+                break;
+            case GREATER_EQUAL:
+                {
+                alt24=10;
+                }
+                break;
+            case LESS:
+                {
+                alt24=11;
+                }
+                break;
+            case LESS_EQUAL:
+                {
+                alt24=12;
+                }
+                break;
+            case NOT_EQUAL:
+                {
+                alt24=13;
+                }
+                break;
+            case VK_CONTAINS:
+                {
+                alt24=14;
+                }
+                break;
+            case VK_EXCLUDES:
+                {
+                alt24=15;
+                }
+                break;
+            case VK_MATCHES:
+                {
+                alt24=16;
+                }
+                break;
+            case VK_SOUNDSLIKE:
+                {
+                alt24=17;
+                }
+                break;
+            case VK_MEMBEROF:
+                {
+                alt24=18;
+                }
+                break;
+            case ID:
+                {
+                alt24=19;
+                }
+                break;
+            case VT_BIND_FIELD:
+                {
+                alt24=20;
+                }
+                break;
+            case VT_FIELD:
+                {
+                alt24=21;
+                }
+                break;
+            case VT_ACCESSOR_PATH:
+                {
+                alt24=22;
+                }
+                break;
+            case STRING:
+                {
+                alt24=23;
+                }
+                break;
+            case INT:
+                {
+                alt24=24;
+                }
+                break;
+            case FLOAT:
+                {
+                alt24=25;
+                }
+                break;
+            case BOOL:
+                {
+                alt24=26;
+                }
+                break;
+            case NULL:
+                {
+                alt24=27;
+                }
+                break;
+            case VT_PAREN_CHUNK:
+                {
+                alt24=28;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("68:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_ele!
 ment )+ ) ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );", 24, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt24) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:69:4: ^( DOUBLE_PIPE fact_expression fact_expression )
+                    {
+                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression312); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression314);
+                    fact_expression();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression316);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:70:4: ^( DOUBLE_AMPER fact_expression fact_expression )
+                    {
+                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression323); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression325);
+                    fact_expression();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression327);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:71:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
+                    {
+                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression334); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression336); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression338);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:4: ^( VT_FACT ^( VT_QUALIFIED_ID ( ID )+ ) ( fact_expression )* )
+                    {
+                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression345); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_QUALIFIED_ID,FOLLOW_VT_QUALIFIED_ID_in_fact_expression348); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:32: ( ID )+
+                    int cnt11=0;
+                    loop11:
+                    do {
+                        int alt11=2;
+                        int LA11_0 = input.LA(1);
+
+                        if ( (LA11_0==ID) ) {
+                            alt11=1;
+                        }
+
+
+                        switch (alt11) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:32: ID
+                    	    {
+                    	    match(input,ID,FOLLOW_ID_in_fact_expression350); 
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt11 >= 1 ) break loop11;
+                                EarlyExitException eee =
+                                    new EarlyExitException(11, input);
+                                throw eee;
+                        }
+                        cnt11++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:37: ( fact_expression )*
+                    loop12:
+                    do {
+                        int alt12=2;
+                        int LA12_0 = input.LA(1);
+
+                        if ( (LA12_0==VT_FACT||LA12_0==VT_PAREN_CHUNK||(LA12_0>=VT_FACT_BINDING && LA12_0<=VT_ACCESSOR_PATH)||(LA12_0>=VK_EVAL && LA12_0<=VK_MEMBEROF)||LA12_0==VK_IN||(LA12_0>=DOUBLE_PIPE && LA12_0<=DOUBLE_AMPER)||LA12_0==ID||(LA12_0>=EQUAL && LA12_0<=NULL)) ) {
+                            alt12=1;
+                        }
+
+
+                        switch (alt12) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:72:37: fact_expression
+                    	    {
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression354);
+                    	    fact_expression();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop12;
+                        }
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:73:4: ^( VT_FACT_OR fact_expression fact_expression )
+                    {
+                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression362); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression364);
+                    fact_expression();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression366);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:74:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    {
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression373); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression375); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
+                    {
+                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression382); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:12: ( VK_NOT )?
+                    int alt13=2;
+                    int LA13_0 = input.LA(1);
+
+                    if ( (LA13_0==VK_NOT) ) {
+                        alt13=1;
+                    }
+                    switch (alt13) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:12: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression384); 
+
+                            }
+                            break;
+
+                    }
+
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:20: ( fact_expression )+
+                    int cnt14=0;
+                    loop14:
+                    do {
+                        int alt14=2;
+                        int LA14_0 = input.LA(1);
+
+                        if ( (LA14_0==VT_FACT||LA14_0==VT_PAREN_CHUNK||(LA14_0>=VT_FACT_BINDING && LA14_0<=VT_ACCESSOR_PATH)||(LA14_0>=VK_EVAL && LA14_0<=VK_MEMBEROF)||LA14_0==VK_IN||(LA14_0>=DOUBLE_PIPE && LA14_0<=DOUBLE_AMPER)||LA14_0==ID||(LA14_0>=EQUAL && LA14_0<=NULL)) ) {
+                            alt14=1;
+                        }
+
+
+                        switch (alt14) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:75:20: fact_expression
+                    	    {
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression387);
+                    	    fact_expression();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt14 >= 1 ) break loop14;
+                                EarlyExitException eee =
+                                    new EarlyExitException(14, input);
+                                throw eee;
+                        }
+                        cnt14++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:76:4: ^( EQUAL fact_expression )
+                    {
+                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression395); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression397);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:77:4: ^( GREATER fact_expression )
+                    {
+                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression404); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression406);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:78:4: ^( GREATER_EQUAL fact_expression )
+                    {
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression413); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression415);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:79:4: ^( LESS fact_expression )
+                    {
+                    match(input,LESS,FOLLOW_LESS_in_fact_expression422); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression424);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:80:4: ^( LESS_EQUAL fact_expression )
+                    {
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression431); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression433);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 13 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:81:4: ^( NOT_EQUAL fact_expression )
+                    {
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression440); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression442);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 14 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:82:4: ^( VK_CONTAINS ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression449); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:82:18: ( VK_NOT )?
+                    int alt15=2;
+                    int LA15_0 = input.LA(1);
+
+                    if ( (LA15_0==VK_NOT) ) {
+                        alt15=1;
+                    }
+                    switch (alt15) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:82:18: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression451); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression454);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 15 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:83:4: ^( VK_EXCLUDES ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression461); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:83:18: ( VK_NOT )?
+                    int alt16=2;
+                    int LA16_0 = input.LA(1);
+
+                    if ( (LA16_0==VK_NOT) ) {
+                        alt16=1;
+                    }
+                    switch (alt16) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:83:18: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression463); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression466);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 16 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:84:4: ^( VK_MATCHES ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression473); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:84:17: ( VK_NOT )?
+                    int alt17=2;
+                    int LA17_0 = input.LA(1);
+
+                    if ( (LA17_0==VK_NOT) ) {
+                        alt17=1;
+                    }
+                    switch (alt17) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:84:17: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression475); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression478);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 17 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:85:4: ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression485); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:85:20: ( VK_NOT )?
+                    int alt18=2;
+                    int LA18_0 = input.LA(1);
+
+                    if ( (LA18_0==VK_NOT) ) {
+                        alt18=1;
+                    }
+                    switch (alt18) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:85:20: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression487); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression490);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 18 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:86:4: ^( VK_MEMBEROF ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression497); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:86:18: ( VK_NOT )?
+                    int alt19=2;
+                    int LA19_0 = input.LA(1);
+
+                    if ( (LA19_0==VK_NOT) ) {
+                        alt19=1;
+                    }
+                    switch (alt19) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:86:18: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression499); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression502);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 19 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:87:4: ^( ID ( VK_NOT )? VT_SQUARE_CHUNK fact_expression )
+                    {
+                    match(input,ID,FOLLOW_ID_in_fact_expression509); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:87:9: ( VK_NOT )?
+                    int alt20=2;
+                    int LA20_0 = input.LA(1);
+
+                    if ( (LA20_0==VK_NOT) ) {
+                        alt20=1;
+                    }
+                    switch (alt20) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:87:9: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression511); 
+
+                            }
+                            break;
+
+                    }
+
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression514); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression516);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 20 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:88:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
+                    {
+                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression523); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression525); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression527);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 21 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:4: ^( VT_FIELD ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ( fact_expression )? )
+                    {
+                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression534); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression537); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:34: ( accessor_element )+
+                    int cnt21=0;
+                    loop21:
+                    do {
+                        int alt21=2;
+                        int LA21_0 = input.LA(1);
+
+                        if ( (LA21_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt21=1;
+                        }
+
+
+                        switch (alt21) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:34: accessor_element
+                    	    {
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression539);
+                    	    accessor_element();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt21 >= 1 ) break loop21;
+                                EarlyExitException eee =
+                                    new EarlyExitException(21, input);
+                                throw eee;
+                        }
+                        cnt21++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:53: ( fact_expression )?
+                    int alt22=2;
+                    int LA22_0 = input.LA(1);
+
+                    if ( (LA22_0==VT_FACT||LA22_0==VT_PAREN_CHUNK||(LA22_0>=VT_FACT_BINDING && LA22_0<=VT_ACCESSOR_PATH)||(LA22_0>=VK_EVAL && LA22_0<=VK_MEMBEROF)||LA22_0==VK_IN||(LA22_0>=DOUBLE_PIPE && LA22_0<=DOUBLE_AMPER)||LA22_0==ID||(LA22_0>=EQUAL && LA22_0<=NULL)) ) {
+                        alt22=1;
+                    }
+                    switch (alt22) {
+                        case 1 :
+                            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:89:53: fact_expression
+                            {
+                            pushFollow(FOLLOW_fact_expression_in_fact_expression543);
+                            fact_expression();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 22 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:90:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                    {
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression551); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:90:23: ( accessor_element )+
+                    int cnt23=0;
+                    loop23:
+                    do {
+                        int alt23=2;
+                        int LA23_0 = input.LA(1);
+
+                        if ( (LA23_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt23=1;
+                        }
+
+
+                        switch (alt23) {
+                    	case 1 :
+                    	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:90:23: accessor_element
+                    	    {
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression553);
+                    	    accessor_element();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt23 >= 1 ) break loop23;
+                                EarlyExitException eee =
+                                    new EarlyExitException(23, input);
+                                throw eee;
+                        }
+                        cnt23++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 23 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:91:4: STRING
+                    {
+                    match(input,STRING,FOLLOW_STRING_in_fact_expression560); 
+
+                    }
+                    break;
+                case 24 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:92:4: INT
+                    {
+                    match(input,INT,FOLLOW_INT_in_fact_expression565); 
+
+                    }
+                    break;
+                case 25 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:93:4: FLOAT
+                    {
+                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression570); 
+
+                    }
+                    break;
+                case 26 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:94:4: BOOL
+                    {
+                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression575); 
+
+                    }
+                    break;
+                case 27 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:95:4: NULL
+                    {
+                    match(input,NULL,FOLLOW_NULL_in_fact_expression580); 
+
+                    }
+                    break;
+                case 28 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:96:4: VT_PAREN_CHUNK
+                    {
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression585); 
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end fact_expression
+
+
+    // $ANTLR start accessor_element
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:100:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
+    public final void accessor_element() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
+            {
+            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element598); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_accessor_element600); 
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:29: ( VT_SQUARE_CHUNK )*
+            loop25:
+            do {
+                int alt25=2;
+                int LA25_0 = input.LA(1);
+
+                if ( (LA25_0==VT_SQUARE_CHUNK) ) {
+                    alt25=1;
+                }
+
+
+                switch (alt25) {
+            	case 1 :
+            	    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:101:29: VT_SQUARE_CHUNK
+            	    {
+            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element602); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop25;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end accessor_element
+
+
+    // $ANTLR start expression_chain
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:104:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
+    public final void expression_chain() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
+            {
+            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain616); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_expression_chain618); 
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:29: ( VT_SQUARE_CHUNK )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+
+            if ( (LA26_0==VT_SQUARE_CHUNK) ) {
+                alt26=1;
+            }
+            switch (alt26) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:29: VT_SQUARE_CHUNK
+                    {
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain620); 
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:46: ( VT_PAREN_CHUNK )?
+            int alt27=2;
+            int LA27_0 = input.LA(1);
+
+            if ( (LA27_0==VT_PAREN_CHUNK) ) {
+                alt27=1;
+            }
+            switch (alt27) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:46: VT_PAREN_CHUNK
+                    {
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain623); 
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:62: ( expression_chain )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==VT_EXPRESSION_CHAIN) ) {
+                alt28=1;
+            }
+            switch (alt28) {
+                case 1 :
+                    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:105:62: expression_chain
+                    {
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain626);
+                    expression_chain();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end expression_chain
+
+
+    // $ANTLR start curly_chunk
+    // /Users/porcelli/Desktop/testes/TreeNewDRL.g:108:1: curly_chunk : VT_CURLY_CHUNK ;
+    public final void curly_chunk() throws RecognitionException {
+        try {
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:109:2: ( VT_CURLY_CHUNK )
+            // /Users/porcelli/Desktop/testes/TreeNewDRL.g:109:4: VT_CURLY_CHUNK
+            {
+            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk640); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end curly_chunk
+
+
+ 
+
+    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block43 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block45 = new BitSet(new long[]{0x000003881021E008L});
+    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs59 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs61 = new BitSet(new long[]{0x000003881021E008L});
+    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs69 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs71 = new BitSet(new long[]{0x000003881021E000L});
+    public static final BitSet FOLLOW_lhs_in_lhs73 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs80 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs82 = new BitSet(new long[]{0x000003881021E008L});
+    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs90 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs92 = new BitSet(new long[]{0x000003881021E000L});
+    public static final BitSet FOLLOW_lhs_in_lhs94 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXISTS_in_lhs101 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs103 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NOT_in_lhs110 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs112 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_lhs120 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs122 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FORALL_in_lhs129 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs131 = new BitSet(new long[]{0x000003881021E008L});
+    public static final BitSet FOLLOW_VK_FROM_in_lhs139 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs141 = new BitSet(new long[]{0x0000840400080000L});
+    public static final BitSet FOLLOW_from_elements_in_lhs143 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs149 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements161 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements163 = new BitSet(new long[]{0x0000000000060000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements166 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements168 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements176 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements178 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements185 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_NAME_in_from_elements187 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements194 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_from_elements196 = new BitSet(new long[]{0x0000000000100808L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements198 = new BitSet(new long[]{0x0000000000100008L});
+    public static final BitSet FOLLOW_expression_chain_in_from_elements201 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause215 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause222 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause224 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause232 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause234 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause241 = new BitSet(new long[]{0x0000400000000000L});
+    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause248 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause250 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause264 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause266 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause280 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause282 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause284 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern297 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern299 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression312 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression314 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression316 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression323 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression325 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression327 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression334 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression336 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression338 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_in_fact_expression345 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_QUALIFIED_ID_in_fact_expression348 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_fact_expression350 = new BitSet(new long[]{0x0040000000000008L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression354 = new BitSet(new long[]{0xFC4C0013F7C00818L,0x000000000000001FL});
+    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression362 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression364 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression366 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression373 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression375 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_IN_in_fact_expression382 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression384 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression387 = new BitSet(new long[]{0xFC4C0013F7C00818L,0x000000000000001FL});
+    public static final BitSet FOLLOW_EQUAL_in_fact_expression395 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression397 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_in_fact_expression404 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression406 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression413 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression415 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_in_fact_expression422 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression424 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression431 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression433 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression440 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression442 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression449 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression451 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression454 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression461 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression463 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression466 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression473 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression475 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression478 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression485 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression487 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression490 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression497 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression499 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression502 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fact_expression509 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression511 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression514 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression516 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression523 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression525 = new BitSet(new long[]{0xFC4C0013F7C00810L,0x000000000000001FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression527 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression534 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression537 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression539 = new BitSet(new long[]{0x0000000008000008L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression543 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression551 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression553 = new BitSet(new long[]{0x0000000008000008L});
+    public static final BitSet FOLLOW_STRING_in_fact_expression560 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_fact_expression565 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_fact_expression570 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_fact_expression575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_fact_expression580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression585 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element598 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accessor_element600 = new BitSet(new long[]{0x0000000000000408L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element602 = new BitSet(new long[]{0x0000000000000408L});
+    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain616 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_expression_chain618 = new BitSet(new long[]{0x0000000000100C08L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain620 = new BitSet(new long[]{0x0000000000100808L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain623 = new BitSet(new long[]{0x0000000000100008L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain626 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk640 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/TreeNewDRL.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g	2008-04-28 17:05:28 UTC (rev 19745)
@@ -0,0 +1,617 @@
+grammar NewDRL;
+
+options {
+	output=AST;
+}
+
+tokens {
+	VT_FACT;
+	VT_CONSTRAINTS;
+	VT_QUALIFIED_ID;
+	VT_LABEL;
+	VT_NAME;
+
+	VT_CURLY_CHUNK;
+	VT_SQUARE_CHUNK;
+	VT_PAREN_CHUNK;
+
+	VT_AND_IMPLICIT;
+	VT_AND_PREFIX;
+	VT_OR_PREFIX;
+	VT_AND_INFIX;
+	VT_OR_INFIX;
+	
+	VT_ACCUMULATE_INIT_CLAUSE;
+	VT_ACCUMULATE_ID_CLAUSE;
+	VT_FROM_SOURCE;
+	VT_EXPRESSION_CHAIN;
+	
+	VT_PATTERN;
+	VT_FACT_BINDING;
+	VT_FACT_OR;
+	VT_BIND_FIELD;
+	VT_FIELD;
+
+	VT_ACCESSOR_PATH;
+	VT_ACCESSOR_ELEMENT;
+
+	VK_EVAL;
+	VK_CONTAINS;
+	VK_MATCHES;
+	VK_EXCLUDES;
+	VK_SOUNDSLIKE;
+	VK_MEMBEROF;
+	VK_ENTRY_POINT;
+	VK_NOT;
+	VK_IN;
+	VK_OR;
+	VK_AND;
+	VK_EXISTS;
+	VK_FORALL;
+	VK_FROM;
+	VK_ACCUMULATE;
+	VK_INIT;
+	VK_ACTION;
+	VK_REVERSE;
+	VK_RESULT;
+	VK_COLLECT;
+}
+
+ at parser::members {
+	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);
+	}
+}
+
+normal_lhs_block
+	:	lhs*
+	->	^(VT_AND_IMPLICIT lhs*)
+	;
+
+lhs	:	lhs_or
+	;
+
+lhs_or
+ at init{
+	Token orToken = null;
+}	:	(LEFT_PAREN or_key)=> LEFT_PAREN or=or_key lhs_and+ RIGHT_PAREN // PREFIX
+		-> ^(VT_OR_PREFIX[$or.start] lhs_and+)
+	|	(lhs_and -> lhs_and) 
+		( (or_key|DOUBLE_PIPE)=> (value=or_key {orToken = $value.start;} |pipe=DOUBLE_PIPE {orToken = $pipe;}) lhs_and 
+		-> ^(VT_OR_INFIX[orToken] $lhs_or lhs_and))*
+	;
+
+lhs_and
+ at init{
+	Token andToken = null;
+}	:	(LEFT_PAREN and_key)=> LEFT_PAREN and=and_key lhs_unary+ RIGHT_PAREN // PREFIX
+		-> ^(VT_AND_PREFIX[$and.start] lhs_unary+)
+	|	(lhs_unary -> lhs_unary) 
+		( (and_key|DOUBLE_AMPER)=> (value=and_key {andToken = $value.start;} |amper=DOUBLE_AMPER {andToken = $amper;}) lhs_unary 
+		-> ^(VT_AND_INFIX[andToken] $lhs_and lhs_unary) )*
+	;
+
+lhs_unary
+options{k=2;}
+	:	(	lhs_exist
+		|	lhs_not
+		|	lhs_eval
+		|	lhs_forall
+		|	LEFT_PAREN! lhs_or RIGHT_PAREN!
+		|	pattern_source
+		)
+		((SEMICOLON)=> SEMICOLON!)?
+	;
+
+lhs_exist
+	:	exists_key
+	        ( (LEFT_PAREN (or_key|and_key))=> lhs_or //prevent "((" 
+		| LEFT_PAREN lhs_or RIGHT_PAREN
+	        | lhs_pattern
+	        )
+	        -> ^(exists_key lhs_or? lhs_pattern?  )
+	;
+	
+lhs_not	:	not_key
+		( (LEFT_PAREN (or_key|and_key))=> lhs_or //prevent "((" 
+		|	LEFT_PAREN lhs_or RIGHT_PAREN 
+		| 	lhs_pattern )
+	        -> ^(not_key lhs_or? lhs_pattern?)
+	;
+
+lhs_eval
+	:	eval_key paren_chunk
+		-> ^(eval_key paren_chunk)
+	;
+
+lhs_forall
+	:	forall_key LEFT_PAREN lhs_pattern+ RIGHT_PAREN
+		-> ^(forall_key lhs_pattern+)
+	;
+
+pattern_source
+options { k=3;}
+	:	lhs_pattern
+		(
+			from_key^
+		        (  accumulate_statement
+		          | collect_statement 
+		          | entrypoint_statement
+		          | from_source
+		        )
+		)?
+	;
+
+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?)
+	;
+
+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))
+	;
+
+accumulate_id_clause
+	:	id=ID text=paren_chunk
+	-> ^(VT_ACCUMULATE_ID_CLAUSE ID paren_chunk)
+	;
+
+collect_statement
+	:	collect_key
+		LEFT_PAREN pattern_source RIGHT_PAREN
+	-> ^(collect_key pattern_source)
+	;
+
+entrypoint_statement
+	:	entry_point_key name
+	-> ^(entry_point_key name)
+	;
+
+from_source
+	:	ID
+		( (LEFT_PAREN)=> args=paren_chunk )?
+		expression_chain?
+	->	^(VT_FROM_SOURCE ID paren_chunk? expression_chain?)
+	;
+	
+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?)
+	;
+
+lhs_pattern
+	:	fact_binding -> ^(VT_PATTERN fact_binding)
+	|	fact -> ^(VT_PATTERN fact)
+	;
+
+fact_binding
+ 	:	label
+		( fact
+ 		| LEFT_PAREN fact_binding_expression RIGHT_PAREN
+ 		)
+ 	-> ^(VT_FACT_BINDING label fact? fact_binding_expression?)
+	;
+
+fact_binding_expression
+ at init{
+	Token orToken = null;
+}	:	(fact -> fact) ( (value=or_key {orToken = $value.start;}|pipe=DOUBLE_PIPE {orToken = $pipe;}) fact 
+		-> ^(VT_FACT_OR[orToken] $fact_binding_expression fact) )*
+	;
+
+fact
+	:	qualified_id LEFT_PAREN constraints? RIGHT_PAREN
+	->	^(VT_FACT qualified_id constraints?)
+	;
+
+constraints
+	:	constraint ( COMMA! constraint )*
+	;
+
+constraint
+	:	or_constr
+	;
+
+or_constr
+	:	and_constr ( DOUBLE_PIPE^ and_constr )* 
+	;
+
+and_constr
+	:	unary_constr ( DOUBLE_AMPER^ unary_constr )*
+	;
+
+unary_constr
+options {k=2;}
+	:	eval_key paren_chunk -> ^(eval_key paren_chunk)
+	|	field_constraint
+	|	LEFT_PAREN or_constr RIGHT_PAREN -> or_constr
+	;
+
+//STOPED HERE
+field_constraint
+ at init{
+	boolean isArrow = false;
+}	:	label accessor_path ( or_restr_connective | arw=ARROW paren_chunk {isArrow = true;})?
+		-> {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)
+	;
+
+label	:	value=ID COLON -> VT_LABEL[$value]
+	;
+
+or_restr_connective
+	:	and_restr_connective (options{backtrack=true;}:  DOUBLE_PIPE^ and_restr_connective )* 
+	;
+
+and_restr_connective
+	:	constraint_expression (options{backtrack=true;}:  DOUBLE_AMPER^ constraint_expression )*
+	;
+
+constraint_expression
+options{
+k=3;
+}	:	compound_operator
+	|	simple_operator
+	|	LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective
+	;
+
+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
+	;
+
+//Simple Syntax Sugar
+compound_operator 
+	:	( in_key^ | not_key in_key^ ) LEFT_PAREN! expression_value ( COMMA! expression_value )* RIGHT_PAREN!
+	;
+
+expression_value
+	:	accessor_path
+	|	literal_constraint 
+	|	paren_chunk
+	;
+
+literal_constraint
+	:	STRING
+	|	INT
+	|	FLOAT
+	|	BOOL
+	|	NULL
+	;
+
+qualified_id
+	:	ID ( DOT ID )* ( LEFT_SQUARE RIGHT_SQUARE )* 
+	-> ^(VT_QUALIFIED_ID ID+)
+	;
+
+accessor_path
+	:	accessor_element ( DOT accessor_element )*
+	-> ^(VT_ACCESSOR_PATH accessor_element+)
+	;
+
+accessor_element
+	:	ID square_chunk*
+	-> ^(VT_ACCESSOR_ELEMENT ID square_chunk*)
+	;
+
+name
+	: 	value=ID	-> VT_NAME[$value]
+	| 	value=STRING	-> VT_NAME[$value]
+	;
+
+curly_chunk
+ at init{
+	String text = "";
+}	:	cc=curly_chunk_data {text = $cc.text;}
+	-> VT_CURLY_CHUNK[$cc.start,text]
+	;
+
+curly_chunk_data
+	:	LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+	;
+	
+paren_chunk
+ at init{
+	String text = "";
+}	:	pc=paren_chunk_data {text = $pc.text;} 
+	-> VT_PAREN_CHUNK[$pc.start,text]
+	;
+
+paren_chunk_data
+	:	value=LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN 
+	;
+
+square_chunk
+ at init{
+	String text = "";
+}	:	sc=square_chunk_data {text = $sc.text;}
+	-> VT_SQUARE_CHUNK[$sc.start,text]
+	;
+
+square_chunk_data
+	:	value=LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+	;
+
+eval_key
+	:	{(validateIdentifierKey("eval"))}?=>  id=ID	->	VK_EVAL[$id]
+	;
+
+contains_key
+	:	{(validateIdentifierKey("contains"))}?=>  id=ID	->	VK_CONTAINS[$id]
+	;
+
+matches_key
+	:	{(validateIdentifierKey("matches"))}?=>  id=ID	->	VK_MATCHES[$id]
+	;
+
+excludes_key
+	:	{(validateIdentifierKey("excludes"))}?=>  id=ID	->	VK_EXCLUDES[$id]
+	;
+
+soundslike_key
+	:	{(validateIdentifierKey("soundslike"))}?=>  id=ID	->	VK_SOUNDSLIKE[$id]
+	;
+
+memberof_key
+	:	{(validateIdentifierKey("memberof"))}?=>  id=ID	->	VK_MEMBEROF[$id]
+	;
+
+not_key
+	:	{(validateIdentifierKey("not"))}?=>  id=ID	->	VK_NOT[$id]
+	;
+
+in_key
+	:	{(validateIdentifierKey("in"))}?=>  id=ID	->	VK_IN[$id]
+	;
+
+or_key
+	:	{(validateIdentifierKey("or"))}?=>  id=ID	->	VK_OR[$id]
+	;
+
+and_key
+	:	{(validateIdentifierKey("and"))}?=>  id=ID	->	VK_AND[$id]
+	;
+
+exists_key
+	:	{(validateIdentifierKey("exists"))}?=>  id=ID	->	VK_EXISTS[$id]
+	;
+
+forall_key
+	:	{(validateIdentifierKey("forall"))}?=>  id=ID	->	VK_FORALL[$id]
+	;
+
+from_key
+	:	{(validateIdentifierKey("from"))}?=>  id=ID	->	VK_FROM[$id]
+	;
+
+entry_point_key
+ at init{
+	String text = "";
+}	:	{(validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point"))}?=>  ID MISC ID {text = $text;}
+	->	VK_ENTRY_POINT[$start, text]
+	;
+
+accumulate_key
+	:	{(validateIdentifierKey("accumulate"))}?=>  id=ID	->	VK_ACCUMULATE[$id]
+	;
+
+init_key
+	:	{(validateIdentifierKey("init"))}?=>  id=ID	->	VK_INIT[$id]
+	;
+
+action_key
+	:	{(validateIdentifierKey("action"))}?=>  id=ID	->	VK_ACTION[$id]
+	;
+
+reverse_key
+	:	{(validateIdentifierKey("reverse"))}?=>  id=ID	->	VK_REVERSE[$id]
+	;
+
+result_key
+	:	{(validateIdentifierKey("result"))}?=>  id=ID	->	VK_RESULT[$id]
+	;
+
+collect_key
+	:	{(validateIdentifierKey("collect"))}?=>  id=ID	->	VK_COLLECT[$id]
+	;
+
+WS      :       (	' '
+                |	'\t'
+                |	'\f'
+                |	EOL
+                )+
+                { $channel=HIDDEN; }
+        ;
+
+fragment
+EOL 	:	     
+   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
+                |       '\r'    // Macintosh
+                |       '\n'    // Unix (the right way)
+                )
+        ;
+        
+INT	
+	:	('-')?('0'..'9')+
+		;
+
+FLOAT
+	:	('-')?('0'..'9')+ '.' ('0'..'9')+
+	;
+
+STRING
+    :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
+     | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
+    ;
+
+fragment
+HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
+
+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
+    ;
+
+fragment
+OctalEscape
+    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7')
+    ;
+
+fragment
+UnicodeEscape
+    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
+    ;
+
+BOOL
+	:	('true'|'false') 
+	;	
+
+NULL	:	'null';
+
+SEMICOLON
+	:	';'
+	;
+
+COLON
+	:	':'
+	;
+
+
+EQUAL
+	:	'=='
+	;
+
+NOT_EQUAL
+	:	'!='
+	;
+
+GREATER
+	:	'>'
+	;
+
+GREATER_EQUAL
+	:	'>='
+	;
+
+LESS
+	:	'<'
+	;
+
+LESS_EQUAL
+	:	'<='
+	;
+
+ARROW
+	:	'->'
+	;
+
+ID	
+	:	('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')* 
+	;
+		
+LEFT_PAREN
+        :	'('
+        ;
+
+RIGHT_PAREN
+        :	')'
+        ;
+        
+LEFT_SQUARE
+        :	'['
+        ;
+
+RIGHT_SQUARE
+        :	']'
+        ;        
+
+LEFT_CURLY
+        :	'{'
+        ;
+
+RIGHT_CURLY
+        :	'}'
+        ;
+        
+COMMA	:	','
+	;
+	
+DOT	:	'.'
+	;	
+	
+DOUBLE_AMPER
+	:	'&&'
+	;
+	
+DOUBLE_PIPE
+	:	'||'
+	;				
+	
+TILDE	:	'~';	
+
+SH_STYLE_SINGLE_LINE_COMMENT	
+	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
+                { $channel=HIDDEN; setText("//"+getText().substring(1));}
+	;
+        
+        
+C_STYLE_SINGLE_LINE_COMMENT	
+	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
+                { $channel=HIDDEN; }
+	;
+
+MULTI_LINE_COMMENT
+	:	'/*' (options{greedy=false;} : .)* '*/'
+                { $channel=HIDDEN; }
+	;
+
+MISC 	:
+		'!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '=' | '/' | '\'' | '\\' | '|' | '&'
+	;
\ No newline at end of file


Property changes on: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/NewDRL.g
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g	2008-04-28 17:05:28 UTC (rev 19745)
@@ -0,0 +1,94 @@
+tree grammar TreeNewDRL;
+
+options{
+	tokenVocab=NewDRL;
+	ASTLabelType=CommonTree;
+}
+
+lhs_block
+	:	^(VT_AND_IMPLICIT lhs*)
+	;
+
+lhs	:	^(VT_OR_PREFIX lhs+)
+	|	^(VT_OR_INFIX lhs lhs)
+	|	^(VT_AND_PREFIX lhs+)
+	|	^(VT_AND_INFIX lhs lhs)
+	|	^(VK_EXISTS lhs)
+	|	^(VK_NOT lhs )
+	|	^(VK_EVAL VT_PAREN_CHUNK)
+	|	^(VK_FORALL lhs+)
+	|	^(VK_FROM lhs_pattern from_elements)
+	|	lhs_pattern
+	;
+
+from_elements
+	:	^(VK_ACCUMULATE lhs (accumulate_init_clause|accumulate_id_clause))
+	|	^(VK_COLLECT lhs)
+	|	^(VK_ENTRY_POINT VT_NAME)
+	|	^(VT_FROM_SOURCE ID VT_PAREN_CHUNK? expression_chain?)
+	;
+
+accumulate_init_clause
+	:	^(VT_ACCUMULATE_INIT_CLAUSE 
+			^(VK_INIT VT_PAREN_CHUNK) 
+			^(VK_ACTION VT_PAREN_CHUNK) 
+			accumulate_init_reverse_clause?
+			^(VK_RESULT VT_PAREN_CHUNK))
+	;
+
+accumulate_init_reverse_clause
+	:	^(VK_REVERSE VT_PAREN_CHUNK)
+	;
+
+
+accumulate_id_clause
+	:	^(VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK)
+	;
+
+lhs_pattern
+	:	^(VT_PATTERN fact_expression)
+	;
+
+fact_expression
+	:	^(DOUBLE_PIPE fact_expression fact_expression)
+	|	^(DOUBLE_AMPER fact_expression fact_expression)
+	|	^(VT_FACT_BINDING VT_LABEL fact_expression)
+	|	^(VT_FACT ^(VT_QUALIFIED_ID ID+) fact_expression*)
+	|	^(VT_FACT_OR fact_expression fact_expression)
+	|	^(VK_EVAL VT_PAREN_CHUNK)
+	|	^(VK_IN VK_NOT? fact_expression+)
+	|	^(EQUAL fact_expression)
+	|	^(GREATER fact_expression)
+	|	^(GREATER_EQUAL fact_expression)
+	|	^(LESS fact_expression)
+	|	^(LESS_EQUAL fact_expression)
+	|	^(NOT_EQUAL fact_expression)
+	|	^(VK_CONTAINS VK_NOT? fact_expression)
+	|	^(VK_EXCLUDES VK_NOT? fact_expression)
+	|	^(VK_MATCHES VK_NOT? fact_expression)
+	|	^(VK_SOUNDSLIKE VK_NOT? fact_expression)
+	|	^(VK_MEMBEROF VK_NOT? fact_expression)
+	|	^(ID VK_NOT? VT_SQUARE_CHUNK fact_expression)
+	|	^(VT_BIND_FIELD VT_LABEL fact_expression)
+	|	^(VT_FIELD ^(VT_ACCESSOR_PATH accessor_element+) fact_expression?)
+	|	^(VT_ACCESSOR_PATH accessor_element+)
+	|	STRING
+	|	INT
+	|	FLOAT
+	|	BOOL
+	|	NULL
+	|	VT_PAREN_CHUNK
+	;
+
+
+accessor_element
+	:	^(VT_ACCESSOR_ELEMENT ID VT_SQUARE_CHUNK*)
+	;
+
+expression_chain
+	:	^(VT_EXPRESSION_CHAIN ID VT_SQUARE_CHUNK? VT_PAREN_CHUNK? expression_chain?)	
+	;
+
+curly_chunk
+	:	VT_CURLY_CHUNK
+	;
\ No newline at end of file


Property changes on: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/TreeNewDRL.g
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list