public final void stmtList() throws RecognitionException
    {
        
        AST ast1 = null, ast2 = null;
        
        try {
            // CPP.g:300:3: ( stmt stmtList | )
            int alt18 = 2;
            alt18 = this.dfa18.predict(this.input);
            switch (alt18)
            {
                case 1:
                    // CPP.g:300:5: stmt stmtList
                {
                    this.pushFollow(FOLLOW_stmt_in_stmtList1152);
                    this.stmt();
                    
                    this.state._fsp--;
                    if (this.state.failed) {
                        return;
                    }
                    if (this.state.backtracking == 0) {
                        ast1 = this.out;
                        this.out = null;
                    }
                    this.pushFollow(FOLLOW_stmtList_in_stmtList1160);
                    this.stmtList();
                    
                    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.out = new StmtListAST((OneStmtAST) ast1, (StmtListAST) ast2);
                    }
                    
                }
                    break;
                case 2:
                    // CPP.g:303:5:
                {
                    if (this.state.backtracking == 0) {
                        this.out = new EmptyStmtListAST();
                    }
                    
                }
                    break;
                
            }
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }