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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 19 13:52:26 EDT 2008


Author: porcelli
Date: 2008-05-19 13:52:26 -0400 (Mon, 19 May 2008)
New Revision: 20052

Added:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
Log:
Tree walker to be used on tests.

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2008-05-19 17:52:26 UTC (rev 20052)
@@ -0,0 +1,3482 @@
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g 2008-05-19 14:24:33
+
+	package org.drools.lang;
+
+
+import org.antlr.runtime.BitSet;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.tree.TreeNodeStream;
+import org.antlr.runtime.tree.TreeParser;
+
+public class Tree2TestDRL extends TreeParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE", "VK_IMPORT", "VK_P!
 ACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+    };
+    public static final int COMMA=91;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
+    public static final int VK_FUNCTION=62;
+    public static final int VK_DIALECT=51;
+    public static final int END=88;
+    public static final int HexDigit=116;
+    public static final int VK_ATTRIBUTES=54;
+    public static final int VT_EXPRESSION_CHAIN=28;
+    public static final int VK_ACCUMULATE=78;
+    public static final int MISC=112;
+    public static final int VT_AND_PREFIX=21;
+    public static final int VK_QUERY=60;
+    public static final int THEN=109;
+    public static final int VK_AUTO_FOCUS=46;
+    public static final int DOT=86;
+    public static final int VK_IMPORT=57;
+    public static final int VT_SLOT=14;
+    public static final int VT_PACKAGE_ID=37;
+    public static final int LEFT_SQUARE=107;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_DATA_TYPE=36;
+    public static final int VK_MATCHES=66;
+    public static final int VT_FACT=6;
+    public static final int LEFT_CURLY=110;
+    public static final int LEFT_PAREN=90;
+    public static final int DOUBLE_AMPER=97;
+    public static final int VT_QUERY_ID=9;
+    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_LABEL=8;
+    public static final int VT_ENTRYPOINT_ID=12;
+    public static final int VK_SOUNDSLIKE=68;
+    public static final int VK_SALIENCE=52;
+    public static final int VT_FIELD=33;
+    public static final int WS=114;
+    public static final int STRING=89;
+    public static final int VK_AND=74;
+    public static final int VT_ACCESSOR_ELEMENT=35;
+    public static final int VK_REVERSE=81;
+    public static final int VK_GLOBAL=63;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
+    public static final int VK_DURATION=50;
+    public static final int VT_SQUARE_CHUNK=18;
+    public static final int VK_FORALL=76;
+    public static final int VT_COMPILATION_UNIT=4;
+    public static final int VT_PAREN_CHUNK=19;
+    public static final int VK_ENABLED=53;
+    public static final int VK_RESULT=82;
+    public static final int UnicodeEscape=117;
+    public static final int VK_PACKAGE=58;
+    public static final int VT_RULE_ID=11;
+    public static final int EQUAL=99;
+    public static final int VK_NO_LOOP=45;
+    public static final int SEMICOLON=84;
+    public static final int VK_TEMPLATE=59;
+    public static final int VT_AND_IMPLICIT=20;
+    public static final int NULL=106;
+    public static final int COLON=93;
+    public static final int MULTI_LINE_COMMENT=121;
+    public static final int VT_RULE_ATTRIBUTES=15;
+    public static final int RIGHT_SQUARE=108;
+    public static final int VK_AGENDA_GROUP=48;
+    public static final int VT_FACT_OR=31;
+    public static final int VK_NOT=71;
+    public static final int VK_DATE_EXPIRES=43;
+    public static final int ARROW=98;
+    public static final int FLOAT=105;
+    public static final int VT_SLOT_ID=13;
+    public static final int VT_CURLY_CHUNK=17;
+    public static final int VT_OR_PREFIX=22;
+    public static final int DOUBLE_PIPE=96;
+    public static final int LESS=102;
+    public static final int VT_PATTERN=29;
+    public static final int VK_DATE_EFFECTIVE=42;
+    public static final int EscapeSequence=115;
+    public static final int VK_EXISTS=75;
+    public static final int INT=95;
+    public static final int VT_BIND_FIELD=32;
+    public static final int VK_RULE=56;
+    public static final int VK_EVAL=64;
+    public static final int VK_COLLECT=83;
+    public static final int GREATER=100;
+    public static final int VT_FACT_BINDING=30;
+    public static final int ID=85;
+    public static final int NOT_EQUAL=104;
+    public static final int RIGHT_CURLY=111;
+    public static final int VK_ENTRY_POINT=70;
+    public static final int BOOL=94;
+    public static final int VT_PARAM_LIST=41;
+    public static final int VT_AND_INFIX=23;
+    public static final int VT_FROM_SOURCE=27;
+    public static final int VK_CONTAINS=65;
+    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VT_FUNCTION_IMPORT=5;
+    public static final int VK_IN=72;
+    public static final int VT_RHS_CHUNK=16;
+    public static final int VK_MEMBEROF=69;
+    public static final int GREATER_EQUAL=101;
+    public static final int VT_OR_INFIX=24;
+    public static final int DOT_STAR=87;
+    public static final int VK_OR=73;
+    public static final int VT_GLOBAL_ID=39;
+    public static final int LESS_EQUAL=103;
+    public static final int VK_WHEN=55;
+    public static final int VK_RULEFLOW_GROUP=49;
+    public static final int VT_FUNCTION_ID=40;
+    public static final int EOF=-1;
+    public static final int VT_CONSTRAINTS=7;
+    public static final int VT_IMPORT_ID=38;
+    public static final int EOL=113;
+    public static final int VK_INIT=79;
+    public static final int VK_ACTIVATION_GROUP=47;
+    public static final int OctalEscape=118;
+    public static final int VK_ACTION=80;
+    public static final int VK_FROM=77;
+    public static final int VK_EXCLUDES=67;
+    public static final int RIGHT_PAREN=92;
+    public static final int VT_TEMPLATE_ID=10;
+    public static final int VK_DECLARE=61;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
+
+        public Tree2TestDRL(TreeNodeStream input) {
+            super(input);
+        }
+        
+
+    public String[] getTokenNames() { return tokenNames; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g"; }
+
+
+
+    // $ANTLR start compilation_unit
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:13:1: compilation_unit : ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    public final void compilation_unit() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:2: ( ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:4: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            {
+            match(input,VT_COMPILATION_UNIT,FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit43); 
+
+            if ( input.LA(1)==Token.DOWN ) {
+                match(input, Token.DOWN, null); 
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: ( package_statement )?
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==VK_PACKAGE) ) {
+                    alt1=1;
+                }
+                switch (alt1) {
+                    case 1 :
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: package_statement
+                        {
+                        pushFollow(FOLLOW_package_statement_in_compilation_unit45);
+                        package_statement();
+                        _fsp--;
+
+
+                        }
+                        break;
+
+                }
+
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: ( statement )*
+                loop2:
+                do {
+                    int alt2=2;
+                    int LA2_0 = input.LA(1);
+
+                    if ( (LA2_0==VT_FUNCTION_IMPORT||(LA2_0>=VK_DATE_EFFECTIVE && LA2_0<=VK_ENABLED)||(LA2_0>=VK_RULE && LA2_0<=VK_IMPORT)||(LA2_0>=VK_TEMPLATE && LA2_0<=VK_QUERY)||(LA2_0>=VK_FUNCTION && LA2_0<=VK_GLOBAL)) ) {
+                        alt2=1;
+                    }
+
+
+                    switch (alt2) {
+                	case 1 :
+                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: statement
+                	    {
+                	    pushFollow(FOLLOW_statement_in_compilation_unit48);
+                	    statement();
+                	    _fsp--;
+
+
+                	    }
+                	    break;
+
+                	default :
+                	    break loop2;
+                    }
+                } while (true);
+
+
+                match(input, Token.UP, null); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end compilation_unit
+
+
+    // $ANTLR start package_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:17:1: package_statement : ^( VK_PACKAGE package_id ) ;
+    public final void package_statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:18:2: ( ^( VK_PACKAGE package_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:18:4: ^( VK_PACKAGE package_id )
+            {
+            match(input,VK_PACKAGE,FOLLOW_VK_PACKAGE_in_package_statement63); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_package_id_in_package_statement65);
+            package_id();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end package_statement
+
+
+    // $ANTLR start package_id
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:21:1: package_id : ^( VT_PACKAGE_ID ( ID )+ ) ;
+    public final void package_id() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:2: ( ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:4: ^( VT_PACKAGE_ID ( ID )+ )
+            {
+            match(input,VT_PACKAGE_ID,FOLLOW_VT_PACKAGE_ID_in_package_id78); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:20: ( ID )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0==ID) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:20: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_package_id80); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end package_id
+
+
+    // $ANTLR start statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query );
+    public final void statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:26:2: ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query )
+            int alt4=8;
+            switch ( input.LA(1) ) {
+            case VK_DATE_EFFECTIVE:
+            case VK_DATE_EXPIRES:
+            case VK_LOCK_ON_ACTIVE:
+            case VK_NO_LOOP:
+            case VK_AUTO_FOCUS:
+            case VK_ACTIVATION_GROUP:
+            case VK_AGENDA_GROUP:
+            case VK_RULEFLOW_GROUP:
+            case VK_DURATION:
+            case VK_DIALECT:
+            case VK_SALIENCE:
+            case VK_ENABLED:
+                {
+                alt4=1;
+                }
+                break;
+            case VT_FUNCTION_IMPORT:
+                {
+                alt4=2;
+                }
+                break;
+            case VK_IMPORT:
+                {
+                alt4=3;
+                }
+                break;
+            case VK_GLOBAL:
+                {
+                alt4=4;
+                }
+                break;
+            case VK_FUNCTION:
+                {
+                alt4=5;
+                }
+                break;
+            case VK_TEMPLATE:
+                {
+                alt4=6;
+                }
+                break;
+            case VK_RULE:
+                {
+                alt4=7;
+                }
+                break;
+            case VK_QUERY:
+                {
+                alt4=8;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query );", 4, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt4) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:26:4: rule_attribute
+                    {
+                    pushFollow(FOLLOW_rule_attribute_in_statement93);
+                    rule_attribute();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:27:4: function_import_statement
+                    {
+                    pushFollow(FOLLOW_function_import_statement_in_statement98);
+                    function_import_statement();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:28:4: import_statement
+                    {
+                    pushFollow(FOLLOW_import_statement_in_statement104);
+                    import_statement();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:29:4: global
+                    {
+                    pushFollow(FOLLOW_global_in_statement110);
+                    global();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:30:4: function
+                    {
+                    pushFollow(FOLLOW_function_in_statement116);
+                    function();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:31:4: template
+                    {
+                    pushFollow(FOLLOW_template_in_statement121);
+                    template();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:32:4: rule
+                    {
+                    pushFollow(FOLLOW_rule_in_statement126);
+                    rule();
+                    _fsp--;
+
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:33:4: query
+                    {
+                    pushFollow(FOLLOW_query_in_statement131);
+                    query();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end statement
+
+
+    // $ANTLR start import_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:36:1: import_statement : ^( VK_IMPORT import_name ) ;
+    public final void import_statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:37:2: ( ^( VK_IMPORT import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:37:4: ^( VK_IMPORT import_name )
+            {
+            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement143); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_import_name_in_import_statement145);
+            import_name();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end import_statement
+
+
+    // $ANTLR start function_import_statement
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:40:1: function_import_statement : ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) ;
+    public final void function_import_statement() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:41:2: ( ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:41:4: ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name )
+            {
+            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement158); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement160); 
+            pushFollow(FOLLOW_import_name_in_function_import_statement162);
+            import_name();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end function_import_statement
+
+
+    // $ANTLR start import_name
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:44:1: import_name : ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    public final void import_name() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:2: ( ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:4: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            {
+            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name175); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:19: ( ID )+
+            int cnt5=0;
+            loop5:
+            do {
+                int alt5=2;
+                int LA5_0 = input.LA(1);
+
+                if ( (LA5_0==ID) ) {
+                    alt5=1;
+                }
+
+
+                switch (alt5) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:19: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_import_name177); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt5 >= 1 ) break loop5;
+                        EarlyExitException eee =
+                            new EarlyExitException(5, input);
+                        throw eee;
+                }
+                cnt5++;
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:23: ( DOT_STAR )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==DOT_STAR) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:23: DOT_STAR
+                    {
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name180); 
+
+                    }
+                    break;
+
+            }
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end import_name
+
+
+    // $ANTLR start global
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:48:1: global : ^( VK_GLOBAL data_type VT_GLOBAL_ID ) ;
+    public final void global() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:49:2: ( ^( VK_GLOBAL data_type VT_GLOBAL_ID ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:49:4: ^( VK_GLOBAL data_type VT_GLOBAL_ID )
+            {
+            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global194); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_data_type_in_global196);
+            data_type();
+            _fsp--;
+
+            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global198); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end global
+
+
+    // $ANTLR start function
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:52:1: function : ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) ;
+    public final void function() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:2: ( ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:4: ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk )
+            {
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function211); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:18: ( data_type )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==VT_DATA_TYPE) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:18: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_function213);
+                    data_type();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function216); 
+            pushFollow(FOLLOW_parameters_in_function218);
+            parameters();
+            _fsp--;
+
+            pushFollow(FOLLOW_curly_chunk_in_function220);
+            curly_chunk();
+            _fsp--;
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end function
+
+
+    // $ANTLR start query
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:56:1: query : ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END ) ;
+    public final void query() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:2: ( ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:4: ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END )
+            {
+            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query233); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query235); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:27: ( parameters )?
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==VT_PARAM_LIST) ) {
+                alt8=1;
+            }
+            switch (alt8) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:27: parameters
+                    {
+                    pushFollow(FOLLOW_parameters_in_query237);
+                    parameters();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_lhs_block_in_query240);
+            lhs_block();
+            _fsp--;
+
+            match(input,END,FOLLOW_END_in_query242); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end query
+
+
+    // $ANTLR start parameters
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:60:1: parameters : ^( VT_PARAM_LIST ( param_definition )* ) ;
+    public final void parameters() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:2: ( ^( VT_PARAM_LIST ( param_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:4: ^( VT_PARAM_LIST ( param_definition )* )
+            {
+            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters255); 
+
+            if ( input.LA(1)==Token.DOWN ) {
+                match(input, Token.DOWN, null); 
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:20: ( param_definition )*
+                loop9:
+                do {
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0==VT_DATA_TYPE||LA9_0==ID) ) {
+                        alt9=1;
+                    }
+
+
+                    switch (alt9) {
+                	case 1 :
+                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:20: param_definition
+                	    {
+                	    pushFollow(FOLLOW_param_definition_in_parameters257);
+                	    param_definition();
+                	    _fsp--;
+
+
+                	    }
+                	    break;
+
+                	default :
+                	    break loop9;
+                    }
+                } while (true);
+
+
+                match(input, Token.UP, null); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end parameters
+
+
+    // $ANTLR start param_definition
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:64:1: param_definition : ( data_type )? argument ;
+    public final void param_definition() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:4: ( data_type )? argument
+            {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:4: ( data_type )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==VT_DATA_TYPE) ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:4: data_type
+                    {
+                    pushFollow(FOLLOW_data_type_in_param_definition270);
+                    data_type();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_argument_in_param_definition273);
+            argument();
+            _fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end param_definition
+
+
+    // $ANTLR start argument
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:68:1: argument : ID ( dimension_definition )* ;
+    public final void argument() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:4: ID ( dimension_definition )*
+            {
+            match(input,ID,FOLLOW_ID_in_argument284); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:7: ( dimension_definition )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==LEFT_SQUARE) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:7: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_argument286);
+            	    dimension_definition();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end argument
+
+
+    // $ANTLR start template
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:73:1: template : ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END ) ;
+    public final void template() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:2: ( ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:4: ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END )
+            {
+            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template300); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template302); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:33: ( template_slot )+
+            int cnt12=0;
+            loop12:
+            do {
+                int alt12=2;
+                int LA12_0 = input.LA(1);
+
+                if ( (LA12_0==VT_SLOT) ) {
+                    alt12=1;
+                }
+
+
+                switch (alt12) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:33: template_slot
+            	    {
+            	    pushFollow(FOLLOW_template_slot_in_template304);
+            	    template_slot();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt12 >= 1 ) break loop12;
+                        EarlyExitException eee =
+                            new EarlyExitException(12, input);
+                        throw eee;
+                }
+                cnt12++;
+            } while (true);
+
+            match(input,END,FOLLOW_END_in_template307); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end template
+
+
+    // $ANTLR start template_slot
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:77:1: template_slot : ^( VT_SLOT data_type VT_SLOT_ID ) ;
+    public final void template_slot() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:78:2: ( ^( VT_SLOT data_type VT_SLOT_ID ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:78:4: ^( VT_SLOT data_type VT_SLOT_ID )
+            {
+            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot320); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_data_type_in_template_slot322);
+            data_type();
+            _fsp--;
+
+            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot324); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end template_slot
+
+
+    // $ANTLR start rule
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:81:1: rule : ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) ;
+    public final void rule() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:2: ( ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:4: ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK )
+            {
+            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule337); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule339); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:25: ( rule_attributes )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==VT_RULE_ATTRIBUTES) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:25: rule_attributes
+                    {
+                    pushFollow(FOLLOW_rule_attributes_in_rule341);
+                    rule_attributes();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:42: ( when_part )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==VK_WHEN) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:42: when_part
+                    {
+                    pushFollow(FOLLOW_when_part_in_rule344);
+                    when_part();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule347); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end rule
+
+
+    // $ANTLR start when_part
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:85:1: when_part : VK_WHEN lhs_block ;
+    public final void when_part() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:86:2: ( VK_WHEN lhs_block )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:86:4: VK_WHEN lhs_block
+            {
+            match(input,VK_WHEN,FOLLOW_VK_WHEN_in_when_part359); 
+            pushFollow(FOLLOW_lhs_block_in_when_part361);
+            lhs_block();
+            _fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end when_part
+
+
+    // $ANTLR start rule_attributes
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:89:1: rule_attributes : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) ;
+    public final void rule_attributes() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:2: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:4: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ )
+            {
+            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes373); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:25: ( VK_ATTRIBUTES )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==VK_ATTRIBUTES) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:25: VK_ATTRIBUTES
+                    {
+                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes375); 
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:40: ( rule_attribute )+
+            int cnt16=0;
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( ((LA16_0>=VK_DATE_EFFECTIVE && LA16_0<=VK_ENABLED)) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:40: rule_attribute
+            	    {
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes378);
+            	    rule_attribute();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt16 >= 1 ) break loop16;
+                        EarlyExitException eee =
+                            new EarlyExitException(16, input);
+                        throw eee;
+                }
+                cnt16++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end rule_attributes
+
+
+    // $ANTLR start rule_attribute
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:93:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );
+    public final void rule_attribute() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:94:2: ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) )
+            int alt20=12;
+            switch ( input.LA(1) ) {
+            case VK_SALIENCE:
+                {
+                alt20=1;
+                }
+                break;
+            case VK_NO_LOOP:
+                {
+                alt20=2;
+                }
+                break;
+            case VK_AGENDA_GROUP:
+                {
+                alt20=3;
+                }
+                break;
+            case VK_DURATION:
+                {
+                alt20=4;
+                }
+                break;
+            case VK_ACTIVATION_GROUP:
+                {
+                alt20=5;
+                }
+                break;
+            case VK_AUTO_FOCUS:
+                {
+                alt20=6;
+                }
+                break;
+            case VK_DATE_EFFECTIVE:
+                {
+                alt20=7;
+                }
+                break;
+            case VK_DATE_EXPIRES:
+                {
+                alt20=8;
+                }
+                break;
+            case VK_ENABLED:
+                {
+                alt20=9;
+                }
+                break;
+            case VK_RULEFLOW_GROUP:
+                {
+                alt20=10;
+                }
+                break;
+            case VK_LOCK_ON_ACTIVE:
+                {
+                alt20=11;
+                }
+                break;
+            case VK_DIALECT:
+                {
+                alt20=12;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("93:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );", 20, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt20) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:94:4: ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) )
+                    {
+                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute392); 
+
+                    match(input, Token.DOWN, null); 
+                    if ( input.LA(1)==VT_PAREN_CHUNK||input.LA(1)==INT ) {
+                        input.consume();
+                        errorRecovery=false;
+                    }
+                    else {
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rule_attribute394);    throw mse;
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:95:4: ^( VK_NO_LOOP ( BOOL )? )
+                    {
+                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute406); 
+
+                    if ( input.LA(1)==Token.DOWN ) {
+                        match(input, Token.DOWN, null); 
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:95:17: ( BOOL )?
+                        int alt17=2;
+                        int LA17_0 = input.LA(1);
+
+                        if ( (LA17_0==BOOL) ) {
+                            alt17=1;
+                        }
+                        switch (alt17) {
+                            case 1 :
+                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:95:17: BOOL
+                                {
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute408); 
+
+                                }
+                                break;
+
+                        }
+
+
+                        match(input, Token.UP, null); 
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:96:4: ^( VK_AGENDA_GROUP STRING )
+                    {
+                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute418); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute420); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:97:4: ^( VK_DURATION INT )
+                    {
+                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute429); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,INT,FOLLOW_INT_in_rule_attribute431); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:4: ^( VK_ACTIVATION_GROUP STRING )
+                    {
+                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute441); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute443); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:99:4: ^( VK_AUTO_FOCUS ( BOOL )? )
+                    {
+                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute451); 
+
+                    if ( input.LA(1)==Token.DOWN ) {
+                        match(input, Token.DOWN, null); 
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:99:20: ( BOOL )?
+                        int alt18=2;
+                        int LA18_0 = input.LA(1);
+
+                        if ( (LA18_0==BOOL) ) {
+                            alt18=1;
+                        }
+                        switch (alt18) {
+                            case 1 :
+                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:99:20: BOOL
+                                {
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute453); 
+
+                                }
+                                break;
+
+                        }
+
+
+                        match(input, Token.UP, null); 
+                    }
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:100:4: ^( VK_DATE_EFFECTIVE STRING )
+                    {
+                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute462); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute464); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:101:4: ^( VK_DATE_EXPIRES STRING )
+                    {
+                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute472); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute474); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:102:4: ^( VK_ENABLED BOOL )
+                    {
+                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute482); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute484); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:103:4: ^( VK_RULEFLOW_GROUP STRING )
+                    {
+                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute492); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute494); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:104:4: ^( VK_LOCK_ON_ACTIVE ( BOOL )? )
+                    {
+                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute502); 
+
+                    if ( input.LA(1)==Token.DOWN ) {
+                        match(input, Token.DOWN, null); 
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:104:24: ( BOOL )?
+                        int alt19=2;
+                        int LA19_0 = input.LA(1);
+
+                        if ( (LA19_0==BOOL) ) {
+                            alt19=1;
+                        }
+                        switch (alt19) {
+                            case 1 :
+                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:104:24: BOOL
+                                {
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute504); 
+
+                                }
+                                break;
+
+                        }
+
+
+                        match(input, Token.UP, null); 
+                    }
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:105:4: ^( VK_DIALECT STRING )
+                    {
+                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute512); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute514); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end rule_attribute
+
+
+    // $ANTLR start lhs_block
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:108:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    public final void lhs_block() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:4: ^( VT_AND_IMPLICIT ( lhs )* )
+            {
+            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block528); 
+
+            if ( input.LA(1)==Token.DOWN ) {
+                match(input, Token.DOWN, null); 
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:22: ( lhs )*
+                loop21:
+                do {
+                    int alt21=2;
+                    int LA21_0 = input.LA(1);
+
+                    if ( ((LA21_0>=VT_AND_PREFIX && LA21_0<=VT_OR_INFIX)||LA21_0==VT_PATTERN||LA21_0==VK_EVAL||LA21_0==VK_NOT||(LA21_0>=VK_EXISTS && LA21_0<=VK_FROM)) ) {
+                        alt21=1;
+                    }
+
+
+                    switch (alt21) {
+                	case 1 :
+                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:22: lhs
+                	    {
+                	    pushFollow(FOLLOW_lhs_in_lhs_block530);
+                	    lhs();
+                	    _fsp--;
+
+
+                	    }
+                	    break;
+
+                	default :
+                	    break loop21;
+                    }
+                } 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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );
+    public final void lhs() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:5: ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern )
+            int alt25=10;
+            switch ( input.LA(1) ) {
+            case VT_OR_PREFIX:
+                {
+                alt25=1;
+                }
+                break;
+            case VT_OR_INFIX:
+                {
+                alt25=2;
+                }
+                break;
+            case VT_AND_PREFIX:
+                {
+                alt25=3;
+                }
+                break;
+            case VT_AND_INFIX:
+                {
+                alt25=4;
+                }
+                break;
+            case VK_EXISTS:
+                {
+                alt25=5;
+                }
+                break;
+            case VK_NOT:
+                {
+                alt25=6;
+                }
+                break;
+            case VK_EVAL:
+                {
+                alt25=7;
+                }
+                break;
+            case VK_FORALL:
+                {
+                alt25=8;
+                }
+                break;
+            case VK_FROM:
+                {
+                alt25=9;
+                }
+                break;
+            case VT_PATTERN:
+                {
+                alt25=10;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("112:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );", 25, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt25) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:7: ^( VT_OR_PREFIX ( lhs )+ )
+                    {
+                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs543); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:22: ( lhs )+
+                    int cnt22=0;
+                    loop22:
+                    do {
+                        int alt22=2;
+                        int LA22_0 = input.LA(1);
+
+                        if ( ((LA22_0>=VT_AND_PREFIX && LA22_0<=VT_OR_INFIX)||LA22_0==VT_PATTERN||LA22_0==VK_EVAL||LA22_0==VK_NOT||(LA22_0>=VK_EXISTS && LA22_0<=VK_FROM)) ) {
+                            alt22=1;
+                        }
+
+
+                        switch (alt22) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:22: lhs
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_in_lhs545);
+                    	    lhs();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt22 >= 1 ) break loop22;
+                                EarlyExitException eee =
+                                    new EarlyExitException(22, input);
+                                throw eee;
+                        }
+                        cnt22++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:113:4: ^( VT_OR_INFIX lhs lhs )
+                    {
+                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs553); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs555);
+                    lhs();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_lhs_in_lhs557);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:4: ^( VT_AND_PREFIX ( lhs )+ )
+                    {
+                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs564); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:20: ( lhs )+
+                    int cnt23=0;
+                    loop23:
+                    do {
+                        int alt23=2;
+                        int LA23_0 = input.LA(1);
+
+                        if ( ((LA23_0>=VT_AND_PREFIX && LA23_0<=VT_OR_INFIX)||LA23_0==VT_PATTERN||LA23_0==VK_EVAL||LA23_0==VK_NOT||(LA23_0>=VK_EXISTS && LA23_0<=VK_FROM)) ) {
+                            alt23=1;
+                        }
+
+
+                        switch (alt23) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:20: lhs
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_in_lhs566);
+                    	    lhs();
+                    	    _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 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:115:4: ^( VT_AND_INFIX lhs lhs )
+                    {
+                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs574); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs576);
+                    lhs();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_lhs_in_lhs578);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:116:4: ^( VK_EXISTS lhs )
+                    {
+                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs585); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs587);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:117:4: ^( VK_NOT lhs )
+                    {
+                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs594); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_lhs596);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:118:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    {
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs603); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs605); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:4: ^( VK_FORALL ( lhs )+ )
+                    {
+                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs612); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:16: ( lhs )+
+                    int cnt24=0;
+                    loop24:
+                    do {
+                        int alt24=2;
+                        int LA24_0 = input.LA(1);
+
+                        if ( ((LA24_0>=VT_AND_PREFIX && LA24_0<=VT_OR_INFIX)||LA24_0==VT_PATTERN||LA24_0==VK_EVAL||LA24_0==VK_NOT||(LA24_0>=VK_EXISTS && LA24_0<=VK_FROM)) ) {
+                            alt24=1;
+                        }
+
+
+                        switch (alt24) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:16: lhs
+                    	    {
+                    	    pushFollow(FOLLOW_lhs_in_lhs614);
+                    	    lhs();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt24 >= 1 ) break loop24;
+                                EarlyExitException eee =
+                                    new EarlyExitException(24, input);
+                                throw eee;
+                        }
+                        cnt24++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:120:4: ^( VK_FROM lhs_pattern from_elements )
+                    {
+                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs622); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs624);
+                    lhs_pattern();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_from_elements_in_lhs626);
+                    from_elements();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:121:4: lhs_pattern
+                    {
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs632);
+                    lhs_pattern();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end lhs
+
+
+    // $ANTLR start from_elements
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:124:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );
+    public final void from_elements() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:2: ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            int alt29=4;
+            switch ( input.LA(1) ) {
+            case VK_ACCUMULATE:
+                {
+                alt29=1;
+                }
+                break;
+            case VK_COLLECT:
+                {
+                alt29=2;
+                }
+                break;
+            case VK_ENTRY_POINT:
+                {
+                alt29=3;
+                }
+                break;
+            case VT_FROM_SOURCE:
+                {
+                alt29=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("124:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );", 29, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt29) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:4: ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
+                    {
+                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements644); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_from_elements646);
+                    lhs();
+                    _fsp--;
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:24: ( accumulate_init_clause | accumulate_id_clause )
+                    int alt26=2;
+                    int LA26_0 = input.LA(1);
+
+                    if ( (LA26_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
+                        alt26=1;
+                    }
+                    else if ( (LA26_0==VT_ACCUMULATE_ID_CLAUSE) ) {
+                        alt26=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("125:24: ( accumulate_init_clause | accumulate_id_clause )", 26, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt26) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:25: accumulate_init_clause
+                            {
+                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements649);
+                            accumulate_init_clause();
+                            _fsp--;
+
+
+                            }
+                            break;
+                        case 2 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:48: accumulate_id_clause
+                            {
+                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements651);
+                            accumulate_id_clause();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:126:4: ^( VK_COLLECT lhs )
+                    {
+                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements659); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_lhs_in_from_elements661);
+                    lhs();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:127:4: ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID )
+                    {
+                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements668); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements670); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
+                    {
+                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements677); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,ID,FOLLOW_ID_in_from_elements679); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:24: ( VT_PAREN_CHUNK )?
+                    int alt27=2;
+                    int LA27_0 = input.LA(1);
+
+                    if ( (LA27_0==VT_PAREN_CHUNK) ) {
+                        alt27=1;
+                    }
+                    switch (alt27) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:24: VT_PAREN_CHUNK
+                            {
+                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements681); 
+
+                            }
+                            break;
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:40: ( expression_chain )?
+                    int alt28=2;
+                    int LA28_0 = input.LA(1);
+
+                    if ( (LA28_0==VT_EXPRESSION_CHAIN) ) {
+                        alt28=1;
+                    }
+                    switch (alt28) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:40: expression_chain
+                            {
+                            pushFollow(FOLLOW_expression_chain_in_from_elements684);
+                            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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:131:1: accumulate_init_clause : ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) ;
+    public final void accumulate_init_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:132:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:132:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) )
+            {
+            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause698); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause705); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause707); 
+
+            match(input, Token.UP, null); 
+            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause715); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause717); 
+
+            match(input, Token.UP, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:4: ( accumulate_init_reverse_clause )?
+            int alt30=2;
+            int LA30_0 = input.LA(1);
+
+            if ( (LA30_0==VK_REVERSE) ) {
+                alt30=1;
+            }
+            switch (alt30) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:4: accumulate_init_reverse_clause
+                    {
+                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause724);
+                    accumulate_init_reverse_clause();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause731); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause733); 
+
+            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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:139:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
+    public final void accumulate_init_reverse_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:140:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:140:4: ^( VK_REVERSE VT_PAREN_CHUNK )
+            {
+            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause747); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause749); 
+
+            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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
+    public final void accumulate_id_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:145:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:145:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
+            {
+            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause763); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause765); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause767); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end accumulate_id_clause
+
+
+    // $ANTLR start lhs_pattern
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:148:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ;
+    public final void lhs_pattern() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:149:2: ( ^( VT_PATTERN fact_expression ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:149:4: ^( VT_PATTERN fact_expression )
+            {
+            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern780); 
+
+            match(input, Token.DOWN, null); 
+            pushFollow(FOLLOW_fact_expression_in_lhs_pattern782);
+            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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:152:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression!
  ) | ^( VT_FIELD fact_expression ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );
+    public final void fact_expression() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:153:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT!
 _FIELD fact_expression ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK )
+            int alt43=28;
+            switch ( input.LA(1) ) {
+            case DOUBLE_PIPE:
+                {
+                alt43=1;
+                }
+                break;
+            case DOUBLE_AMPER:
+                {
+                alt43=2;
+                }
+                break;
+            case VT_FACT_BINDING:
+                {
+                alt43=3;
+                }
+                break;
+            case VT_FACT:
+                {
+                alt43=4;
+                }
+                break;
+            case VT_FACT_OR:
+                {
+                alt43=5;
+                }
+                break;
+            case VK_EVAL:
+                {
+                alt43=6;
+                }
+                break;
+            case VK_IN:
+                {
+                alt43=7;
+                }
+                break;
+            case EQUAL:
+                {
+                alt43=8;
+                }
+                break;
+            case GREATER:
+                {
+                alt43=9;
+                }
+                break;
+            case GREATER_EQUAL:
+                {
+                alt43=10;
+                }
+                break;
+            case LESS:
+                {
+                alt43=11;
+                }
+                break;
+            case LESS_EQUAL:
+                {
+                alt43=12;
+                }
+                break;
+            case NOT_EQUAL:
+                {
+                alt43=13;
+                }
+                break;
+            case VK_CONTAINS:
+                {
+                alt43=14;
+                }
+                break;
+            case VK_EXCLUDES:
+                {
+                alt43=15;
+                }
+                break;
+            case VK_MATCHES:
+                {
+                alt43=16;
+                }
+                break;
+            case VK_SOUNDSLIKE:
+                {
+                alt43=17;
+                }
+                break;
+            case VK_MEMBEROF:
+                {
+                alt43=18;
+                }
+                break;
+            case ID:
+                {
+                alt43=19;
+                }
+                break;
+            case VT_BIND_FIELD:
+                {
+                alt43=20;
+                }
+                break;
+            case VT_FIELD:
+                {
+                alt43=21;
+                }
+                break;
+            case VT_ACCESSOR_PATH:
+                {
+                alt43=22;
+                }
+                break;
+            case STRING:
+                {
+                alt43=23;
+                }
+                break;
+            case INT:
+                {
+                alt43=24;
+                }
+                break;
+            case FLOAT:
+                {
+                alt43=25;
+                }
+                break;
+            case BOOL:
+                {
+                alt43=26;
+                }
+                break;
+            case NULL:
+                {
+                alt43=27;
+                }
+                break;
+            case VT_PAREN_CHUNK:
+                {
+                alt43=28;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("152:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD fact_expression ( fact_expression )? ) | ^( VT_!
 ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );", 43, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt43) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:153:4: ^( DOUBLE_PIPE fact_expression fact_expression )
+                    {
+                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression795); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression797);
+                    fact_expression();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression799);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:154:4: ^( DOUBLE_AMPER fact_expression fact_expression )
+                    {
+                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression806); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression808);
+                    fact_expression();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression810);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 3 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:155:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
+                    {
+                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression817); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression819); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression821);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 4 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:4: ^( VT_FACT data_type ( fact_expression )* )
+                    {
+                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression828); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_data_type_in_fact_expression830);
+                    data_type();
+                    _fsp--;
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:24: ( fact_expression )*
+                    loop31:
+                    do {
+                        int alt31=2;
+                        int LA31_0 = input.LA(1);
+
+                        if ( (LA31_0==VT_FACT||LA31_0==VT_PAREN_CHUNK||(LA31_0>=VT_FACT_BINDING && LA31_0<=VT_ACCESSOR_PATH)||(LA31_0>=VK_EVAL && LA31_0<=VK_MEMBEROF)||LA31_0==VK_IN||LA31_0==ID||LA31_0==STRING||(LA31_0>=BOOL && LA31_0<=DOUBLE_AMPER)||(LA31_0>=EQUAL && LA31_0<=NULL)) ) {
+                            alt31=1;
+                        }
+
+
+                        switch (alt31) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:24: fact_expression
+                    	    {
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression832);
+                    	    fact_expression();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop31;
+                        }
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 5 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:157:4: ^( VT_FACT_OR fact_expression fact_expression )
+                    {
+                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression840); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression842);
+                    fact_expression();
+                    _fsp--;
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression844);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:158:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    {
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression851); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression853); 
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
+                    {
+                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression860); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:12: ( VK_NOT )?
+                    int alt32=2;
+                    int LA32_0 = input.LA(1);
+
+                    if ( (LA32_0==VK_NOT) ) {
+                        alt32=1;
+                    }
+                    switch (alt32) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:12: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression862); 
+
+                            }
+                            break;
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:20: ( fact_expression )+
+                    int cnt33=0;
+                    loop33:
+                    do {
+                        int alt33=2;
+                        int LA33_0 = input.LA(1);
+
+                        if ( (LA33_0==VT_FACT||LA33_0==VT_PAREN_CHUNK||(LA33_0>=VT_FACT_BINDING && LA33_0<=VT_ACCESSOR_PATH)||(LA33_0>=VK_EVAL && LA33_0<=VK_MEMBEROF)||LA33_0==VK_IN||LA33_0==ID||LA33_0==STRING||(LA33_0>=BOOL && LA33_0<=DOUBLE_AMPER)||(LA33_0>=EQUAL && LA33_0<=NULL)) ) {
+                            alt33=1;
+                        }
+
+
+                        switch (alt33) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:20: fact_expression
+                    	    {
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression865);
+                    	    fact_expression();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt33 >= 1 ) break loop33;
+                                EarlyExitException eee =
+                                    new EarlyExitException(33, input);
+                                throw eee;
+                        }
+                        cnt33++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 8 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:160:4: ^( EQUAL fact_expression )
+                    {
+                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression873); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression875);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:161:4: ^( GREATER fact_expression )
+                    {
+                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression882); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression884);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 10 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:162:4: ^( GREATER_EQUAL fact_expression )
+                    {
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression891); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression893);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 11 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:163:4: ^( LESS fact_expression )
+                    {
+                    match(input,LESS,FOLLOW_LESS_in_fact_expression900); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression902);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 12 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:164:4: ^( LESS_EQUAL fact_expression )
+                    {
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression909); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression911);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 13 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:165:4: ^( NOT_EQUAL fact_expression )
+                    {
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression918); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression920);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 14 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:166:4: ^( VK_CONTAINS ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression927); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:166:18: ( VK_NOT )?
+                    int alt34=2;
+                    int LA34_0 = input.LA(1);
+
+                    if ( (LA34_0==VK_NOT) ) {
+                        alt34=1;
+                    }
+                    switch (alt34) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:166:18: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression929); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression932);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 15 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:167:4: ^( VK_EXCLUDES ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression939); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:167:18: ( VK_NOT )?
+                    int alt35=2;
+                    int LA35_0 = input.LA(1);
+
+                    if ( (LA35_0==VK_NOT) ) {
+                        alt35=1;
+                    }
+                    switch (alt35) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:167:18: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression941); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression944);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 16 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:4: ^( VK_MATCHES ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression951); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:17: ( VK_NOT )?
+                    int alt36=2;
+                    int LA36_0 = input.LA(1);
+
+                    if ( (LA36_0==VK_NOT) ) {
+                        alt36=1;
+                    }
+                    switch (alt36) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:17: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression953); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression956);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 17 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:4: ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression963); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:20: ( VK_NOT )?
+                    int alt37=2;
+                    int LA37_0 = input.LA(1);
+
+                    if ( (LA37_0==VK_NOT) ) {
+                        alt37=1;
+                    }
+                    switch (alt37) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:20: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression965); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression968);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 18 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:170:4: ^( VK_MEMBEROF ( VK_NOT )? fact_expression )
+                    {
+                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression975); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:170:18: ( VK_NOT )?
+                    int alt38=2;
+                    int LA38_0 = input.LA(1);
+
+                    if ( (LA38_0==VK_NOT) ) {
+                        alt38=1;
+                    }
+                    switch (alt38) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:170:18: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression977); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression980);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 19 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:4: ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression )
+                    {
+                    match(input,ID,FOLLOW_ID_in_fact_expression987); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:9: ( VK_NOT )?
+                    int alt39=2;
+                    int LA39_0 = input.LA(1);
+
+                    if ( (LA39_0==VK_NOT) ) {
+                        alt39=1;
+                    }
+                    switch (alt39) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:9: VK_NOT
+                            {
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression989); 
+
+                            }
+                            break;
+
+                    }
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:17: ( VT_SQUARE_CHUNK )?
+                    int alt40=2;
+                    int LA40_0 = input.LA(1);
+
+                    if ( (LA40_0==VT_SQUARE_CHUNK) ) {
+                        alt40=1;
+                    }
+                    switch (alt40) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:17: VT_SQUARE_CHUNK
+                            {
+                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression992); 
+
+                            }
+                            break;
+
+                    }
+
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression995);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 20 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:172:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
+                    {
+                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression1002); 
+
+                    match(input, Token.DOWN, null); 
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1004); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1006);
+                    fact_expression();
+                    _fsp--;
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 21 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:4: ^( VT_FIELD fact_expression ( fact_expression )? )
+                    {
+                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression1013); 
+
+                    match(input, Token.DOWN, null); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1015);
+                    fact_expression();
+                    _fsp--;
+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:31: ( fact_expression )?
+                    int alt41=2;
+                    int LA41_0 = input.LA(1);
+
+                    if ( (LA41_0==VT_FACT||LA41_0==VT_PAREN_CHUNK||(LA41_0>=VT_FACT_BINDING && LA41_0<=VT_ACCESSOR_PATH)||(LA41_0>=VK_EVAL && LA41_0<=VK_MEMBEROF)||LA41_0==VK_IN||LA41_0==ID||LA41_0==STRING||(LA41_0>=BOOL && LA41_0<=DOUBLE_AMPER)||(LA41_0>=EQUAL && LA41_0<=NULL)) ) {
+                        alt41=1;
+                    }
+                    switch (alt41) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:31: fact_expression
+                            {
+                            pushFollow(FOLLOW_fact_expression_in_fact_expression1017);
+                            fact_expression();
+                            _fsp--;
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 22 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:174:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                    {
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1025); 
+
+                    match(input, Token.DOWN, null); 
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:174:23: ( accessor_element )+
+                    int cnt42=0;
+                    loop42:
+                    do {
+                        int alt42=2;
+                        int LA42_0 = input.LA(1);
+
+                        if ( (LA42_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt42=1;
+                        }
+
+
+                        switch (alt42) {
+                    	case 1 :
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:174:23: accessor_element
+                    	    {
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression1027);
+                    	    accessor_element();
+                    	    _fsp--;
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt42 >= 1 ) break loop42;
+                                EarlyExitException eee =
+                                    new EarlyExitException(42, input);
+                                throw eee;
+                        }
+                        cnt42++;
+                    } while (true);
+
+
+                    match(input, Token.UP, null); 
+
+                    }
+                    break;
+                case 23 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:175:4: STRING
+                    {
+                    match(input,STRING,FOLLOW_STRING_in_fact_expression1034); 
+
+                    }
+                    break;
+                case 24 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:176:4: INT
+                    {
+                    match(input,INT,FOLLOW_INT_in_fact_expression1039); 
+
+                    }
+                    break;
+                case 25 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:177:4: FLOAT
+                    {
+                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression1044); 
+
+                    }
+                    break;
+                case 26 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:178:4: BOOL
+                    {
+                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression1049); 
+
+                    }
+                    break;
+                case 27 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:179:4: NULL
+                    {
+                    match(input,NULL,FOLLOW_NULL_in_fact_expression1054); 
+
+                    }
+                    break;
+                case 28 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:180:4: VT_PAREN_CHUNK
+                    {
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1059); 
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end fact_expression
+
+
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:1: data_type : ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final void data_type() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:2: ( ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:4: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            {
+            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1071); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:19: ( ID )+
+            int cnt44=0;
+            loop44:
+            do {
+                int alt44=2;
+                int LA44_0 = input.LA(1);
+
+                if ( (LA44_0==ID) ) {
+                    alt44=1;
+                }
+
+
+                switch (alt44) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:19: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_data_type1073); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt44 >= 1 ) break loop44;
+                        EarlyExitException eee =
+                            new EarlyExitException(44, input);
+                        throw eee;
+                }
+                cnt44++;
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:23: ( dimension_definition )*
+            loop45:
+            do {
+                int alt45=2;
+                int LA45_0 = input.LA(1);
+
+                if ( (LA45_0==LEFT_SQUARE) ) {
+                    alt45=1;
+                }
+
+
+                switch (alt45) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:23: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type1076);
+            	    dimension_definition();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop45;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end data_type
+
+
+    // $ANTLR start dimension_definition
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:187:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    public final void dimension_definition() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:4: LEFT_SQUARE RIGHT_SQUARE
+            {
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1089); 
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1091); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end dimension_definition
+
+
+    // $ANTLR start accessor_element
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
+    public final void accessor_element() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
+            {
+            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1103); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_accessor_element1105); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:29: ( VT_SQUARE_CHUNK )*
+            loop46:
+            do {
+                int alt46=2;
+                int LA46_0 = input.LA(1);
+
+                if ( (LA46_0==VT_SQUARE_CHUNK) ) {
+                    alt46=1;
+                }
+
+
+                switch (alt46) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:29: VT_SQUARE_CHUNK
+            	    {
+            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1107); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop46;
+                }
+            } 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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
+    public final void expression_chain() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
+            {
+            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1121); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_expression_chain1123); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:29: ( VT_SQUARE_CHUNK )?
+            int alt47=2;
+            int LA47_0 = input.LA(1);
+
+            if ( (LA47_0==VT_SQUARE_CHUNK) ) {
+                alt47=1;
+            }
+            switch (alt47) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:29: VT_SQUARE_CHUNK
+                    {
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1125); 
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:46: ( VT_PAREN_CHUNK )?
+            int alt48=2;
+            int LA48_0 = input.LA(1);
+
+            if ( (LA48_0==VT_PAREN_CHUNK) ) {
+                alt48=1;
+            }
+            switch (alt48) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:46: VT_PAREN_CHUNK
+                    {
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1128); 
+
+                    }
+                    break;
+
+            }
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:62: ( expression_chain )?
+            int alt49=2;
+            int LA49_0 = input.LA(1);
+
+            if ( (LA49_0==VT_EXPRESSION_CHAIN) ) {
+                alt49=1;
+            }
+            switch (alt49) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:62: expression_chain
+                    {
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain1131);
+                    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/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:199:1: curly_chunk : VT_CURLY_CHUNK ;
+    public final void curly_chunk() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:2: ( VT_CURLY_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:4: VT_CURLY_CHUNK
+            {
+            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1145); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end curly_chunk
+
+
+ 
+
+    public static final BitSet FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit43 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit45 = new BitSet(new long[]{0xDB3FFC0000000028L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit48 = new BitSet(new long[]{0xDB3FFC0000000028L});
+    public static final BitSet FOLLOW_VK_PACKAGE_in_package_statement63 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_package_id_in_package_statement65 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PACKAGE_ID_in_package_id78 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_package_id80 = new BitSet(new long[]{0x0000000000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement93 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement98 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement104 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement110 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement116 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement121 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement126 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_IMPORT_in_import_statement143 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_import_name_in_import_statement145 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement158 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement160 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement162 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name175 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_import_name177 = new BitSet(new long[]{0x0000000000000008L,0x0000000000A00000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name180 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_GLOBAL_in_global194 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_global196 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global198 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function211 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_function213 = new BitSet(new long[]{0x0000010000000000L});
+    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function216 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_parameters_in_function218 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function220 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_QUERY_in_query233 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_QUERY_ID_in_query235 = new BitSet(new long[]{0x0000020000100000L});
+    public static final BitSet FOLLOW_parameters_in_query237 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_block_in_query240 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_END_in_query242 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters255 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_param_definition_in_parameters257 = new BitSet(new long[]{0x0000001000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition270 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_argument_in_param_definition273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument284 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument286 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_VK_TEMPLATE_in_template300 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template302 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_template_slot_in_template304 = new BitSet(new long[]{0x0000000000004000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_END_in_template307 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_SLOT_in_template_slot320 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_template_slot322 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot324 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULE_in_rule337 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule339 = new BitSet(new long[]{0x0080000000018000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule341 = new BitSet(new long[]{0x0080000000010000L});
+    public static final BitSet FOLLOW_when_part_in_rule344 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule347 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_WHEN_in_when_part359 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_lhs_block_in_when_part361 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes373 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes375 = new BitSet(new long[]{0x003FFC0000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes378 = new BitSet(new long[]{0x003FFC0000000008L});
+    public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute392 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_set_in_rule_attribute394 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute406 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute408 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute418 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute420 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute429 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_INT_in_rule_attribute431 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute441 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute443 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute451 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute453 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute462 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute464 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute472 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute474 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute482 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute484 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute492 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute494 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute502 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute504 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute512 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute514 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block528 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block530 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs543 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs545 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs553 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs555 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs557 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs564 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs566 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs574 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs576 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs578 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXISTS_in_lhs585 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs587 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NOT_in_lhs594 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs596 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_lhs603 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs605 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FORALL_in_lhs612 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs614 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_VK_FROM_in_lhs622 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs624 = new BitSet(new long[]{0x0000000008000000L,0x0000000000084040L});
+    public static final BitSet FOLLOW_from_elements_in_lhs626 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs632 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements644 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements646 = new BitSet(new long[]{0x0000000006000000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements649 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements651 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements659 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements661 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements668 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements670 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements677 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_from_elements679 = new BitSet(new long[]{0x0000000010080008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements681 = new BitSet(new long[]{0x0000000010000008L});
+    public static final BitSet FOLLOW_expression_chain_in_from_elements684 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause698 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause705 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause707 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause715 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause717 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
+    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause731 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause733 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause747 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause749 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause763 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause765 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause767 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern780 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern782 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression795 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression797 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression799 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression806 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression808 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression810 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression817 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression819 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression821 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_in_fact_expression828 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_fact_expression830 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression832 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression840 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression842 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression844 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression851 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression853 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_IN_in_fact_expression860 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression862 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression865 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_EQUAL_in_fact_expression873 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression875 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_in_fact_expression882 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression884 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression891 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression893 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_in_fact_expression900 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression902 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression909 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression911 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression918 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression920 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression927 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression929 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression932 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression939 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression941 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression944 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression951 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression953 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression956 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression963 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression965 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression968 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression975 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression977 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression980 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fact_expression987 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression989 = new BitSet(new long[]{0x00000007C00C0040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression992 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression995 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1002 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1004 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1006 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1013 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1015 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1017 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1025 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression1027 = new BitSet(new long[]{0x0000000800000008L});
+    public static final BitSet FOLLOW_STRING_in_fact_expression1034 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_fact_expression1039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_fact_expression1044 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_fact_expression1049 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_fact_expression1054 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1059 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1071 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_data_type1073 = new BitSet(new long[]{0x0000000000000008L,0x0000080000200000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type1076 = new BitSet(new long[]{0x0000000000000008L,0x0000080000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1089 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition1091 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1103 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accessor_element1105 = new BitSet(new long[]{0x0000000000040008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1107 = new BitSet(new long[]{0x0000000000040008L});
+    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1121 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_expression_chain1123 = new BitSet(new long[]{0x00000000100C0008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1125 = new BitSet(new long[]{0x0000000010080008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1128 = new BitSet(new long[]{0x0000000010000008L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain1131 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1145 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file




More information about the jboss-svn-commits mailing list