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


        Object root_0 = null;

        Token char_literal9=null;
        Token EOL10=null;
        LogoParser.sentence_return s1 =null;

        LogoParser.sentence_return s2 =null;


        Object char_literal9_tree=null;
        Object EOL10_tree=null;

        try {
            // /home/carlos/Proyectos/logojava/Logo.g:47:2: (s1= sentence ( ':' s2= sentence )* EOL )
            // /home/carlos/Proyectos/logojava/Logo.g:48:3: s1= sentence ( ':' s2= sentence )* EOL
            {
            root_0 = (Object)adaptor.nil();


             List<Sentence> sentences = new ArrayList<Sentence>();

            pushFollow(FOLLOW_sentence_in_singleLine145);
            s1=sentence();

            state._fsp--;

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

             sentences.add((s1!=null?s1.value:null));

            // /home/carlos/Proyectos/logojava/Logo.g:50:3: ( ':' s2= sentence )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==COLON) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // /home/carlos/Proyectos/logojava/Logo.g:50:4: ':' s2= sentence
            	    {
            	    char_literal9=(Token)match(input,COLON,FOLLOW_COLON_in_singleLine153); 
            	    char_literal9_tree = 
            	    (Object)adaptor.create(char_literal9)
            	    ;
            	    adaptor.addChild(root_0, char_literal9_tree);


            	    pushFollow(FOLLOW_sentence_in_singleLine157);
            	    s2=sentence();

            	    state._fsp--;

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

            	     sentences.add((s2!=null?s2.value:null));

            	    }
            	    break;

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


            EOL10=(Token)match(input,EOL,FOLLOW_EOL_in_singleLine168); 
            EOL10_tree = 
            (Object)adaptor.create(EOL10)
            ;
            adaptor.addChild(root_0, EOL10_tree);


             retval.value = new Statement(sentences); 

            }

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