public final LogoParser.repeat_return repeat() throws RecognitionException {
        LogoParser.repeat_return retval = new LogoParser.repeat_return();
        retval.start = input.LT(1);


        Object root_0 = null;

        Token REPEAT24=null;
        LogoParser.expression_return expression25 =null;

        LogoParser.block_return block26 =null;


        Object REPEAT24_tree=null;

        try {
            // /home/carlos/Proyectos/logojava/Logo.g:77:2: ( REPEAT expression block )
            // /home/carlos/Proyectos/logojava/Logo.g:77:4: REPEAT expression block
            {
            root_0 = (Object)adaptor.nil();


            REPEAT24=(Token)match(input,REPEAT,FOLLOW_REPEAT_in_repeat353); 
            REPEAT24_tree = 
            (Object)adaptor.create(REPEAT24)
            ;
            adaptor.addChild(root_0, REPEAT24_tree);


            pushFollow(FOLLOW_expression_in_repeat355);
            expression25=expression();

            state._fsp--;

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

            pushFollow(FOLLOW_block_in_repeat357);
            block26=block();

            state._fsp--;

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

             retval.value = new Repeat((expression25!=null?expression25.value:null),(block26!=null?block26.value:null));

            }

            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;
    }