public final void forInit() throws RecognitionException
    {
        
        AST ast1 = null;
        
        try {
            // CPP.g:380:3: ( varDecl | exprList ';' | ';' )
            int alt24 = 3;
            switch (this.input.LA(1))
            {
                case 31:
                case 32:
                case 33:
                case 34:
                case 35:
                case 36:
                case 37:
                case 38:
                case 39:
                case 40:
                case 41:
                {
                    alt24 = 1;
                }
                    break;
                case IDENTIFIER:
                case CHARACTER_LITERAL:
                case STRING_LITERAL:
                case HEX_LITERAL:
                case DECIMAL_LITERAL:
                case OCTAL_LITERAL:
                case FLOATING_POINT_LITERAL:
                case 30:
                case 42:
                case 44:
                case 80:
                case 81:
                case 84:
                case 85:
                case 86:
                case 87:
                {
                    alt24 = 2;
                }
                    break;
                case 23:
                {
                    
                    if ((this.synpred47_CPP())) {
                        alt24 = 2;
                    }
                    else if ((true)) {
                        alt24 = 3;
                    }
//                    else {
//                        if (this.state.backtracking > 0) {
//                            this.state.failed = true;
//                            return;
//                        }
//                        NoViableAltException nvae = new NoViableAltException("", 24, 3, this.input);
//                        
//                        throw nvae;
//                    }
                }
                    break;
                default:
                    if (this.state.backtracking > 0) {
                        this.state.failed = true;
                        return;
                    }
                    NoViableAltException nvae = new NoViableAltException("", 24, 0, this.input);
                    
                    throw nvae;
            }
            
            switch (alt24)
            {
                case 1:
                    // CPP.g:380:5: varDecl
                {
                    this.pushFollow(FOLLOW_varDecl_in_forInit1518);
                    this.varDecl();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    if (this.state.backtracking == 0) {
                        ast1 = this.out;
                        this.out = new ForInitAST(1, (DeclarationListAST) ast1, null);
                    }
                    
                }
                    break;
                case 2:
                    // CPP.g:381:5: exprList ';'
                {
                    this.pushFollow(FOLLOW_exprList_in_forInit1526);
                    this.exprList();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    this.match(this.input, 23, FOLLOW_23_in_forInit1528);
                    if (this.state.failed) {
                        return;
                    }
                    if (this.state.backtracking == 0) {
                        ast1 = this.out;
                        this.out = new ForInitAST(2, null, (ExprListAST) ast1);
                    }
                    
                }
                    break;
                case 3:
                    // CPP.g:382:5: ';'
                {
                    this.match(this.input, 23, FOLLOW_23_in_forInit1536);
                    if (this.state.failed) {
                        return;
                    }
                    
                }
                    break;
                
            }
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }