public final EsperParser.declaration_return declaration() throws RecognitionException {
        EsperParser.declaration_return retval = new EsperParser.declaration_return();
        retval.start = input.LT(1);


        Object root_0 = null;

        Token DECLARE21=null;
        Token IDENTIFIER22=null;
        EsperParser.vartype_return vartype23 =null;


        Object DECLARE21_tree=null;
        Object IDENTIFIER22_tree=null;

        try {
            // C:\\Users\\Alex\\Dropbox\\EclipseWorkspace\\esper-compiler\\src\\compiler\\Esper.g:44:13: ( DECLARE ^ IDENTIFIER vartype )
            // C:\\Users\\Alex\\Dropbox\\EclipseWorkspace\\esper-compiler\\src\\compiler\\Esper.g:44:15: DECLARE ^ IDENTIFIER vartype
            {
            root_0 = (Object)adaptor.nil();


            DECLARE21=(Token)match(input,DECLARE,FOLLOW_DECLARE_in_declaration351); 
            DECLARE21_tree = 
            (Object)adaptor.create(DECLARE21)
            ;
            root_0 = (Object)adaptor.becomeRoot(DECLARE21_tree, root_0);


            IDENTIFIER22=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_declaration354); 
            IDENTIFIER22_tree = 
            (Object)adaptor.create(IDENTIFIER22)
            ;
            adaptor.addChild(root_0, IDENTIFIER22_tree);


            pushFollow(FOLLOW_vartype_in_declaration356);
            vartype23=vartype();

            state._fsp--;

            adaptor.addChild(root_0, vartype23.getTree());

            }

            retval.stop = input.LT(-1);


            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }