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


        Object root_0 = null;

        EsperParser.conditionaloperator_return conditionaloperator38 =null;

        EsperParser.expr_return expr39 =null;

        EsperParser.expr_return expr40 =null;



        try {
            // C:\\Users\\Alex\\Dropbox\\EclipseWorkspace\\esper-compiler\\src\\compiler\\Esper.g:50:11: ( conditionaloperator ^ expr expr )
            // C:\\Users\\Alex\\Dropbox\\EclipseWorkspace\\esper-compiler\\src\\compiler\\Esper.g:50:13: conditionaloperator ^ expr expr
            {
            root_0 = (Object)adaptor.nil();


            pushFollow(FOLLOW_conditionaloperator_in_condition429);
            conditionaloperator38=conditionaloperator();

            state._fsp--;

            root_0 = (Object)adaptor.becomeRoot(conditionaloperator38.getTree(), root_0);

            pushFollow(FOLLOW_expr_in_condition432);
            expr39=expr();

            state._fsp--;

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

            pushFollow(FOLLOW_expr_in_condition434);
            expr40=expr();

            state._fsp--;

            adaptor.addChild(root_0, expr40.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;
    }