public final void pointerTypeRest() throws RecognitionException
    {
        
        AST ast1 = null;
        
        try {
            // CPP.g:207:3: ( '*' | '*' pointerTypeRest )
            int alt13 = 2;
            int LA13_0 = this.input.LA(1);
            
            if ((LA13_0 == 30)) {
                int LA13_1 = this.input.LA(2);
                
                if (((LA13_1 == IDENTIFIER) || (LA13_1 == 44))) {
                    alt13 = 1;
                }
                else if ((LA13_1 == 30)) {
                    alt13 = 2;
                }
                else {
                    if (this.state.backtracking > 0) {
                        this.state.failed = true;
                        return;
                    }
                    NoViableAltException nvae = new NoViableAltException("", 13, 1, this.input);
                    
                    throw nvae;
                }
            }
            else {
                if (this.state.backtracking > 0) {
                    this.state.failed = true;
                    return;
                }
                NoViableAltException nvae = new NoViableAltException("", 13, 0, this.input);
                
                throw nvae;
            }
            switch (alt13)
            {
                case 1:
                    // CPP.g:207:5: '*'
                {
                    if (this.state.backtracking == 0) {
                        ast1 = this.in;
                    }
                    this.match(this.input, 30, FOLLOW_30_in_pointerTypeRest748);
                    if (this.state.failed) {
                        return;
                    }
                    if (this.state.backtracking == 0) {
                        this.out = new PointerTypeAST((TypeAST) ast1);
                    }
                    
                }
                    break;
                case 2:
                    // CPP.g:209:5: '*' pointerTypeRest
                {
                    if (this.state.backtracking == 0) {
                        ast1 = this.in;
                    }
                    this.match(this.input, 30, FOLLOW_30_in_pointerTypeRest762);
                    if (this.state.failed) {
                        return;
                    }
                    if (this.state.backtracking == 0) {
                        this.in = new PointerTypeAST((TypeAST) ast1);
                    }
                    this.pushFollow(FOLLOW_pointerTypeRest_in_pointerTypeRest770);
                    this.pointerTypeRest();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                
            }
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }