public final void exprPostfixEx() throws RecognitionException
    {
        Token op = null;
        
        AST ast1 = null;
        int type = 0;
        
        try {
            // CPP.g:765:3: ( (op= '++' | op= '--' ) exprPostfixEx | )
            int alt49 = 2;
            int LA49_0 = this.input.LA(1);
            
            if ((((LA49_0 >= 84) && (LA49_0 <= 85)))) {
                alt49 = 1;
            }
            else if (((LA49_0 == EOF) || ((LA49_0 >= 23) && (LA49_0 <= 24)) || ((LA49_0 >= 26) && (LA49_0 <= 27))
                    || ((LA49_0 >= 29) && (LA49_0 <= 30)) || ((LA49_0 >= 43) && (LA49_0 <= 44)) || (LA49_0 == 52) || ((LA49_0 >= 57) && (LA49_0 <= 83)))) {
                alt49 = 2;
            }
            else {
                if (this.state.backtracking > 0) {
                    this.state.failed = true;
                    return;
                }
                NoViableAltException nvae = new NoViableAltException("", 49, 0, this.input);
                
                throw nvae;
            }
            switch (alt49)
            {
                case 1:
                    // CPP.g:765:5: (op= '++' | op= '--' ) exprPostfixEx
                {
                    if (this.state.backtracking == 0) {
                        ast1 = this.in;
                    }
                    // CPP.g:766:5: (op= '++' | op= '--' )
                    int alt48 = 2;
                    int LA48_0 = this.input.LA(1);
                    
                    if ((LA48_0 == 84)) {
                        alt48 = 1;
                    }
                    else if ((LA48_0 == 85)) {
                        alt48 = 2;
                    }
                    else {
                        if (this.state.backtracking > 0) {
                            this.state.failed = true;
                            return;
                        }
                        NoViableAltException nvae = new NoViableAltException("", 48, 0, this.input);
                        
                        throw nvae;
                    }
                    switch (alt48)
                    {
                        case 1:
                            // CPP.g:766:7: op= '++'
                        {
                            op = (Token) this.match(this.input, 84, FOLLOW_84_in_exprPostfixEx3456);
                            if (this.state.failed) {
                                return;
                            }
                            if (this.state.backtracking == 0) {
                                type = UnaryExprAST.POST_INC;
                            }
                            
                        }
                            break;
                        case 2:
                            // CPP.g:767:7: op= '--'
                        {
                            op = (Token) this.match(this.input, 85, FOLLOW_85_in_exprPostfixEx3469);
                            if (this.state.failed) {
                                return;
                            }
                            if (this.state.backtracking == 0) {
                                type = UnaryExprAST.POST_DEC;
                            }
                            
                        }
                            break;
                        
                    }
                    
                    if (this.state.backtracking == 0) {
                        this.in = new UnaryExprAST(type, op, (ExprAST) ast1);
                    }
                    this.pushFollow(FOLLOW_exprPostfixEx_in_exprPostfixEx3491);
                    this.exprPostfixEx();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                case 2:
                    // CPP.g:771:5:
                {
                    if (this.state.backtracking == 0) {
                        this.out = this.in;
                    }
                    
                }
                    break;
                
            }
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }