public final void exprBITWISE_XOREx() throws RecognitionException
    {
        Token op = null;
        
        AST ast1 = null, ast2 = null;
        
        try {
            // CPP.g:608:3: (op= '^' exprBITWISE_AND exprBITWISE_XOREx | )
            int alt34 = 2;
            int LA34_0 = this.input.LA(1);
            
            if ((LA34_0 == 71)) {
                alt34 = 1;
            }
            else if (((LA34_0 == EOF) || ((LA34_0 >= 23) && (LA34_0 <= 24)) || ((LA34_0 >= 26) && (LA34_0 <= 27))
                    || (LA34_0 == 29) || (LA34_0 == 43) || (LA34_0 == 52) || ((LA34_0 >= 57) && (LA34_0 <= 70)))) {
                alt34 = 2;
            }
            else {
                if (this.state.backtracking > 0) {
                    this.state.failed = true;
                    return;
                }
                NoViableAltException nvae = new NoViableAltException("", 34, 0, this.input);
                
                throw nvae;
            }
            switch (alt34)
            {
                case 1:
                    // CPP.g:608:5: op= '^' exprBITWISE_AND exprBITWISE_XOREx
                {
                    if (this.state.backtracking == 0) {
                        ast1 = this.in;
                    }
                    op = (Token) this.match(this.input, 71, FOLLOW_71_in_exprBITWISE_XOREx2609);
                    if (this.state.failed) {
                        return;
                    }
                    this.pushFollow(FOLLOW_exprBITWISE_AND_in_exprBITWISE_XOREx2616);
                    this.exprBITWISE_AND();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    if (this.state.backtracking == 0) {
                        ast2 = this.out;
                        this.out = null;
                    }
                    if (this.state.backtracking == 0) {
                        this.in = new BinExprAST((ExprAST) ast1, BinExprAST.XOR, op, (ExprAST) ast2);
                    }
                    this.pushFollow(FOLLOW_exprBITWISE_XOREx_in_exprBITWISE_XOREx2630);
                    this.exprBITWISE_XOREx();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                case 2:
                    // CPP.g:613:5:
                {
                    if (this.state.backtracking == 0) {
                        this.out = this.in;
                    }
                    
                }
                    break;
                
            }
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }