public final void funcDecl() throws RecognitionException
    {
        Token id = null;
        
        AST ast1 = null, ast2 = null, ast3 = null;
        
        try {
            // CPP.g:241:3: ( type id= IDENTIFIER '(' paraList ')' blockStmt )
            // CPP.g:241:5: type id= IDENTIFIER '(' paraList ')' blockStmt
            {
                this.pushFollow(FOLLOW_type_in_funcDecl912);
                this.type();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast1 = this.out;
                    this.out = null;
                }
                id = (Token) this.match(this.input, IDENTIFIER, FOLLOW_IDENTIFIER_in_funcDecl922);
                if (this.state.failed) {
                    return;
                }
                this.match(this.input, 42, FOLLOW_42_in_funcDecl929);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_paraList_in_funcDecl936);
                this.paraList();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast2 = this.out;
                    this.out = null;
                }
                this.match(this.input, 43, FOLLOW_43_in_funcDecl944);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_blockStmt_in_funcDecl951);
                this.blockStmt();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast3 = this.out;
                    this.out = null;
                }
                if (this.state.backtracking == 0) {
                    this.out = new FuncDeclAST(id, (ParaListAST) ast2, (TypeAST) ast1, (CompStmtAST) ast3);
                }
                
            }
            
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }