public final JPoclASTParser.returnFunctionDecl_return returnFunctionDecl() throws RecognitionException {
        JPoclASTParser.returnFunctionDecl_return retval = new JPoclASTParser.returnFunctionDecl_return();
        retval.start = input.LT(1);


        TypeTree root_0 = null;

        Token string_literal36=null;
        Token string_literal37=null;
        Token string_literal38=null;
        Token string_literal39=null;
        Token ID40=null;

        TypeTree string_literal36_tree=null;
        TypeTree string_literal37_tree=null;
        TypeTree string_literal38_tree=null;
        TypeTree string_literal39_tree=null;
        TypeTree ID40_tree=null;

        try {
            // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:62:20: ( 'int' | 'bool' | 'void' | 'struct' ! ID ^)
            int alt6=4;
            switch ( input.LA(1) ) {
            case 41:
                {
                alt6=1;
                }
                break;
            case 39:
                {
                alt6=2;
                }
                break;
            case 44:
                {
                alt6=3;
                }
                break;
            case 43:
                {
                alt6=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;

            }

            switch (alt6) {
                case 1 :
                    // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:62:22: 'int'
                    {
                    root_0 = (TypeTree)adaptor.nil();


                    string_literal36=(Token)match(input,41,FOLLOW_41_in_returnFunctionDecl365); 
                    string_literal36_tree = 
                    (TypeTree)adaptor.create(string_literal36)
                    ;
                    adaptor.addChild(root_0, string_literal36_tree);


                    }
                    break;
                case 2 :
                    // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:63:13: 'bool'
                    {
                    root_0 = (TypeTree)adaptor.nil();


                    string_literal37=(Token)match(input,39,FOLLOW_39_in_returnFunctionDecl379); 
                    string_literal37_tree = 
                    (TypeTree)adaptor.create(string_literal37)
                    ;
                    adaptor.addChild(root_0, string_literal37_tree);


                    }
                    break;
                case 3 :
                    // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:64:13: 'void'
                    {
                    root_0 = (TypeTree)adaptor.nil();


                    string_literal38=(Token)match(input,44,FOLLOW_44_in_returnFunctionDecl393); 
                    string_literal38_tree = 
                    (TypeTree)adaptor.create(string_literal38)
                    ;
                    adaptor.addChild(root_0, string_literal38_tree);


                    }
                    break;
                case 4 :
                    // C:\\Users\\pc\\Desktop\\IPL\\ew\\JPocl\\JPoclAST.g:65:13: 'struct' ! ID ^
                    {
                    root_0 = (TypeTree)adaptor.nil();


                    string_literal39=(Token)match(input,43,FOLLOW_43_in_returnFunctionDecl407); 

                    ID40=(Token)match(input,ID,FOLLOW_ID_in_returnFunctionDecl410); 
                    ID40_tree = 
                    (TypeTree)adaptor.create(ID40)
                    ;
                    root_0 = (TypeTree)adaptor.becomeRoot(ID40_tree, root_0);


                    }
                    break;

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


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

        }

        catch (RecognitionException re) {
        	reportError(re);
        }

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