public final void returnStmt() throws RecognitionException
    {
        
        AST ast1 = null;
        
        try {
            // CPP.g:459:3: ( 'return' ( expr )? ';' )
            // CPP.g:459:5: 'return' ( expr )? ';'
            {
                this.match(this.input, 56, FOLLOW_56_in_returnStmt1872);
                if (this.state.failed) {
                    return;
                }
                // CPP.g:460:5: ( expr )?
                int alt25 = 2;
                int LA25_0 = this.input.LA(1);
                
                if ((((LA25_0 >= IDENTIFIER) && (LA25_0 <= FLOATING_POINT_LITERAL)) || (LA25_0 == 30) || (LA25_0 == 42)
                        || (LA25_0 == 44) || ((LA25_0 >= 80) && (LA25_0 <= 81)) || ((LA25_0 >= 84) && (LA25_0 <= 87)))) {
                    alt25 = 1;
                }
                switch (alt25)
                {
                    case 1:
                        // CPP.g:460:6: expr
                    {
                        this.pushFollow(FOLLOW_expr_in_returnStmt1880);
                        this.expr();
                        
                        this.state._fsp--;
                        if (this.state.failed) {
                            return;
                        }
                        if (this.state.backtracking == 0) {
                            ast1 = this.out;
                            this.out = null;
                        }
                        
                    }
                        break;
                    
                }
                
                this.match(this.input, 23, FOLLOW_23_in_returnStmt1891);
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    
                    if (ast1 != null) {
                        this.out = new RetStmtAST((ExprAST) ast1);
                    }
                    else {
                        this.out = new RetStmtAST();
                    }
                    
                }
                
            }
            
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }