// $ANTLR 3.3 Nov 30, 2010 12:46:29 src/main/resources/org/drools/lang/Tree2TestDRL.g 2011-01-18 19:45:14

    package org.drools.lang;


import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

public class 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_TYPE_DECLARE_ID", "VT_TYPE_NAME", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_RULE_ATTRIBUTES", "VT_PKG_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_BEHAVIOR", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_FOR_CE", "VT_FOR_FUNCTIONS", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PATTERN_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VT_ARGUMENTS", "VT_EXPRESSION", "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_TIMER", "VK_CALENDARS", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_RULE", "VK_EXTEND", "VK_IMPLEMENTS", "VK_IMPORT", "VK_PACKAGE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FOR", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_OPERATOR", "VK_END", "VK_INIT", "VK_INSTANCEOF", "VK_EXTENDS", "VK_SUPER", "VK_PRIMITIVE_TYPE", "VK_THIS", "VK_VOID", "VK_CLASS", "VK_NEW", "VK_FINAL", "VK_IF", "VK_ELSE", "VK_WHILE", "VK_DO", "VK_CASE", "VK_DEFAULT", "VK_TRY", "VK_CATCH", "VK_FINALLY", "VK_SWITCH", "VK_SYNCHRONIZED", "VK_RETURN", "VK_THROW", "VK_BREAK", "VK_CONTINUE", "VK_ASSERT", "VK_MODIFY", "VK_STATIC", "VK_PUBLIC", "VK_PROTECTED", "VK_PRIVATE", "VK_ABSTRACT", "VK_NATIVE", "VK_TRANSIENT", "VK_VOLATILE", "VK_STRICTFP", "VK_THROWS", "VK_INTERFACE", "VK_ENUM", "SIGNED_DECIMAL", "SIGNED_HEX", "SIGNED_FLOAT", "VT_PROP_KEY", "VT_PROP_VALUE", "EOL", "WS", "Exponent", "FloatTypeSuffix", "FLOAT", "HexDigit", "IntegerTypeSuffix", "HEX", "DECIMAL", "EscapeSequence", "STRING", "TimePeriod", "UnicodeEscape", "OctalEscape", "BOOL", "ACCUMULATE", "COLLECT", "FROM", "NULL", "OVER", "THEN", "WHEN", "AT", "PLUS_ASSIGN", "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN", "MOD_ASSIGN", "DECR", "INCR", "ARROW", "SEMICOLON", "COLON", "EQUALS", "NOT_EQUALS", "GREATER_EQUALS", "LESS_EQUALS", "GREATER", "LESS", "EQUALS_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_SQUARE", "RIGHT_SQUARE", "LEFT_CURLY", "RIGHT_CURLY", "COMMA", "DOT", "DOUBLE_AMPER", "DOUBLE_PIPE", "QUESTION", "NEGATION", "TILDE", "PIPE", "AMPER", "XOR", "MOD", "STAR", "MINUS", "PLUS", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "IdentifierStart", "IdentifierPart", "ID", "DIV", "MISC", "DOT_STAR", "VK_TEMPLATE", "VT_TEMPLATE_ID", "VT_SLOT", "VT_SLOT_ID", "INT", "VK_DURATION", "EQUAL", "GREATER_EQUAL", "LESS_EQUAL", "NOT_EQUAL"
    };
    public static final int EOF=-1;
    public static final int VT_COMPILATION_UNIT=4;
    public static final int VT_FUNCTION_IMPORT=5;
    public static final int VT_FACT=6;
    public static final int VT_CONSTRAINTS=7;
    public static final int VT_LABEL=8;
    public static final int VT_QUERY_ID=9;
    public static final int VT_TYPE_DECLARE_ID=10;
    public static final int VT_TYPE_NAME=11;
    public static final int VT_RULE_ID=12;
    public static final int VT_ENTRYPOINT_ID=13;
    public static final int VT_RULE_ATTRIBUTES=14;
    public static final int VT_PKG_ATTRIBUTES=15;
    public static final int VT_RHS_CHUNK=16;
    public static final int VT_CURLY_CHUNK=17;
    public static final int VT_SQUARE_CHUNK=18;
    public static final int VT_PAREN_CHUNK=19;
    public static final int VT_BEHAVIOR=20;
    public static final int VT_AND_IMPLICIT=21;
    public static final int VT_AND_PREFIX=22;
    public static final int VT_OR_PREFIX=23;
    public static final int VT_AND_INFIX=24;
    public static final int VT_OR_INFIX=25;
    public static final int VT_ACCUMULATE_INIT_CLAUSE=26;
    public static final int VT_ACCUMULATE_ID_CLAUSE=27;
    public static final int VT_FROM_SOURCE=28;
    public static final int VT_EXPRESSION_CHAIN=29;
    public static final int VT_FOR_CE=30;
    public static final int VT_FOR_FUNCTIONS=31;
    public static final int VT_PATTERN=32;
    public static final int VT_FACT_BINDING=33;
    public static final int VT_FACT_OR=34;
    public static final int VT_BIND_FIELD=35;
    public static final int VT_FIELD=36;
    public static final int VT_ACCESSOR_PATH=37;
    public static final int VT_ACCESSOR_ELEMENT=38;
    public static final int VT_DATA_TYPE=39;
    public static final int VT_PATTERN_TYPE=40;
    public static final int VT_PACKAGE_ID=41;
    public static final int VT_IMPORT_ID=42;
    public static final int VT_GLOBAL_ID=43;
    public static final int VT_FUNCTION_ID=44;
    public static final int VT_PARAM_LIST=45;
    public static final int VT_ARGUMENTS=46;
    public static final int VT_EXPRESSION=47;
    public static final int VK_DATE_EFFECTIVE=48;
    public static final int VK_DATE_EXPIRES=49;
    public static final int VK_LOCK_ON_ACTIVE=50;
    public static final int VK_NO_LOOP=51;
    public static final int VK_AUTO_FOCUS=52;
    public static final int VK_ACTIVATION_GROUP=53;
    public static final int VK_AGENDA_GROUP=54;
    public static final int VK_RULEFLOW_GROUP=55;
    public static final int VK_TIMER=56;
    public static final int VK_CALENDARS=57;
    public static final int VK_DIALECT=58;
    public static final int VK_SALIENCE=59;
    public static final int VK_ENABLED=60;
    public static final int VK_ATTRIBUTES=61;
    public static final int VK_RULE=62;
    public static final int VK_EXTEND=63;
    public static final int VK_IMPLEMENTS=64;
    public static final int VK_IMPORT=65;
    public static final int VK_PACKAGE=66;
    public static final int VK_QUERY=67;
    public static final int VK_DECLARE=68;
    public static final int VK_FUNCTION=69;
    public static final int VK_GLOBAL=70;
    public static final int VK_EVAL=71;
    public static final int VK_ENTRY_POINT=72;
    public static final int VK_NOT=73;
    public static final int VK_IN=74;
    public static final int VK_OR=75;
    public static final int VK_AND=76;
    public static final int VK_EXISTS=77;
    public static final int VK_FORALL=78;
    public static final int VK_FOR=79;
    public static final int VK_ACTION=80;
    public static final int VK_REVERSE=81;
    public static final int VK_RESULT=82;
    public static final int VK_OPERATOR=83;
    public static final int VK_END=84;
    public static final int VK_INIT=85;
    public static final int VK_INSTANCEOF=86;
    public static final int VK_EXTENDS=87;
    public static final int VK_SUPER=88;
    public static final int VK_PRIMITIVE_TYPE=89;
    public static final int VK_THIS=90;
    public static final int VK_VOID=91;
    public static final int VK_CLASS=92;
    public static final int VK_NEW=93;
    public static final int VK_FINAL=94;
    public static final int VK_IF=95;
    public static final int VK_ELSE=96;
    public static final int VK_WHILE=97;
    public static final int VK_DO=98;
    public static final int VK_CASE=99;
    public static final int VK_DEFAULT=100;
    public static final int VK_TRY=101;
    public static final int VK_CATCH=102;
    public static final int VK_FINALLY=103;
    public static final int VK_SWITCH=104;
    public static final int VK_SYNCHRONIZED=105;
    public static final int VK_RETURN=106;
    public static final int VK_THROW=107;
    public static final int VK_BREAK=108;
    public static final int VK_CONTINUE=109;
    public static final int VK_ASSERT=110;
    public static final int VK_MODIFY=111;
    public static final int VK_STATIC=112;
    public static final int VK_PUBLIC=113;
    public static final int VK_PROTECTED=114;
    public static final int VK_PRIVATE=115;
    public static final int VK_ABSTRACT=116;
    public static final int VK_NATIVE=117;
    public static final int VK_TRANSIENT=118;
    public static final int VK_VOLATILE=119;
    public static final int VK_STRICTFP=120;
    public static final int VK_THROWS=121;
    public static final int VK_INTERFACE=122;
    public static final int VK_ENUM=123;
    public static final int SIGNED_DECIMAL=124;
    public static final int SIGNED_HEX=125;
    public static final int SIGNED_FLOAT=126;
    public static final int VT_PROP_KEY=127;
    public static final int VT_PROP_VALUE=128;
    public static final int EOL=129;
    public static final int WS=130;
    public static final int Exponent=131;
    public static final int FloatTypeSuffix=132;
    public static final int FLOAT=133;
    public static final int HexDigit=134;
    public static final int IntegerTypeSuffix=135;
    public static final int HEX=136;
    public static final int DECIMAL=137;
    public static final int EscapeSequence=138;
    public static final int STRING=139;
    public static final int TimePeriod=140;
    public static final int UnicodeEscape=141;
    public static final int OctalEscape=142;
    public static final int BOOL=143;
    public static final int ACCUMULATE=144;
    public static final int COLLECT=145;
    public static final int FROM=146;
    public static final int NULL=147;
    public static final int OVER=148;
    public static final int THEN=149;
    public static final int WHEN=150;
    public static final int AT=151;
    public static final int PLUS_ASSIGN=152;
    public static final int MINUS_ASSIGN=153;
    public static final int MULT_ASSIGN=154;
    public static final int DIV_ASSIGN=155;
    public static final int AND_ASSIGN=156;
    public static final int OR_ASSIGN=157;
    public static final int XOR_ASSIGN=158;
    public static final int MOD_ASSIGN=159;
    public static final int DECR=160;
    public static final int INCR=161;
    public static final int ARROW=162;
    public static final int SEMICOLON=163;
    public static final int COLON=164;
    public static final int EQUALS=165;
    public static final int NOT_EQUALS=166;
    public static final int GREATER_EQUALS=167;
    public static final int LESS_EQUALS=168;
    public static final int GREATER=169;
    public static final int LESS=170;
    public static final int EQUALS_ASSIGN=171;
    public static final int LEFT_PAREN=172;
    public static final int RIGHT_PAREN=173;
    public static final int LEFT_SQUARE=174;
    public static final int RIGHT_SQUARE=175;
    public static final int LEFT_CURLY=176;
    public static final int RIGHT_CURLY=177;
    public static final int COMMA=178;
    public static final int DOT=179;
    public static final int DOUBLE_AMPER=180;
    public static final int DOUBLE_PIPE=181;
    public static final int QUESTION=182;
    public static final int NEGATION=183;
    public static final int TILDE=184;
    public static final int PIPE=185;
    public static final int AMPER=186;
    public static final int XOR=187;
    public static final int MOD=188;
    public static final int STAR=189;
    public static final int MINUS=190;
    public static final int PLUS=191;
    public static final int SH_STYLE_SINGLE_LINE_COMMENT=192;
    public static final int C_STYLE_SINGLE_LINE_COMMENT=193;
    public static final int MULTI_LINE_COMMENT=194;
    public static final int IdentifierStart=195;
    public static final int IdentifierPart=196;
    public static final int ID=197;
    public static final int DIV=198;
    public static final int MISC=199;
    public static final int DOT_STAR=200;
    public static final int VK_TEMPLATE=201;
    public static final int VT_TEMPLATE_ID=202;
    public static final int VT_SLOT=203;
    public static final int VT_SLOT_ID=204;
    public static final int INT=205;
    public static final int VK_DURATION=206;
    public static final int EQUAL=207;
    public static final int GREATER_EQUAL=208;
    public static final int LESS_EQUAL=209;
    public static final int NOT_EQUAL=210;

    // delegates
    // delegators


        public Tree2TestDRL(TreeNodeStream input) {
            this(input, new RecognizerSharedState());
        }
        public Tree2TestDRL(TreeNodeStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return Tree2TestDRL.tokenNames; }
    public String getGrammarFileName() { return "src/main/resources/org/drools/lang/Tree2TestDRL.g"; }



    // $ANTLR start "compilation_unit"
    // 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 {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:14:2: ( ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
            // 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);
                // 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 :
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: package_statement
                        {
                        pushFollow(FOLLOW_package_statement_in_compilation_unit45);
                        package_statement();

                        state._fsp--;


                        }
                        break;

                }

                // 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_RULEFLOW_GROUP)||(LA2_0>=VK_DIALECT && LA2_0<=VK_ENABLED)||LA2_0==VK_RULE||LA2_0==VK_IMPORT||(LA2_0>=VK_QUERY && LA2_0<=VK_GLOBAL)||LA2_0==VK_TEMPLATE||LA2_0==VK_DURATION) ) {
                        alt2=1;
                    }


                    switch (alt2) {
                    case 1 :
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: statement
                        {
                        pushFollow(FOLLOW_statement_in_compilation_unit48);
                        statement();

                        state._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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:17:1: package_statement : ^( VK_PACKAGE package_id ) ;
    public final void package_statement() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:18:2: ( ^( VK_PACKAGE package_id ) )
            // 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();

            state._fsp--;


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "package_statement"


    // $ANTLR start "package_id"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:21:1: package_id : ^( VT_PACKAGE_ID ( ID )+ ) ;
    public final void package_id() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:22:2: ( ^( VT_PACKAGE_ID ( ID )+ ) )
            // 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);
            // 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 :
                    // 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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query | type_declaration );
    public final void statement() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:26:2: ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query | type_declaration )
            int alt4=9;
            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_DIALECT:
            case VK_SALIENCE:
            case VK_ENABLED:
            case VK_DURATION:
                {
                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;
            case VK_DECLARE:
                {
                alt4=9;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }

            switch (alt4) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:26:4: rule_attribute
                    {
                    pushFollow(FOLLOW_rule_attribute_in_statement93);
                    rule_attribute();

                    state._fsp--;


                    }
                    break;
                case 2 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:27:4: function_import_statement
                    {
                    pushFollow(FOLLOW_function_import_statement_in_statement98);
                    function_import_statement();

                    state._fsp--;


                    }
                    break;
                case 3 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:28:4: import_statement
                    {
                    pushFollow(FOLLOW_import_statement_in_statement104);
                    import_statement();

                    state._fsp--;


                    }
                    break;
                case 4 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:29:4: global
                    {
                    pushFollow(FOLLOW_global_in_statement110);
                    global();

                    state._fsp--;


                    }
                    break;
                case 5 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:30:4: function
                    {
                    pushFollow(FOLLOW_function_in_statement116);
                    function();

                    state._fsp--;


                    }
                    break;
                case 6 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:31:4: template
                    {
                    pushFollow(FOLLOW_template_in_statement121);
                    template();

                    state._fsp--;


                    }
                    break;
                case 7 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:32:4: rule
                    {
                    pushFollow(FOLLOW_rule_in_statement126);
                    rule();

                    state._fsp--;


                    }
                    break;
                case 8 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:33:4: query
                    {
                    pushFollow(FOLLOW_query_in_statement131);
                    query();

                    state._fsp--;


                    }
                    break;
                case 9 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:34:4: type_declaration
                    {
                    pushFollow(FOLLOW_type_declaration_in_statement136);
                    type_declaration();

                    state._fsp--;


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "statement"


    // $ANTLR start "import_statement"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:37:1: import_statement : ^( VK_IMPORT import_name ) ;
    public final void import_statement() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:38:2: ( ^( VK_IMPORT import_name ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:38:4: ^( VK_IMPORT import_name )
            {
            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement148);

            match(input, Token.DOWN, null);
            pushFollow(FOLLOW_import_name_in_import_statement150);
            import_name();

            state._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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:41:1: function_import_statement : ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) ;
    public final void function_import_statement() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:42:2: ( ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:42:4: ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name )
            {
            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement163);

            match(input, Token.DOWN, null);
            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement165);
            pushFollow(FOLLOW_import_name_in_function_import_statement167);
            import_name();

            state._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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:45:1: import_name : ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
    public final void import_name() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:46:2: ( ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:46:4: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
            {
            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name180);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:46: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 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:46:19: ID
                    {
                    match(input,ID,FOLLOW_ID_in_import_name182);

                    }
                    break;

                default :
                    if ( cnt5 >= 1 ) break loop5;
                        EarlyExitException eee =
                            new EarlyExitException(5, input);
                        throw eee;
                }
                cnt5++;
            } while (true);

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:46:23: ( DOT_STAR )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==DOT_STAR) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:46:23: DOT_STAR
                    {
                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name185);

                    }
                    break;

            }


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "import_name"


    // $ANTLR start "global"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:49:1: global : ^( VK_GLOBAL data_type VT_GLOBAL_ID ) ;
    public final void global() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:50:2: ( ^( VK_GLOBAL data_type VT_GLOBAL_ID ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:50:4: ^( VK_GLOBAL data_type VT_GLOBAL_ID )
            {
            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global199);

            match(input, Token.DOWN, null);
            pushFollow(FOLLOW_data_type_in_global201);
            data_type();

            state._fsp--;

            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global203);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "global"


    // $ANTLR start "function"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:53:1: function : ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) ;
    public final void function() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:54:2: ( ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:54:4: ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk )
            {
            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function216);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:54:18: ( data_type )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==VT_DATA_TYPE) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:54:18: data_type
                    {
                    pushFollow(FOLLOW_data_type_in_function218);
                    data_type();

                    state._fsp--;


                    }
                    break;

            }

            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function221);
            pushFollow(FOLLOW_parameters_in_function223);
            parameters();

            state._fsp--;

            pushFollow(FOLLOW_curly_chunk_in_function225);
            curly_chunk();

            state._fsp--;


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "function"


    // $ANTLR start "query"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:57:1: query : ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block VK_END ) ;
    public final void query() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:58:2: ( ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block VK_END ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:58:4: ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block VK_END )
            {
            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query238);

            match(input, Token.DOWN, null);
            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query240);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:58:27: ( parameters )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==VT_PARAM_LIST) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:58:27: parameters
                    {
                    pushFollow(FOLLOW_parameters_in_query242);
                    parameters();

                    state._fsp--;


                    }
                    break;

            }

            pushFollow(FOLLOW_lhs_block_in_query245);
            lhs_block();

            state._fsp--;

            match(input,VK_END,FOLLOW_VK_END_in_query247);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "query"


    // $ANTLR start "parameters"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:61:1: parameters : ^( VT_PARAM_LIST ( param_definition )* ) ;
    public final void parameters() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:62:2: ( ^( VT_PARAM_LIST ( param_definition )* ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:62:4: ^( VT_PARAM_LIST ( param_definition )* )
            {
            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters260);

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null);
                // src/main/resources/org/drools/lang/Tree2TestDRL.g:62: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 :
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:62:20: param_definition
                        {
                        pushFollow(FOLLOW_param_definition_in_parameters262);
                        param_definition();

                        state._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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:65:1: param_definition : ( data_type )? argument ;
    public final void param_definition() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:66:2: ( ( data_type )? argument )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:66:4: ( data_type )? argument
            {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:66:4: ( data_type )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==VT_DATA_TYPE) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:66:4: data_type
                    {
                    pushFollow(FOLLOW_data_type_in_param_definition275);
                    data_type();

                    state._fsp--;


                    }
                    break;

            }

            pushFollow(FOLLOW_argument_in_param_definition278);
            argument();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "param_definition"


    // $ANTLR start "argument"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:69:1: argument : ID ( dimension_definition )* ;
    public final void argument() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:70:2: ( ID ( dimension_definition )* )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:70:4: ID ( dimension_definition )*
            {
            match(input,ID,FOLLOW_ID_in_argument289);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:70: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 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:70:7: dimension_definition
                    {
                    pushFollow(FOLLOW_dimension_definition_in_argument291);
                    dimension_definition();

                    state._fsp--;


                    }
                    break;

                default :
                    break loop11;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "argument"


    // $ANTLR start "type_declaration"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:73:1: type_declaration : ^( VK_DECLARE VT_TYPE_DECLARE_ID ( decl_metadata )* ( decl_field )* VK_END ) ;
    public final void type_declaration() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:74:2: ( ^( VK_DECLARE VT_TYPE_DECLARE_ID ( decl_metadata )* ( decl_field )* VK_END ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:74:4: ^( VK_DECLARE VT_TYPE_DECLARE_ID ( decl_metadata )* ( decl_field )* VK_END )
            {
            match(input,VK_DECLARE,FOLLOW_VK_DECLARE_in_type_declaration304);

            match(input, Token.DOWN, null);
            match(input,VT_TYPE_DECLARE_ID,FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration306);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:74:36: ( decl_metadata )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==AT) ) {
                    alt12=1;
                }


                switch (alt12) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:74:36: decl_metadata
                    {
                    pushFollow(FOLLOW_decl_metadata_in_type_declaration308);
                    decl_metadata();

                    state._fsp--;


                    }
                    break;

                default :
                    break loop12;
                }
            } while (true);

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:74:51: ( decl_field )*
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==ID) ) {
                    alt13=1;
                }


                switch (alt13) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:74:51: decl_field
                    {
                    pushFollow(FOLLOW_decl_field_in_type_declaration311);
                    decl_field();

                    state._fsp--;


                    }
                    break;

                default :
                    break loop13;
                }
            } while (true);

            match(input,VK_END,FOLLOW_VK_END_in_type_declaration314);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "type_declaration"


    // $ANTLR start "decl_metadata"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:77:1: decl_metadata : ^( AT ID ( VT_PAREN_CHUNK )? ) ;
    public final void decl_metadata() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:78:2: ( ^( AT ID ( VT_PAREN_CHUNK )? ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:78:4: ^( AT ID ( VT_PAREN_CHUNK )? )
            {
            match(input,AT,FOLLOW_AT_in_decl_metadata327);

            match(input, Token.DOWN, null);
            match(input,ID,FOLLOW_ID_in_decl_metadata329);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:78:12: ( VT_PAREN_CHUNK )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==VT_PAREN_CHUNK) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:78:12: VT_PAREN_CHUNK
                    {
                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_decl_metadata331);

                    }
                    break;

            }


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "decl_metadata"


    // $ANTLR start "decl_field"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:81:1: decl_field : ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) ;
    public final void decl_field() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:82:2: ( ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:82:4: ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
            {
            match(input,ID,FOLLOW_ID_in_decl_field345);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:82:9: ( decl_field_initialization )?
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==EQUALS) ) {
                alt15=1;
            }
            switch (alt15) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:82:9: decl_field_initialization
                    {
                    pushFollow(FOLLOW_decl_field_initialization_in_decl_field347);
                    decl_field_initialization();

                    state._fsp--;


                    }
                    break;

            }

            pushFollow(FOLLOW_data_type_in_decl_field350);
            data_type();

            state._fsp--;

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:82:46: ( decl_metadata )*
            loop16:
            do {
                int alt16=2;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==AT) ) {
                    alt16=1;
                }


                switch (alt16) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:82:46: decl_metadata
                    {
                    pushFollow(FOLLOW_decl_metadata_in_decl_field352);
                    decl_metadata();

                    state._fsp--;


                    }
                    break;

                default :
                    break loop16;
                }
            } while (true);


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "decl_field"


    // $ANTLR start "decl_field_initialization"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:85:1: decl_field_initialization : ^( EQUALS VT_PAREN_CHUNK ) ;
    public final void decl_field_initialization() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:86:2: ( ^( EQUALS VT_PAREN_CHUNK ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:86:4: ^( EQUALS VT_PAREN_CHUNK )
            {
            match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization366);

            match(input, Token.DOWN, null);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization368);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "decl_field_initialization"


    // $ANTLR start "template"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:89:1: template : ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ VK_END ) ;
    public final void template() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:90:2: ( ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ VK_END ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:90:4: ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ VK_END )
            {
            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template381);

            match(input, Token.DOWN, null);
            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template383);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:90:33: ( template_slot )+
            int cnt17=0;
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

                if ( (LA17_0==VT_SLOT) ) {
                    alt17=1;
                }


                switch (alt17) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:90:33: template_slot
                    {
                    pushFollow(FOLLOW_template_slot_in_template385);
                    template_slot();

                    state._fsp--;


                    }
                    break;

                default :
                    if ( cnt17 >= 1 ) break loop17;
                        EarlyExitException eee =
                            new EarlyExitException(17, input);
                        throw eee;
                }
                cnt17++;
            } while (true);

            match(input,VK_END,FOLLOW_VK_END_in_template388);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "template"


    // $ANTLR start "template_slot"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:93:1: template_slot : ^( VT_SLOT data_type VT_SLOT_ID ) ;
    public final void template_slot() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:94:2: ( ^( VT_SLOT data_type VT_SLOT_ID ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:94:4: ^( VT_SLOT data_type VT_SLOT_ID )
            {
            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot401);

            match(input, Token.DOWN, null);
            pushFollow(FOLLOW_data_type_in_template_slot403);
            data_type();

            state._fsp--;

            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot405);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "template_slot"


    // $ANTLR start "rule"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:97:1: rule : ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) ;
    public final void rule() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:98:2: ( ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:98:4: ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK )
            {
            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule418);

            match(input, Token.DOWN, null);
            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule420);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:98:25: ( rule_attributes )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==VT_RULE_ATTRIBUTES) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:98:25: rule_attributes
                    {
                    pushFollow(FOLLOW_rule_attributes_in_rule422);
                    rule_attributes();

                    state._fsp--;


                    }
                    break;

            }

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:98:42: ( when_part )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==WHEN) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:98:42: when_part
                    {
                    pushFollow(FOLLOW_when_part_in_rule425);
                    when_part();

                    state._fsp--;


                    }
                    break;

            }

            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule428);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "rule"


    // $ANTLR start "when_part"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:101:1: when_part : WHEN lhs_block ;
    public final void when_part() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:102:2: ( WHEN lhs_block )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:102:4: WHEN lhs_block
            {
            match(input,WHEN,FOLLOW_WHEN_in_when_part440);
            pushFollow(FOLLOW_lhs_block_in_when_part442);
            lhs_block();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "when_part"


    // $ANTLR start "rule_attributes"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:105:1: rule_attributes : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) ;
    public final void rule_attributes() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:106:2: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:106:4: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ )
            {
            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes454);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:106:25: ( VK_ATTRIBUTES )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==VK_ATTRIBUTES) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:106:25: VK_ATTRIBUTES
                    {
                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes456);

                    }
                    break;

            }

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:106:40: ( rule_attribute )+
            int cnt21=0;
            loop21:
            do {
                int alt21=2;
                int LA21_0 = input.LA(1);

                if ( ((LA21_0>=VK_DATE_EFFECTIVE && LA21_0<=VK_RULEFLOW_GROUP)||(LA21_0>=VK_DIALECT && LA21_0<=VK_ENABLED)||LA21_0==VK_DURATION) ) {
                    alt21=1;
                }


                switch (alt21) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:106:40: rule_attribute
                    {
                    pushFollow(FOLLOW_rule_attribute_in_rule_attributes459);
                    rule_attribute();

                    state._fsp--;


                    }
                    break;

                default :
                    if ( cnt21 >= 1 ) break loop21;
                        EarlyExitException eee =
                            new EarlyExitException(21, input);
                        throw eee;
                }
                cnt21++;
            } 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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:109: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 {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:110: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 alt25=12;
            switch ( input.LA(1) ) {
            case VK_SALIENCE:
                {
                alt25=1;
                }
                break;
            case VK_NO_LOOP:
                {
                alt25=2;
                }
                break;
            case VK_AGENDA_GROUP:
                {
                alt25=3;
                }
                break;
            case VK_DURATION:
                {
                alt25=4;
                }
                break;
            case VK_ACTIVATION_GROUP:
                {
                alt25=5;
                }
                break;
            case VK_AUTO_FOCUS:
                {
                alt25=6;
                }
                break;
            case VK_DATE_EFFECTIVE:
                {
                alt25=7;
                }
                break;
            case VK_DATE_EXPIRES:
                {
                alt25=8;
                }
                break;
            case VK_ENABLED:
                {
                alt25=9;
                }
                break;
            case VK_RULEFLOW_GROUP:
                {
                alt25=10;
                }
                break;
            case VK_LOCK_ON_ACTIVE:
                {
                alt25=11;
                }
                break;
            case VK_DIALECT:
                {
                alt25=12;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 25, 0, input);

                throw nvae;
            }

            switch (alt25) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:110:4: ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) )
                    {
                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute473);

                    match(input, Token.DOWN, null);
                    if ( input.LA(1)==VT_PAREN_CHUNK||input.LA(1)==INT ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input, Token.UP, null);

                    }
                    break;
                case 2 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:111:4: ^( VK_NO_LOOP ( BOOL )? )
                    {
                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute487);

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null);
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:111:17: ( BOOL )?
                        int alt22=2;
                        int LA22_0 = input.LA(1);

                        if ( (LA22_0==BOOL) ) {
                            alt22=1;
                        }
                        switch (alt22) {
                            case 1 :
                                // src/main/resources/org/drools/lang/Tree2TestDRL.g:111:17: BOOL
                                {
                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute489);

                                }
                                break;

                        }


                        match(input, Token.UP, null);
                    }

                    }
                    break;
                case 3 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:112:4: ^( VK_AGENDA_GROUP STRING )
                    {
                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute499);

                    match(input, Token.DOWN, null);
                    match(input,STRING,FOLLOW_STRING_in_rule_attribute501);

                    match(input, Token.UP, null);

                    }
                    break;
                case 4 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:113:4: ^( VK_DURATION INT )
                    {
                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute510);

                    match(input, Token.DOWN, null);
                    match(input,INT,FOLLOW_INT_in_rule_attribute512);

                    match(input, Token.UP, null);

                    }
                    break;
                case 5 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:114:4: ^( VK_ACTIVATION_GROUP STRING )
                    {
                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute522);

                    match(input, Token.DOWN, null);
                    match(input,STRING,FOLLOW_STRING_in_rule_attribute524);

                    match(input, Token.UP, null);

                    }
                    break;
                case 6 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:115:4: ^( VK_AUTO_FOCUS ( BOOL )? )
                    {
                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute532);

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null);
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:115:20: ( BOOL )?
                        int alt23=2;
                        int LA23_0 = input.LA(1);

                        if ( (LA23_0==BOOL) ) {
                            alt23=1;
                        }
                        switch (alt23) {
                            case 1 :
                                // src/main/resources/org/drools/lang/Tree2TestDRL.g:115:20: BOOL
                                {
                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute534);

                                }
                                break;

                        }


                        match(input, Token.UP, null);
                    }

                    }
                    break;
                case 7 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:116:4: ^( VK_DATE_EFFECTIVE STRING )
                    {
                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute543);

                    match(input, Token.DOWN, null);
                    match(input,STRING,FOLLOW_STRING_in_rule_attribute545);

                    match(input, Token.UP, null);

                    }
                    break;
                case 8 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:117:4: ^( VK_DATE_EXPIRES STRING )
                    {
                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute553);

                    match(input, Token.DOWN, null);
                    match(input,STRING,FOLLOW_STRING_in_rule_attribute555);

                    match(input, Token.UP, null);

                    }
                    break;
                case 9 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:118:4: ^( VK_ENABLED BOOL )
                    {
                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute563);

                    match(input, Token.DOWN, null);
                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute565);

                    match(input, Token.UP, null);

                    }
                    break;
                case 10 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:119:4: ^( VK_RULEFLOW_GROUP STRING )
                    {
                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute573);

                    match(input, Token.DOWN, null);
                    match(input,STRING,FOLLOW_STRING_in_rule_attribute575);

                    match(input, Token.UP, null);

                    }
                    break;
                case 11 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:120:4: ^( VK_LOCK_ON_ACTIVE ( BOOL )? )
                    {
                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute583);

                    if ( input.LA(1)==Token.DOWN ) {
                        match(input, Token.DOWN, null);
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:120:24: ( BOOL )?
                        int alt24=2;
                        int LA24_0 = input.LA(1);

                        if ( (LA24_0==BOOL) ) {
                            alt24=1;
                        }
                        switch (alt24) {
                            case 1 :
                                // src/main/resources/org/drools/lang/Tree2TestDRL.g:120:24: BOOL
                                {
                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute585);

                                }
                                break;

                        }


                        match(input, Token.UP, null);
                    }

                    }
                    break;
                case 12 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:121:4: ^( VK_DIALECT STRING )
                    {
                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute593);

                    match(input, Token.DOWN, null);
                    match(input,STRING,FOLLOW_STRING_in_rule_attribute595);

                    match(input, Token.UP, null);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "rule_attribute"


    // $ANTLR start "lhs_block"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:124:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
    public final void lhs_block() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:125:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:125:4: ^( VT_AND_IMPLICIT ( lhs )* )
            {
            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block609);

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null);
                // src/main/resources/org/drools/lang/Tree2TestDRL.g:125:22: ( lhs )*
                loop26:
                do {
                    int alt26=2;
                    int LA26_0 = input.LA(1);

                    if ( ((LA26_0>=VT_AND_PREFIX && LA26_0<=VT_OR_INFIX)||LA26_0==VT_PATTERN||LA26_0==VK_EVAL||LA26_0==VK_NOT||(LA26_0>=VK_EXISTS && LA26_0<=VK_FORALL)||LA26_0==FROM) ) {
                        alt26=1;
                    }


                    switch (alt26) {
                    case 1 :
                        // src/main/resources/org/drools/lang/Tree2TestDRL.g:125:22: lhs
                        {
                        pushFollow(FOLLOW_lhs_in_lhs_block611);
                        lhs();

                        state._fsp--;


                        }
                        break;

                    default :
                        break loop26;
                    }
                } while (true);


                match(input, Token.UP, null);
            }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "lhs_block"


    // $ANTLR start "lhs"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:128: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 )+ ) | ^( FROM lhs_pattern from_elements ) | lhs_pattern );
    public final void lhs() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:128: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 )+ ) | ^( FROM lhs_pattern from_elements ) | lhs_pattern )
            int alt30=10;
            switch ( input.LA(1) ) {
            case VT_OR_PREFIX:
                {
                alt30=1;
                }
                break;
            case VT_OR_INFIX:
                {
                alt30=2;
                }
                break;
            case VT_AND_PREFIX:
                {
                alt30=3;
                }
                break;
            case VT_AND_INFIX:
                {
                alt30=4;
                }
                break;
            case VK_EXISTS:
                {
                alt30=5;
                }
                break;
            case VK_NOT:
                {
                alt30=6;
                }
                break;
            case VK_EVAL:
                {
                alt30=7;
                }
                break;
            case VK_FORALL:
                {
                alt30=8;
                }
                break;
            case FROM:
                {
                alt30=9;
                }
                break;
            case VT_PATTERN:
                {
                alt30=10;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 30, 0, input);

                throw nvae;
            }

            switch (alt30) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:128:7: ^( VT_OR_PREFIX ( lhs )+ )
                    {
                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs624);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:128:22: ( lhs )+
                    int cnt27=0;
                    loop27:
                    do {
                        int alt27=2;
                        int LA27_0 = input.LA(1);

                        if ( ((LA27_0>=VT_AND_PREFIX && LA27_0<=VT_OR_INFIX)||LA27_0==VT_PATTERN||LA27_0==VK_EVAL||LA27_0==VK_NOT||(LA27_0>=VK_EXISTS && LA27_0<=VK_FORALL)||LA27_0==FROM) ) {
                            alt27=1;
                        }


                        switch (alt27) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:128:22: lhs
                            {
                            pushFollow(FOLLOW_lhs_in_lhs626);
                            lhs();

                            state._fsp--;


                            }
                            break;

                        default :
                            if ( cnt27 >= 1 ) break loop27;
                                EarlyExitException eee =
                                    new EarlyExitException(27, input);
                                throw eee;
                        }
                        cnt27++;
                    } while (true);


                    match(input, Token.UP, null);

                    }
                    break;
                case 2 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:129:4: ^( VT_OR_INFIX lhs lhs )
                    {
                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs634);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_in_lhs636);
                    lhs();

                    state._fsp--;

                    pushFollow(FOLLOW_lhs_in_lhs638);
                    lhs();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 3 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:130:4: ^( VT_AND_PREFIX ( lhs )+ )
                    {
                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs645);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:130:20: ( lhs )+
                    int cnt28=0;
                    loop28:
                    do {
                        int alt28=2;
                        int LA28_0 = input.LA(1);

                        if ( ((LA28_0>=VT_AND_PREFIX && LA28_0<=VT_OR_INFIX)||LA28_0==VT_PATTERN||LA28_0==VK_EVAL||LA28_0==VK_NOT||(LA28_0>=VK_EXISTS && LA28_0<=VK_FORALL)||LA28_0==FROM) ) {
                            alt28=1;
                        }


                        switch (alt28) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:130:20: lhs
                            {
                            pushFollow(FOLLOW_lhs_in_lhs647);
                            lhs();

                            state._fsp--;


                            }
                            break;

                        default :
                            if ( cnt28 >= 1 ) break loop28;
                                EarlyExitException eee =
                                    new EarlyExitException(28, input);
                                throw eee;
                        }
                        cnt28++;
                    } while (true);


                    match(input, Token.UP, null);

                    }
                    break;
                case 4 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:131:4: ^( VT_AND_INFIX lhs lhs )
                    {
                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs655);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_in_lhs657);
                    lhs();

                    state._fsp--;

                    pushFollow(FOLLOW_lhs_in_lhs659);
                    lhs();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 5 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:132:4: ^( VK_EXISTS lhs )
                    {
                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs666);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_in_lhs668);
                    lhs();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 6 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:133:4: ^( VK_NOT lhs )
                    {
                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs675);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_in_lhs677);
                    lhs();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 7 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:134:4: ^( VK_EVAL VT_PAREN_CHUNK )
                    {
                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs684);

                    match(input, Token.DOWN, null);
                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs686);

                    match(input, Token.UP, null);

                    }
                    break;
                case 8 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:135:4: ^( VK_FORALL ( lhs )+ )
                    {
                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs693);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:135:16: ( lhs )+
                    int cnt29=0;
                    loop29:
                    do {
                        int alt29=2;
                        int LA29_0 = input.LA(1);

                        if ( ((LA29_0>=VT_AND_PREFIX && LA29_0<=VT_OR_INFIX)||LA29_0==VT_PATTERN||LA29_0==VK_EVAL||LA29_0==VK_NOT||(LA29_0>=VK_EXISTS && LA29_0<=VK_FORALL)||LA29_0==FROM) ) {
                            alt29=1;
                        }


                        switch (alt29) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:135:16: lhs
                            {
                            pushFollow(FOLLOW_lhs_in_lhs695);
                            lhs();

                            state._fsp--;


                            }
                            break;

                        default :
                            if ( cnt29 >= 1 ) break loop29;
                                EarlyExitException eee =
                                    new EarlyExitException(29, input);
                                throw eee;
                        }
                        cnt29++;
                    } while (true);


                    match(input, Token.UP, null);

                    }
                    break;
                case 9 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:136:4: ^( FROM lhs_pattern from_elements )
                    {
                    match(input,FROM,FOLLOW_FROM_in_lhs703);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_pattern_in_lhs705);
                    lhs_pattern();

                    state._fsp--;

                    pushFollow(FOLLOW_from_elements_in_lhs707);
                    from_elements();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 10 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:137:4: lhs_pattern
                    {
                    pushFollow(FOLLOW_lhs_pattern_in_lhs713);
                    lhs_pattern();

                    state._fsp--;


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "lhs"


    // $ANTLR start "from_elements"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:140:1: from_elements : ( ^( ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( 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 {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:141:2: ( ^( ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
            int alt34=4;
            switch ( input.LA(1) ) {
            case ACCUMULATE:
                {
                alt34=1;
                }
                break;
            case COLLECT:
                {
                alt34=2;
                }
                break;
            case VK_ENTRY_POINT:
                {
                alt34=3;
                }
                break;
            case VT_FROM_SOURCE:
                {
                alt34=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 34, 0, input);

                throw nvae;
            }

            switch (alt34) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:141:4: ^( ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
                    {
                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_from_elements725);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_in_from_elements727);
                    lhs();

                    state._fsp--;

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:141:21: ( accumulate_init_clause | accumulate_id_clause )
                    int alt31=2;
                    int LA31_0 = input.LA(1);

                    if ( (LA31_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
                        alt31=1;
                    }
                    else if ( (LA31_0==VT_ACCUMULATE_ID_CLAUSE) ) {
                        alt31=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 31, 0, input);

                        throw nvae;
                    }
                    switch (alt31) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:141:22: accumulate_init_clause
                            {
                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements730);
                            accumulate_init_clause();

                            state._fsp--;


                            }
                            break;
                        case 2 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:141:45: accumulate_id_clause
                            {
                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements732);
                            accumulate_id_clause();

                            state._fsp--;


                            }
                            break;

                    }


                    match(input, Token.UP, null);

                    }
                    break;
                case 2 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:142:4: ^( COLLECT lhs )
                    {
                    match(input,COLLECT,FOLLOW_COLLECT_in_from_elements740);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_lhs_in_from_elements742);
                    lhs();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 3 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:143:4: ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID )
                    {
                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements749);

                    match(input, Token.DOWN, null);
                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements751);

                    match(input, Token.UP, null);

                    }
                    break;
                case 4 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:144:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
                    {
                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements758);

                    match(input, Token.DOWN, null);
                    match(input,ID,FOLLOW_ID_in_from_elements760);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:144:24: ( VT_PAREN_CHUNK )?
                    int alt32=2;
                    int LA32_0 = input.LA(1);

                    if ( (LA32_0==VT_PAREN_CHUNK) ) {
                        alt32=1;
                    }
                    switch (alt32) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:144:24: VT_PAREN_CHUNK
                            {
                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements762);

                            }
                            break;

                    }

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:144:40: ( expression_chain )?
                    int alt33=2;
                    int LA33_0 = input.LA(1);

                    if ( (LA33_0==VT_EXPRESSION_CHAIN) ) {
                        alt33=1;
                    }
                    switch (alt33) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:144:40: expression_chain
                            {
                            pushFollow(FOLLOW_expression_chain_in_from_elements765);
                            expression_chain();

                            state._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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:147: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 {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:148:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:148: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_clause779);

            match(input, Token.DOWN, null);
            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause786);

            match(input, Token.DOWN, null);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause788);

            match(input, Token.UP, null);
            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause796);

            match(input, Token.DOWN, null);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause798);

            match(input, Token.UP, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:151:4: ( accumulate_init_reverse_clause )?
            int alt35=2;
            int LA35_0 = input.LA(1);

            if ( (LA35_0==VK_REVERSE) ) {
                alt35=1;
            }
            switch (alt35) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:151:4: accumulate_init_reverse_clause
                    {
                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause805);
                    accumulate_init_reverse_clause();

                    state._fsp--;


                    }
                    break;

            }

            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause812);

            match(input, Token.DOWN, null);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause814);

            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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:155:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
    public final void accumulate_init_reverse_clause() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:156:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:156:4: ^( VK_REVERSE VT_PAREN_CHUNK )
            {
            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause828);

            match(input, Token.DOWN, null);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause830);

            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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:160:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
    public final void accumulate_id_clause() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:161:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:161:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
            {
            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause844);

            match(input, Token.DOWN, null);
            match(input,ID,FOLLOW_ID_in_accumulate_id_clause846);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause848);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "accumulate_id_clause"


    // $ANTLR start "lhs_pattern"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:164:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ( over_clause )? ;
    public final void lhs_pattern() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:165:2: ( ^( VT_PATTERN fact_expression ) ( over_clause )? )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:165:4: ^( VT_PATTERN fact_expression ) ( over_clause )?
            {
            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern861);

            match(input, Token.DOWN, null);
            pushFollow(FOLLOW_fact_expression_in_lhs_pattern863);
            fact_expression();

            state._fsp--;


            match(input, Token.UP, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:165:34: ( over_clause )?
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==OVER) ) {
                alt36=1;
            }
            switch (alt36) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:165:34: over_clause
                    {
                    pushFollow(FOLLOW_over_clause_in_lhs_pattern866);
                    over_clause();

                    state._fsp--;


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "lhs_pattern"


    // $ANTLR start "over_clause"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:168:1: over_clause : ^( OVER ( over_element )+ ) ;
    public final void over_clause() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:169:2: ( ^( OVER ( over_element )+ ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:169:4: ^( OVER ( over_element )+ )
            {
            match(input,OVER,FOLLOW_OVER_in_over_clause879);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:169:11: ( over_element )+
            int cnt37=0;
            loop37:
            do {
                int alt37=2;
                int LA37_0 = input.LA(1);

                if ( (LA37_0==VT_BEHAVIOR) ) {
                    alt37=1;
                }


                switch (alt37) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:169:11: over_element
                    {
                    pushFollow(FOLLOW_over_element_in_over_clause881);
                    over_element();

                    state._fsp--;


                    }
                    break;

                default :
                    if ( cnt37 >= 1 ) break loop37;
                        EarlyExitException eee =
                            new EarlyExitException(37, input);
                        throw eee;
                }
                cnt37++;
            } while (true);


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "over_clause"


    // $ANTLR start "over_element"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:172:1: over_element : ^( VT_BEHAVIOR ID ID VT_PAREN_CHUNK ) ;
    public final void over_element() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:173:2: ( ^( VT_BEHAVIOR ID ID VT_PAREN_CHUNK ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:173:4: ^( VT_BEHAVIOR ID ID VT_PAREN_CHUNK )
            {
            match(input,VT_BEHAVIOR,FOLLOW_VT_BEHAVIOR_in_over_element895);

            match(input, Token.DOWN, null);
            match(input,ID,FOLLOW_ID_in_over_element897);
            match(input,ID,FOLLOW_ID_in_over_element899);
            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_over_element901);

            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "over_element"


    // $ANTLR start "fact_expression"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:176:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT pattern_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_OPERATOR ( VK_NOT )? ( VT_SQUARE_CHUNK )? 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 {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:177:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT pattern_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_OPERATOR ( VK_NOT )? ( VT_SQUARE_CHUNK )? 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 alt47=24;
            switch ( input.LA(1) ) {
            case DOUBLE_PIPE:
                {
                alt47=1;
                }
                break;
            case DOUBLE_AMPER:
                {
                alt47=2;
                }
                break;
            case VT_FACT_BINDING:
                {
                alt47=3;
                }
                break;
            case VT_FACT:
                {
                alt47=4;
                }
                break;
            case VT_FACT_OR:
                {
                alt47=5;
                }
                break;
            case VK_EVAL:
                {
                alt47=6;
                }
                break;
            case VK_IN:
                {
                alt47=7;
                }
                break;
            case EQUAL:
                {
                alt47=8;
                }
                break;
            case GREATER:
                {
                alt47=9;
                }
                break;
            case GREATER_EQUAL:
                {
                alt47=10;
                }
                break;
            case LESS:
                {
                alt47=11;
                }
                break;
            case LESS_EQUAL:
                {
                alt47=12;
                }
                break;
            case NOT_EQUAL:
                {
                alt47=13;
                }
                break;
            case VK_OPERATOR:
                {
                alt47=14;
                }
                break;
            case ID:
                {
                alt47=15;
                }
                break;
            case VT_BIND_FIELD:
                {
                alt47=16;
                }
                break;
            case VT_FIELD:
                {
                alt47=17;
                }
                break;
            case VT_ACCESSOR_PATH:
                {
                alt47=18;
                }
                break;
            case STRING:
                {
                alt47=19;
                }
                break;
            case INT:
                {
                alt47=20;
                }
                break;
            case FLOAT:
                {
                alt47=21;
                }
                break;
            case BOOL:
                {
                alt47=22;
                }
                break;
            case NULL:
                {
                alt47=23;
                }
                break;
            case VT_PAREN_CHUNK:
                {
                alt47=24;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 47, 0, input);

                throw nvae;
            }

            switch (alt47) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:177:4: ^( DOUBLE_PIPE fact_expression fact_expression )
                    {
                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression914);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression916);
                    fact_expression();

                    state._fsp--;

                    pushFollow(FOLLOW_fact_expression_in_fact_expression918);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 2 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:178:4: ^( DOUBLE_AMPER fact_expression fact_expression )
                    {
                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression925);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression927);
                    fact_expression();

                    state._fsp--;

                    pushFollow(FOLLOW_fact_expression_in_fact_expression929);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 3 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:179:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
                    {
                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression936);

                    match(input, Token.DOWN, null);
                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression938);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression940);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 4 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:180:4: ^( VT_FACT pattern_type ( fact_expression )* )
                    {
                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression947);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_pattern_type_in_fact_expression949);
                    pattern_type();

                    state._fsp--;

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:180:27: ( fact_expression )*
                    loop38:
                    do {
                        int alt38=2;
                        int LA38_0 = input.LA(1);

                        if ( (LA38_0==VT_FACT||LA38_0==VT_PAREN_CHUNK||(LA38_0>=VT_FACT_BINDING && LA38_0<=VT_ACCESSOR_PATH)||LA38_0==VK_EVAL||LA38_0==VK_IN||LA38_0==VK_OPERATOR||LA38_0==FLOAT||LA38_0==STRING||LA38_0==BOOL||LA38_0==NULL||(LA38_0>=GREATER && LA38_0<=LESS)||(LA38_0>=DOUBLE_AMPER && LA38_0<=DOUBLE_PIPE)||LA38_0==ID||LA38_0==INT||(LA38_0>=EQUAL && LA38_0<=NOT_EQUAL)) ) {
                            alt38=1;
                        }


                        switch (alt38) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:180:27: fact_expression
                            {
                            pushFollow(FOLLOW_fact_expression_in_fact_expression951);
                            fact_expression();

                            state._fsp--;


                            }
                            break;

                        default :
                            break loop38;
                        }
                    } while (true);


                    match(input, Token.UP, null);

                    }
                    break;
                case 5 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:181:4: ^( VT_FACT_OR fact_expression fact_expression )
                    {
                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression959);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression961);
                    fact_expression();

                    state._fsp--;

                    pushFollow(FOLLOW_fact_expression_in_fact_expression963);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 6 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:182:4: ^( VK_EVAL VT_PAREN_CHUNK )
                    {
                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression970);

                    match(input, Token.DOWN, null);
                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression972);

                    match(input, Token.UP, null);

                    }
                    break;
                case 7 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:183:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
                    {
                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression979);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:183:12: ( VK_NOT )?
                    int alt39=2;
                    int LA39_0 = input.LA(1);

                    if ( (LA39_0==VK_NOT) ) {
                        alt39=1;
                    }
                    switch (alt39) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:183:12: VK_NOT
                            {
                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression981);

                            }
                            break;

                    }

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:183:20: ( fact_expression )+
                    int cnt40=0;
                    loop40:
                    do {
                        int alt40=2;
                        int LA40_0 = input.LA(1);

                        if ( (LA40_0==VT_FACT||LA40_0==VT_PAREN_CHUNK||(LA40_0>=VT_FACT_BINDING && LA40_0<=VT_ACCESSOR_PATH)||LA40_0==VK_EVAL||LA40_0==VK_IN||LA40_0==VK_OPERATOR||LA40_0==FLOAT||LA40_0==STRING||LA40_0==BOOL||LA40_0==NULL||(LA40_0>=GREATER && LA40_0<=LESS)||(LA40_0>=DOUBLE_AMPER && LA40_0<=DOUBLE_PIPE)||LA40_0==ID||LA40_0==INT||(LA40_0>=EQUAL && LA40_0<=NOT_EQUAL)) ) {
                            alt40=1;
                        }


                        switch (alt40) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:183:20: fact_expression
                            {
                            pushFollow(FOLLOW_fact_expression_in_fact_expression984);
                            fact_expression();

                            state._fsp--;


                            }
                            break;

                        default :
                            if ( cnt40 >= 1 ) break loop40;
                                EarlyExitException eee =
                                    new EarlyExitException(40, input);
                                throw eee;
                        }
                        cnt40++;
                    } while (true);


                    match(input, Token.UP, null);

                    }
                    break;
                case 8 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:184:4: ^( EQUAL fact_expression )
                    {
                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression992);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression994);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 9 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:185:4: ^( GREATER fact_expression )
                    {
                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression1001);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1003);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 10 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:186:4: ^( GREATER_EQUAL fact_expression )
                    {
                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression1010);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1012);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 11 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:187:4: ^( LESS fact_expression )
                    {
                    match(input,LESS,FOLLOW_LESS_in_fact_expression1019);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1021);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 12 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:188:4: ^( LESS_EQUAL fact_expression )
                    {
                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression1028);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1030);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 13 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:189:4: ^( NOT_EQUAL fact_expression )
                    {
                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression1037);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1039);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 14 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:190:4: ^( VK_OPERATOR ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression )
                    {
                    match(input,VK_OPERATOR,FOLLOW_VK_OPERATOR_in_fact_expression1046);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:190:18: ( VK_NOT )?
                    int alt41=2;
                    int LA41_0 = input.LA(1);

                    if ( (LA41_0==VK_NOT) ) {
                        alt41=1;
                    }
                    switch (alt41) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:190:18: VK_NOT
                            {
                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1048);

                            }
                            break;

                    }

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:190:26: ( VT_SQUARE_CHUNK )?
                    int alt42=2;
                    int LA42_0 = input.LA(1);

                    if ( (LA42_0==VT_SQUARE_CHUNK) ) {
                        alt42=1;
                    }
                    switch (alt42) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:190:26: VT_SQUARE_CHUNK
                            {
                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1051);

                            }
                            break;

                    }

                    pushFollow(FOLLOW_fact_expression_in_fact_expression1054);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 15 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:191:4: ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression )
                    {
                    match(input,ID,FOLLOW_ID_in_fact_expression1061);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:191:9: ( VK_NOT )?
                    int alt43=2;
                    int LA43_0 = input.LA(1);

                    if ( (LA43_0==VK_NOT) ) {
                        alt43=1;
                    }
                    switch (alt43) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:191:9: VK_NOT
                            {
                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1063);

                            }
                            break;

                    }

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:191:17: ( VT_SQUARE_CHUNK )?
                    int alt44=2;
                    int LA44_0 = input.LA(1);

                    if ( (LA44_0==VT_SQUARE_CHUNK) ) {
                        alt44=1;
                    }
                    switch (alt44) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:191:17: VT_SQUARE_CHUNK
                            {
                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1066);

                            }
                            break;

                    }

                    pushFollow(FOLLOW_fact_expression_in_fact_expression1069);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 16 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:192:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
                    {
                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression1076);

                    match(input, Token.DOWN, null);
                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1078);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1080);
                    fact_expression();

                    state._fsp--;


                    match(input, Token.UP, null);

                    }
                    break;
                case 17 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:193:4: ^( VT_FIELD fact_expression ( fact_expression )? )
                    {
                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression1087);

                    match(input, Token.DOWN, null);
                    pushFollow(FOLLOW_fact_expression_in_fact_expression1089);
                    fact_expression();

                    state._fsp--;

                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:193:31: ( fact_expression )?
                    int alt45=2;
                    int LA45_0 = input.LA(1);

                    if ( (LA45_0==VT_FACT||LA45_0==VT_PAREN_CHUNK||(LA45_0>=VT_FACT_BINDING && LA45_0<=VT_ACCESSOR_PATH)||LA45_0==VK_EVAL||LA45_0==VK_IN||LA45_0==VK_OPERATOR||LA45_0==FLOAT||LA45_0==STRING||LA45_0==BOOL||LA45_0==NULL||(LA45_0>=GREATER && LA45_0<=LESS)||(LA45_0>=DOUBLE_AMPER && LA45_0<=DOUBLE_PIPE)||LA45_0==ID||LA45_0==INT||(LA45_0>=EQUAL && LA45_0<=NOT_EQUAL)) ) {
                        alt45=1;
                    }
                    switch (alt45) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:193:31: fact_expression
                            {
                            pushFollow(FOLLOW_fact_expression_in_fact_expression1091);
                            fact_expression();

                            state._fsp--;


                            }
                            break;

                    }


                    match(input, Token.UP, null);

                    }
                    break;
                case 18 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:194:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
                    {
                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1099);

                    match(input, Token.DOWN, null);
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:194:23: ( accessor_element )+
                    int cnt46=0;
                    loop46:
                    do {
                        int alt46=2;
                        int LA46_0 = input.LA(1);

                        if ( (LA46_0==VT_ACCESSOR_ELEMENT) ) {
                            alt46=1;
                        }


                        switch (alt46) {
                        case 1 :
                            // src/main/resources/org/drools/lang/Tree2TestDRL.g:194:23: accessor_element
                            {
                            pushFollow(FOLLOW_accessor_element_in_fact_expression1101);
                            accessor_element();

                            state._fsp--;


                            }
                            break;

                        default :
                            if ( cnt46 >= 1 ) break loop46;
                                EarlyExitException eee =
                                    new EarlyExitException(46, input);
                                throw eee;
                        }
                        cnt46++;
                    } while (true);


                    match(input, Token.UP, null);

                    }
                    break;
                case 19 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:195:4: STRING
                    {
                    match(input,STRING,FOLLOW_STRING_in_fact_expression1108);

                    }
                    break;
                case 20 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:196:4: INT
                    {
                    match(input,INT,FOLLOW_INT_in_fact_expression1113);

                    }
                    break;
                case 21 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:197:4: FLOAT
                    {
                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression1118);

                    }
                    break;
                case 22 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:198:4: BOOL
                    {
                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression1123);

                    }
                    break;
                case 23 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:199:4: NULL
                    {
                    match(input,NULL,FOLLOW_NULL_in_fact_expression1128);

                    }
                    break;
                case 24 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:200:4: VT_PAREN_CHUNK
                    {
                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1133);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "fact_expression"


    // $ANTLR start "pattern_type"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:203:1: pattern_type : ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
    public final void pattern_type() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:204:2: ( ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:204:4: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
            {
            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type1145);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:204:22: ( ID )+
            int cnt48=0;
            loop48:
            do {
                int alt48=2;
                int LA48_0 = input.LA(1);

                if ( (LA48_0==ID) ) {
                    alt48=1;
                }


                switch (alt48) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:204:22: ID
                    {
                    match(input,ID,FOLLOW_ID_in_pattern_type1147);

                    }
                    break;

                default :
                    if ( cnt48 >= 1 ) break loop48;
                        EarlyExitException eee =
                            new EarlyExitException(48, input);
                        throw eee;
                }
                cnt48++;
            } while (true);

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:204:26: ( dimension_definition )*
            loop49:
            do {
                int alt49=2;
                int LA49_0 = input.LA(1);

                if ( (LA49_0==LEFT_SQUARE) ) {
                    alt49=1;
                }


                switch (alt49) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:204:26: dimension_definition
                    {
                    pushFollow(FOLLOW_dimension_definition_in_pattern_type1150);
                    dimension_definition();

                    state._fsp--;


                    }
                    break;

                default :
                    break loop49;
                }
            } while (true);


            match(input, Token.UP, null);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "pattern_type"


    // $ANTLR start "data_type"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:207:1: data_type : ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
    public final void data_type() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:208:2: ( ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:208:4: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
            {
            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1164);

            match(input, Token.DOWN, null);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:208:19: ( ID )+
            int cnt50=0;
            loop50:
            do {
                int alt50=2;
                int LA50_0 = input.LA(1);

                if ( (LA50_0==ID) ) {
                    alt50=1;
                }


                switch (alt50) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:208:19: ID
                    {
                    match(input,ID,FOLLOW_ID_in_data_type1166);

                    }
                    break;

                default :
                    if ( cnt50 >= 1 ) break loop50;
                        EarlyExitException eee =
                            new EarlyExitException(50, input);
                        throw eee;
                }
                cnt50++;
            } while (true);

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:208:23: ( dimension_definition )*
            loop51:
            do {
                int alt51=2;
                int LA51_0 = input.LA(1);

                if ( (LA51_0==LEFT_SQUARE) ) {
                    alt51=1;
                }


                switch (alt51) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:208:23: dimension_definition
                    {
                    pushFollow(FOLLOW_dimension_definition_in_data_type1169);
                    dimension_definition();

                    state._fsp--;


                    }
                    break;

                default :
                    break loop51;
                }
            } 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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:211:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
    public final void dimension_definition() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:212:2: ( LEFT_SQUARE RIGHT_SQUARE )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:212:4: LEFT_SQUARE RIGHT_SQUARE
            {
            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1182);
            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1184);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "dimension_definition"


    // $ANTLR start "accessor_element"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:215:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
    public final void accessor_element() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:216:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:216:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
            {
            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1196);

            match(input, Token.DOWN, null);
            match(input,ID,FOLLOW_ID_in_accessor_element1198);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:216:29: ( VT_SQUARE_CHUNK )*
            loop52:
            do {
                int alt52=2;
                int LA52_0 = input.LA(1);

                if ( (LA52_0==VT_SQUARE_CHUNK) ) {
                    alt52=1;
                }


                switch (alt52) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:216:29: VT_SQUARE_CHUNK
                    {
                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1200);

                    }
                    break;

                default :
                    break loop52;
                }
            } 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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:219:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
    public final void expression_chain() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
            {
            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1214);

            match(input, Token.DOWN, null);
            match(input,ID,FOLLOW_ID_in_expression_chain1216);
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:29: ( VT_SQUARE_CHUNK )?
            int alt53=2;
            int LA53_0 = input.LA(1);

            if ( (LA53_0==VT_SQUARE_CHUNK) ) {
                alt53=1;
            }
            switch (alt53) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:29: VT_SQUARE_CHUNK
                    {
                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1218);

                    }
                    break;

            }

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:46: ( VT_PAREN_CHUNK )?
            int alt54=2;
            int LA54_0 = input.LA(1);

            if ( (LA54_0==VT_PAREN_CHUNK) ) {
                alt54=1;
            }
            switch (alt54) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:46: VT_PAREN_CHUNK
                    {
                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1221);

                    }
                    break;

            }

            // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:62: ( expression_chain )?
            int alt55=2;
            int LA55_0 = input.LA(1);

            if ( (LA55_0==VT_EXPRESSION_CHAIN) ) {
                alt55=1;
            }
            switch (alt55) {
                case 1 :
                    // src/main/resources/org/drools/lang/Tree2TestDRL.g:220:62: expression_chain
                    {
                    pushFollow(FOLLOW_expression_chain_in_expression_chain1224);
                    expression_chain();

                    state._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"
    // src/main/resources/org/drools/lang/Tree2TestDRL.g:223:1: curly_chunk : VT_CURLY_CHUNK ;
    public final void curly_chunk() throws RecognitionException {
        try {
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:224:2: ( VT_CURLY_CHUNK )
            // src/main/resources/org/drools/lang/Tree2TestDRL.g:224:4: VT_CURLY_CHUNK
            {
            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1238);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "curly_chunk"

    // Delegated rules


 

    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[]{0x5CFF000000000028L,0x000000000000007AL,0x0000000000000000L,0x0000000000004200L});
    public static final BitSet FOLLOW_statement_in_compilation_unit48 = new BitSet(new long[]{0x5CFF000000000028L,0x000000000000007AL,0x0000000000000000L,0x0000000000004200L});
    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,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    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_type_declaration_in_statement136 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VK_IMPORT_in_import_statement148 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_import_name_in_import_statement150 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement163 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement165 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_import_name_in_function_import_statement167 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name180 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_import_name182 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000000120L});
    public static final BitSet FOLLOW_DOT_STAR_in_import_name185 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_GLOBAL_in_global199 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_data_type_in_global201 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global203 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_FUNCTION_in_function216 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_data_type_in_function218 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function221 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_parameters_in_function223 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_curly_chunk_in_function225 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_QUERY_in_query238 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_QUERY_ID_in_query240 = new BitSet(new long[]{0x0000200000200000L});
    public static final BitSet FOLLOW_parameters_in_query242 = new BitSet(new long[]{0x0000200000200000L});
    public static final BitSet FOLLOW_lhs_block_in_query245 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
    public static final BitSet FOLLOW_VK_END_in_query247 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters260 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_param_definition_in_parameters262 = new BitSet(new long[]{0x0000008000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_data_type_in_param_definition275 = new BitSet(new long[]{0x0000008000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_argument_in_param_definition278 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ID_in_argument289 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_dimension_definition_in_argument291 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_VK_DECLARE_in_type_declaration304 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration306 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L,0x0000000000800000L,0x0000000000000020L});
    public static final BitSet FOLLOW_decl_metadata_in_type_declaration308 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L,0x0000000000800000L,0x0000000000000020L});
    public static final BitSet FOLLOW_decl_field_in_type_declaration311 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_VK_END_in_type_declaration314 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_AT_in_decl_metadata327 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_decl_metadata329 = new BitSet(new long[]{0x0000000000080008L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_metadata331 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ID_in_decl_field345 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_decl_field_initialization_in_decl_field347 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_data_type_in_decl_field350 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000800000L});
    public static final BitSet FOLLOW_decl_metadata_in_decl_field352 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000000000800000L});
    public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization366 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization368 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_TEMPLATE_in_template381 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template383 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_template_slot_in_template385 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L,0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_VK_END_in_template388 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_SLOT_in_template_slot401 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_data_type_in_template_slot403 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
    public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot405 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_RULE_in_rule418 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_RULE_ID_in_rule420 = new BitSet(new long[]{0x0000000000014000L,0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_rule_attributes_in_rule422 = new BitSet(new long[]{0x0000000000010000L,0x0000000000000000L,0x0000000000400000L});
    public static final BitSet FOLLOW_when_part_in_rule425 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule428 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_WHEN_in_when_part440 = new BitSet(new long[]{0x0000200000200000L});
    public static final BitSet FOLLOW_lhs_block_in_when_part442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes454 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes456 = new BitSet(new long[]{0x1CFF000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes459 = new BitSet(new long[]{0x1CFF000000000008L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute473 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_set_in_rule_attribute475 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute487 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_BOOL_in_rule_attribute489 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute499 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STRING_in_rule_attribute501 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute510 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_INT_in_rule_attribute512 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute522 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STRING_in_rule_attribute524 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute532 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_BOOL_in_rule_attribute534 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute543 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STRING_in_rule_attribute545 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute553 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STRING_in_rule_attribute555 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute563 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_BOOL_in_rule_attribute565 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute573 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STRING_in_rule_attribute575 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute583 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_BOOL_in_rule_attribute585 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute593 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_STRING_in_rule_attribute595 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block609 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs_block611 = new BitSet(new long[]{0x0000000103C00008L,0x0000000000006280L,0x0000000000040000L});
    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs624 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs626 = new BitSet(new long[]{0x0000000103C00008L,0x0000000000006280L,0x0000000000040000L});
    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs634 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs636 = new BitSet(new long[]{0x0000000103C00008L,0x0000000000006280L,0x0000000000040000L});
    public static final BitSet FOLLOW_lhs_in_lhs638 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs645 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs647 = new BitSet(new long[]{0x0000000103C00008L,0x0000000000006280L,0x0000000000040000L});
    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs655 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs657 = new BitSet(new long[]{0x0000000103C00008L,0x0000000000006280L,0x0000000000040000L});
    public static final BitSet FOLLOW_lhs_in_lhs659 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_EXISTS_in_lhs666 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs668 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_NOT_in_lhs675 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs677 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_EVAL_in_lhs684 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs686 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_FORALL_in_lhs693 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_lhs695 = new BitSet(new long[]{0x0000000103C00008L,0x0000000000006280L,0x0000000000040000L});
    public static final BitSet FOLLOW_FROM_in_lhs703 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_pattern_in_lhs705 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000100L,0x0000000000030000L});
    public static final BitSet FOLLOW_from_elements_in_lhs707 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_lhs_pattern_in_lhs713 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ACCUMULATE_in_from_elements725 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_from_elements727 = new BitSet(new long[]{0x000000000C000000L});
    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements730 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements732 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_COLLECT_in_from_elements740 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_lhs_in_from_elements742 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements749 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements751 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements758 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_from_elements760 = new BitSet(new long[]{0x0000000020080008L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements762 = new BitSet(new long[]{0x0000000020000008L});
    public static final BitSet FOLLOW_expression_chain_in_from_elements765 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause779 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause786 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause788 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause796 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause798 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause805 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause812 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause814 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause828 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause830 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause844 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_accumulate_id_clause846 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause848 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern861 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern863 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_over_clause_in_lhs_pattern866 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_OVER_in_over_clause879 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_over_element_in_over_clause881 = new BitSet(new long[]{0x0000000000100008L});
    public static final BitSet FOLLOW_VT_BEHAVIOR_in_over_element895 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_over_element897 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_ID_in_over_element899 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_over_element901 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression914 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression916 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression918 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression925 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression927 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression929 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression936 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression938 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression940 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_FACT_in_fact_expression947 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_pattern_type_in_fact_expression949 = new BitSet(new long[]{0x0000003E00080048L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression951 = new BitSet(new long[]{0x0000003E00080048L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression959 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression961 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression963 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression970 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression972 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_IN_in_fact_expression979 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VK_NOT_in_fact_expression981 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression984 = new BitSet(new long[]{0x0000003E00080048L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_EQUAL_in_fact_expression992 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression994 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_GREATER_in_fact_expression1001 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1003 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression1010 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1012 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LESS_in_fact_expression1019 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1021 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression1028 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1030 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression1037 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1039 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VK_OPERATOR_in_fact_expression1046 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1048 = new BitSet(new long[]{0x0000003E000C0040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1051 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1054 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ID_in_fact_expression1061 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1063 = new BitSet(new long[]{0x0000003E000C0040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1066 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1069 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1076 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1078 = new BitSet(new long[]{0x0000003E00080040L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1080 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1087 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1089 = new BitSet(new long[]{0x0000003E00080048L,0x0000000000080480L,0x0030060000088820L,0x000000000007A020L});
    public static final BitSet FOLLOW_fact_expression_in_fact_expression1091 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1099 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_accessor_element_in_fact_expression1101 = new BitSet(new long[]{0x0000004000000008L});
    public static final BitSet FOLLOW_STRING_in_fact_expression1108 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INT_in_fact_expression1113 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FLOAT_in_fact_expression1118 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BOOL_in_fact_expression1123 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NULL_in_fact_expression1128 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1133 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VT_PATTERN_TYPE_in_pattern_type1145 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_pattern_type1147 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000400000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_dimension_definition_in_pattern_type1150 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1164 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_data_type1166 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000400000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_dimension_definition_in_data_type1169 = new BitSet(new long[]{0x0000000000000008L,0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1182 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000800000000000L});
    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition1184 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1196 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_accessor_element1198 = new BitSet(new long[]{0x0000000000040008L});
    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1200 = new BitSet(new long[]{0x0000000000040008L});
    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1214 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_expression_chain1216 = new BitSet(new long[]{0x00000000200C0008L});
    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1218 = new BitSet(new long[]{0x0000000020080008L});
    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1221 = new BitSet(new long[]{0x0000000020000008L});
    public static final BitSet FOLLOW_expression_chain_in_expression_chain1224 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1238 = new BitSet(new long[]{0x0000000000000002L});

}
