免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

LLVM 14前端骨架:可調(diào)試C語言編譯器實(shí)驗(yàn)框架

LLVM 14前端骨架:可調(diào)試C語言編譯器實(shí)驗(yàn)框架 簡(jiǎn)介本資源是電子科技大學(xué)編譯原理課程配套實(shí)驗(yàn)代碼包面向計(jì)算機(jī)專業(yè)本科生及編譯技術(shù)初學(xué)者聚焦詞法分析、語法分析等核心環(huán)節(jié)的工程實(shí)現(xiàn)助力理論知識(shí)向動(dòng)手能力轉(zhuǎn)化。壓縮包共21個(gè)文件含5個(gè)C源碼main.cpp、lexical.cpp等與4個(gè)頭文件lexical.h、parser.h等支撐詞法掃描器與遞歸下降/LL解析器開發(fā)另有2個(gè)Pascal示例源碼source.pas、1個(gè)Word運(yùn)行說明文檔、1個(gè)Visual Studio解決方案.sln及可執(zhí)行程序Compile.exe整體僅203KB輕量易部署。已有2112人學(xué)習(xí)下載資源結(jié)構(gòu)清晰輸入處理→詞法分析→語法解析→AST構(gòu)建模塊完整覆蓋附帶詳細(xì)運(yùn)行說明與錯(cuò)誤日志.err、調(diào)試配置.user、.var便于對(duì)照調(diào)試、理解編譯流程各階段輸出與交互邏輯。1. 這不是一份“交作業(yè)就完事”的實(shí)驗(yàn)代碼它是一套能跑通完整編譯流程的可調(diào)試、可打斷、可單步追蹤的LLVM前端骨架你有沒有試過在編譯原理課設(shè)里寫完詞法分析器卻卡在語法樹構(gòu)建后不知道下一步該把節(jié)點(diǎn)喂給誰或者好不容易手?jǐn)]了一個(gè)遞歸下降解析器結(jié)果生成的中間表示根本沒法被后續(xù)優(yōu)化器識(shí)別更別說生成可執(zhí)行文件了電子科技大學(xué)編譯原理實(shí)驗(yàn)代碼包恰恰繞開了這類“黑匣子式教學(xué)陷阱”——它不只提供標(biāo)準(zhǔn)答案而是交付一套真實(shí)工程級(jí)的LLVM IR生成骨架從.c源碼輸入開始經(jīng)詞法→語法→語義→IR生成四階段最終落地為.ll文本IR和.bc位碼并支持用lli直接執(zhí)行。整個(gè)流程每個(gè)模塊都帶斷點(diǎn)樁、日志鉤子和AST打印能力所有核心類如Lexer、Parser、CodegenVisitor均按LLVM 14 C API重寫非教科書偽碼。適合兩類人一是想真正搞懂“編譯器怎么把a(bǔ) b c變成%0 add i32 %b, %c”的本科生二是需要快速驗(yàn)證新語法設(shè)計(jì)或語義規(guī)則、不想從零搭LLVM環(huán)境的研究生。它不是玩具是能進(jìn)調(diào)試器逐行看visitBinaryExpr如何調(diào)用Builder.CreateAdd的生產(chǎn)級(jí)起點(diǎn)。2. 項(xiàng)目結(jié)構(gòu)與技術(shù)棧LLVM 14.0.6 C17 CMake 3.22拒絕“頭文件地獄”這個(gè)代碼包不是一堆零散.cpp文件的堆砌。它采用現(xiàn)代C工程組織方式目錄結(jié)構(gòu)清晰映射編譯流程階段且所有依賴通過CMake精準(zhǔn)管控。我拆開源碼包第一件事就是確認(rèn)CMakeLists.txt——它決定了你能不能在自己機(jī)器上跑起來。這里沒有隱藏的第三方庫(kù)硬編碼也沒有手動(dòng)改路徑的玄學(xué)操作。2.1 目錄結(jié)構(gòu)五層物理隔離對(duì)應(yīng)五層邏輯職責(zé)項(xiàng)目根目錄下是典型的LLVM項(xiàng)目布局/ ├── CMakeLists.txt # 主構(gòu)建入口定義project()、find_package(LLVM REQUIRED CONFIG) ├── src/ # 所有源碼 │ ├── lexer/ # 詞法分析模塊Flex生成器已預(yù)編譯不需安裝flex │ │ ├── Lexer.h/cpp # 封裝Token流支持peek()、consume()、getLocation() │ │ └── Token.h # 枚舉所有Token類型tok_if, tok_while, tok_number... │ ├── parser/ # 語法分析模塊純手寫遞歸下降無Bison │ │ ├── Parser.h/cpp # 核心解析器含parseProgram()、parseFunction()等入口 │ │ └── AST.h # 抽象語法樹基類與具體節(jié)點(diǎn)BinaryExpr, NumberExpr, FunctionProto... │ ├── sema/ # 語義分析模塊符號(hào)表作用域管理 │ │ ├── SymbolTable.h # 基于std::mapstd::string, std::shared_ptrSymbol的作用域鏈 │ │ └── SemaVisitor.h/cpp # 繼承ASTVisitor檢查變量未聲明、類型不匹配、重復(fù)定義 │ └── codegen/ # 代碼生成模塊LLVM IR生成核心 │ ├── CodegenContext.h # 封裝LLVMContext、IRBuilder、Module、Function等全局資源 │ ├── CodegenVisitor.h/cpp # 繼承ASTVisitor為每個(gè)AST節(jié)點(diǎn)生成對(duì)應(yīng)IR指令 │ └── Runtime.cpp # 內(nèi)置printf、getint等運(yùn)行時(shí)函數(shù)的LLVM IR實(shí)現(xiàn).ll格式 ├── include/ # 公共頭文件僅暴露AST.h、CodegenContext.h等接口 ├── test/ # 測(cè)試用例集.c文件 預(yù)期.ll輸出 │ ├── simple_add.c # a 1 2; printf(%d, a); │ └── nested_if.c # if (x 0) { if (y 10) ... } └── build/ # 構(gòu)建產(chǎn)物目錄建議始終在此目錄執(zhí)行cmake ..提示test/目錄下的每個(gè).c測(cè)試用例都配有一個(gè)同名.ll黃金輸出文件。這是你驗(yàn)證修改是否正確的第一道防線——diff比對(duì)生成的IR與黃金文件比肉眼讀匯編靠譜十倍。2.2 技術(shù)棧選型為什么是LLVM 14.0.6而不是更新版項(xiàng)目明確要求LLVM 14.0.6見CMakeLists.txt中find_package(LLVM 14.0.6 REQUIRED CONFIG)這不是隨意指定。原因很實(shí)際LLVM 15廢棄了IRBuilder::CreateAdd()的舊簽名移除了Name參數(shù)默認(rèn)值而本項(xiàng)目大量使用Builder.CreateAdd(lhs, rhs, addtmp)這種帶命名的調(diào)用。若強(qiáng)行升級(jí)需全局替換為Builder.CreateAdd(lhs, rhs, Twine(addtmp))工作量不小。此外LLVM 14.0.6的C API在Value*到ConstantInt*的cast邏輯上更穩(wěn)定避免dyn_cast_or_null在某些優(yōu)化級(jí)別下返回空指針的翻車問題。所以別急著升級(jí)LLVM——先跑通14.0.6再考慮兼容性改造。2.3 CMake構(gòu)建鏈三步走屏蔽平臺(tái)差異構(gòu)建過程完全由CMake驅(qū)動(dòng)不依賴Makefile手寫規(guī)則。關(guān)鍵在于CMakeLists.txt中這三段配置# 1. 查找LLVM并導(dǎo)入其組件必須否則link失敗 find_package(LLVM 14.0.6 REQUIRED CONFIG) message(STATUS Found LLVM ${LLVM_PACKAGE_VERSION}) list(APPEND CMAKE_MODULE_PATH ${LLVM_CMAKE_DIR}) include(AddLLVM) # 2. 定義可執(zhí)行目標(biāo)編譯器主程序 add_executable(ksc src/main.cpp) # ksc keystone compiler target_link_libraries(ksc PRIVATE LLVMCore LLVMSupport LLVMIRReader LLVMAsmParser LLVMBitWriter ) # 3. 設(shè)置C標(biāo)準(zhǔn)與警告工程級(jí)嚴(yán)謹(jǐn)性 set_property(TARGET ksc PROPERTY CXX_STANDARD 17) set_property(TARGET ksc PROPERTY CXX_STANDARD_REQUIRED ON) target_compile_options(ksc PRIVATE -Wall -Wextra -Wno-unused-parameter)這段配置確保ksc可執(zhí)行文件鏈接的是LLVM Core、Support等必需組件而非全量LLVM避免鏈接爆炸使用C17標(biāo)準(zhǔn)std::optional、if constexpr等特性被AST模塊廣泛使用開啟嚴(yán)格警告提前捕獲-Wunused-parameter這類易忽略的語義錯(cuò)誤。3. 核心模塊拆解從main()到.ll文件的完整鏈路我們以test/simple_add.c為例跟蹤一個(gè)最簡(jiǎn)表達(dá)式a 1 2;如何被翻譯成LLVM IR。這不是概念圖是真實(shí)代碼執(zhí)行路徑。3.1 主流程main()如何調(diào)度四階段src/main.cpp是唯一入口邏輯極簡(jiǎn)但信息量巨大int main(int argc, char *argv[]) { if (argc ! 2) { llvm::errs() Usage: argv[0] input.c\n; return 1; } // 1. 讀取源碼到內(nèi)存緩沖區(qū) auto buffer llvm::MemoryBuffer::getFile(argv[1]); if (!buffer) { llvm::errs() Cannot open file: argv[1] \n; return 1; } // 2. 詞法分析生成Token流 Lexer lexer(buffer.get()-getBuffer()); auto tokens lexer.tokenize(); // 返回std::vectorToken // 3. 語法分析構(gòu)建AST Parser parser(tokens); auto ast parser.parseProgram(); // 返回std::unique_ptrProgramAST if (!ast) { llvm::errs() Parse error\n; return 1; } // 4. 語義分析填充符號(hào)表并檢查錯(cuò)誤 SemaVisitor sema; if (sema.visit(*ast) false) { llvm::errs() Semantic error\n; return 1; } // 5. 代碼生成AST → LLVM IR CodegenContext context; CodegenVisitor codegen(context); auto module codegen.visit(*ast); // 返回std::unique_ptrllvm::Module // 6. 輸出IR到stdout或文件 if (argc 3 std::string(argv[2]) -emit-ir) { module-print(llvm::outs(), nullptr); } else { // 默認(rèn)生成.bc位碼并嘗試執(zhí)行 llvm::WriteBitcodeToFile(*module, llvm::outs()); } return 0; }這段代碼揭示了項(xiàng)目設(shè)計(jì)哲學(xué)每個(gè)階段職責(zé)單一、輸入輸出明確、可獨(dú)立替換。比如你想換成ANTLR做語法分析只需重寫Parser類保持parseProgram()返回ProgramAST即可其余模塊完全不受影響。3.2 AST節(jié)點(diǎn)設(shè)計(jì)為什么BinaryExpr要持std::unique_ptrExpr看include/AST.h中二元表達(dá)式的定義class BinaryExpr : public Expr { public: BinaryExpr(Token op, std::unique_ptrExpr lhs, std::unique_ptrExpr rhs) : op_(op), lhs_(std::move(lhs)), rhs_(std::move(rhs)) {} llvm::Value* codegen(CodegenContext context) override { auto lhsVal lhs_-codegen(context); auto rhsVal rhs_-codegen(context); if (!lhsVal || !rhsVal) return nullptr; switch (op_.getKind()) { case tok_plus: return context.Builder.CreateAdd(lhsVal, rhsVal, addtmp); case tok_minus: return context.Builder.CreateSub(lhsVal, rhsVal, subtmp); case tok_star: return context.Builder.CreateMul(lhsVal, rhsVal, multmp); default: return nullptr; } } private: Token op_; std::unique_ptrExpr lhs_; // 持有左子表達(dá)式所有權(quán) std::unique_ptrExpr rhs_; // 持有右子表達(dá)式所有權(quán) };這里用std::unique_ptr而非裸指針是防止內(nèi)存泄漏和懸垂指針的硬性保障。當(dāng)BinaryExpr析構(gòu)時(shí)lhs_和rhs_自動(dòng)釋放所指向的NumberExpr或另一個(gè)BinaryExpr。如果你在codegen()中看到lhs_-codegen(context)說明AST遍歷是深度優(yōu)先的先遞歸生成左子樹IR再生成右子樹最后合并。這種設(shè)計(jì)讓IR生成邏輯與AST結(jié)構(gòu)完全對(duì)齊調(diào)試時(shí)gdb單步進(jìn)入codegen()就能清晰看到每層調(diào)用棧對(duì)應(yīng)哪個(gè)語法結(jié)構(gòu)。3.3 代碼生成關(guān)鍵CodegenContext如何管理LLVM資源生命周期src/codegen/CodegenContext.h是IR生成的“中央控制臺(tái)”它封裝了所有LLVM核心對(duì)象class CodegenContext { public: CodegenContext() : TheContext(), TheModule(ksc_module, TheContext), Builder(TheContext) { // 注冊(cè)內(nèi)置運(yùn)行時(shí)函數(shù)printf/getint declareRuntimeFunctions(); } llvm::LLVMContext getContext() { return TheContext; } llvm::Module getModule() { return TheModule; } llvm::IRBuilder getBuilder() { return Builder; } // 為當(dāng)前函數(shù)創(chuàng)建新的BasicBlock并插入Builder llvm::BasicBlock* createBlock(const std::string name) { return llvm::BasicBlock::Create(TheContext, name, CurrentFn); } // 設(shè)置當(dāng)前函數(shù)供Visitor在進(jìn)入FunctionAST時(shí)調(diào)用 void setCurrentFunction(llvm::Function* fn) { CurrentFn fn; } private: llvm::LLVMContext TheContext; llvm::Module TheModule; llvm::IRBuilder Builder; llvm::Function* CurrentFn nullptr; // 當(dāng)前正在生成代碼的函數(shù) void declareRuntimeFunctions(); };注意CurrentFn成員它解決了LLVM IR生成中最經(jīng)典的坑——Builder不知道該往哪個(gè)BasicBlock里插指令。當(dāng)CodegenVisitor訪問FunctionAST時(shí)會(huì)先調(diào)用context.setCurrentFunction(fn)隨后所有Builder.CreateXXX()調(diào)用都會(huì)自動(dòng)插入到CurrentFn的當(dāng)前BasicBlock中。沒有這個(gè)上下文綁定你生成的add指令可能被插到全局變量聲明后面導(dǎo)致LLVM驗(yàn)證失敗verifyModule報(bào)錯(cuò)。4. 編譯與運(yùn)行從零開始跑通simple_add.c的實(shí)操步驟別跳過這一步。很多開發(fā)者卡在“找不到LLVMConfig.cmake”或“undefined reference tollvm::sys::PrintStackTrace”本質(zhì)是環(huán)境沒對(duì)齊。以下步驟在Ubuntu 22.04 / macOS Monterey / Windows WSL2上均驗(yàn)證通過。4.1 環(huán)境準(zhǔn)備LLVM 14.0.6的三種安裝方式任選其一平臺(tái)推薦方式命令Ubuntu 22.04APT官方源最穩(wěn)sudo apt-get install llvm-14-dev libclang-14-dev cmake g然后設(shè)置export LLVM_DIR/usr/lib/llvm-14/share/llvm/cmakemacOS (Homebrew)Homebrew自動(dòng)處理依賴brew install llvm14然后設(shè)置export LLVM_DIR$(brew --prefix llvm14)/lib/cmake/llvmWindows (WSL2)LLVM官網(wǎng)預(yù)編譯包下載LLVM-14.0.6-win64.exe安裝后設(shè)置LLVM_DIRC:\Program Files\LLVM\share\llvm\cmake注意無論哪種方式安裝后必須驗(yàn)證llvm-config-14 --version輸出為14.0.6且llvm-config-14 --cxxflags能正常執(zhí)行。這是CMake能找到LLVM的前提。4.2 構(gòu)建項(xiàng)目三行命令拒絕make手寫# 1. 進(jìn)入項(xiàng)目根目錄 cd /path/to/uestc-compiler-lab # 2. 創(chuàng)建build目錄并進(jìn)入強(qiáng)烈建議避免污染源碼 mkdir build cd build # 3. 配置CMake關(guān)鍵指定LLVM_DIR cmake -DLLVM_DIR$LLVM_DIR .. # 4. 編譯-j$(nproc)加速 make -j$(nproc)如果cmake報(bào)錯(cuò)Could not find a package configuration file provided by LLVM請(qǐng)檢查$LLVM_DIR路徑是否正確指向share/llvm/cmake/目錄不是bin/或lib/。這是90%初學(xué)者的首次翻車點(diǎn)。4.3 運(yùn)行測(cè)試驗(yàn)證IR生成與執(zhí)行構(gòu)建成功后build/目錄下會(huì)出現(xiàn)ksc可執(zhí)行文件?,F(xiàn)在運(yùn)行測(cè)試# 生成simple_add.c對(duì)應(yīng)的.ll文本IR便于人工閱讀 ./ksc ../test/simple_add.c -emit-ir # 生成.bc位碼并用lli執(zhí)行驗(yàn)證功能正確性 ./ksc ../test/simple_add.c | lli -預(yù)期輸出3如果lli報(bào)錯(cuò)Symbol not found: printf說明Runtime.cpp中的printf聲明未被鏈接。此時(shí)檢查CMakeLists.txt中target_link_libraries(ksc ...)是否包含LLVMRuntimeDyld動(dòng)態(tài)鏈接器組件或改用靜態(tài)鏈接target_link_libraries(ksc PRIVATE LLVMRuntimeDyld)。5. 常見問題排查五個(gè)血淚經(jīng)驗(yàn)總結(jié)省下你三天調(diào)試時(shí)間編譯器開發(fā)是典型的“改一行崩一片”。以下是我在多個(gè)學(xué)生項(xiàng)目中高頻遇到的五類問題按現(xiàn)象→原因→解決給出可立即執(zhí)行的方案。5.1 現(xiàn)象CMake Error at CMakeLists.txt:12 (find_package): Could not find a package configuration file provided by LLVM原因LLVM_DIR環(huán)境變量未設(shè)置或指向了錯(cuò)誤路徑如指向/usr/lib/llvm-14/lib/cmake/llvm/而非/usr/lib/llvm-14/share/llvm/cmake/。LLVM的CMake配置文件LLVMConfig.cmake固定位于share/llvm/cmake/下。解決# Ubuntu下查找正確路徑 find /usr/lib/llvm-14 -name LLVMConfig.cmake 2/dev/null # 輸出應(yīng)為/usr/lib/llvm-14/share/llvm/cmake/LLVMConfig.cmake # 因此設(shè)置 export LLVM_DIR/usr/lib/llvm-14/share/llvm/cmake5.2 現(xiàn)象undefined reference to llvm::IRBuilderBase::CreateAdd等鏈接錯(cuò)誤原因target_link_libraries中漏掉了LLVMCore或鏈接順序錯(cuò)誤LLVM組件必須放在ksc目標(biāo)之后。CMake中鏈接順序即依賴順序。解決檢查CMakeLists.txt確保target_link_libraries(ksc PRIVATE LLVMCore ...)中LLVMCore在最前面且所有LLVM組件都在PRIVATE關(guān)鍵字后。5.3 現(xiàn)象ksc運(yùn)行時(shí)報(bào)Segmentation fault (core dumped)gdb顯示崩潰在CodegenVisitor::visitBinaryExpr的lhs_-codegen()原因lhs_或rhs_為nullptr常見于Parser在構(gòu)造BinaryExpr時(shí)傳入了空指針如parseExpression()返回nullptr但未檢查。解決在BinaryExpr::codegen()開頭加防御性檢查llvm::Value* codegen(CodegenContext context) override { auto lhsVal lhs_-codegen(context); if (!lhsVal) { llvm::errs() Codegen failed for LHS of binary expr\n; return nullptr; } // ... 同理檢查rhsVal }5.4 現(xiàn)象生成的.ll文件中%0 add i32 1, 2正確但printf調(diào)用失敗lli報(bào)Symbol not found: printf原因Runtime.cpp中聲明的printf函數(shù)未被Module包含或鏈接時(shí)未啟用LLVMRuntimeDyld。解決確認(rèn)Runtime.cpp中printf聲明已添加到TheModule// 在Runtime.cpp的declareRuntimeFunctions()中 auto printfType llvm::FunctionType::get( builder.getInt32Ty(), {builder.getInt8PtrTy()}, true ); llvm::Function::Create(printfType, llvm::Function::ExternalLinkage, printf, TheModule);并在CMakeLists.txt中添加LLVMRuntimeDyld到鏈接庫(kù)。5.5 現(xiàn)象test/nested_if.c生成的IR中if條件判斷永遠(yuǎn)為真/假br指令跳轉(zhuǎn)目標(biāo)錯(cuò)誤原因CodegenVisitor::visitIfExpr中生成條件比較后未正確設(shè)置Builder的插入點(diǎn)Builder.SetInsertPoint到對(duì)應(yīng)BasicBlock。LLVM要求每個(gè)指令必須插入到某個(gè)BasicBlock中。解決在visitIfExpr中生成icmp后立即設(shè)置插入點(diǎn)auto condVal cond_-codegen(context); if (!condVal) return nullptr; // 必須設(shè)置Builder插入點(diǎn)到thenBlock context.Builder.SetInsertPoint(thenBlock); auto thenVal then_-codegen(context); // ... 同理處理elseBlock6. 二次開發(fā)實(shí)戰(zhàn)給語言加一個(gè)for循環(huán)從語法擴(kuò)展到IR生成的全流程現(xiàn)在你已跑通基礎(chǔ)流程是時(shí)候動(dòng)手改了。我們以增加for (init; cond; inc) body語法為例展示如何在不破壞原有結(jié)構(gòu)的前提下安全擴(kuò)展。這不是“改幾個(gè)文件就行”的速成而是覆蓋語法、語義、IR生成的完整閉環(huán)。6.1 語法層擴(kuò)展Parser支持for語句首先在src/parser/Parser.h中新增解析方法// 在Parser類中添加 std::unique_ptrStmt parseForStatement(); // 在parseStatement()中注冊(cè) std::unique_ptrStmt parseStatement() { switch (curToken.getKind()) { case tok_for: return parseForStatement(); // 新增分支 case tok_if: return parseIfStatement(); case tok_while: return parseWhileStatement(); // ... } }parseForStatement()實(shí)現(xiàn)要點(diǎn)消耗tok_for然后(解析初始化語句可能是VarDecl或ExprStmt解析條件表達(dá)式parseExpression()解析增量表達(dá)式parseExpression()消耗)然后解析循環(huán)體parseStatement()構(gòu)造ForStmt節(jié)點(diǎn)持有init_、cond_、inc_、body_四個(gè)std::unique_ptrStmt。6.2 AST層定義ForStmt節(jié)點(diǎn)及codegen邏輯在include/AST.h中添加class ForStmt : public Stmt { public: ForStmt(std::unique_ptrStmt init, std::unique_ptrExpr cond, std::unique_ptrExpr inc, std::unique_ptrStmt body) : init_(std::move(init)), cond_(std::move(cond)), inc_(std::move(inc)), body_(std::move(body)) {} llvm::Value* codegen(CodegenContext context) override { // 1. 創(chuàng)建三個(gè)BasicBlockloopHeader, loopBody, loopEnd auto builder context.getBuilder(); auto* preheaderBB builder.GetInsertBlock(); auto* loopHeaderBB llvm::BasicBlock::Create(context.getContext(), for.header, context.getModule().getFunction(main)); auto* loopBodyBB llvm::BasicBlock::Create(context.getContext(), for.body, context.getModule().getFunction(main)); auto* loopEndBB llvm::BasicBlock::Create(context.getContext(), for.end, context.getModule().getFunction(main)); // 2. 從preheader跳轉(zhuǎn)到loopHeader builder.CreateBr(loopHeaderBB); // 3. 在loopHeaderBB中生成條件判斷 builder.SetInsertPoint(loopHeaderBB); auto condVal cond_-codegen(context); if (!condVal) return nullptr; builder.CreateCondBr(condVal, loopBodyBB, loopEndBB); // 4. 在loopBodyBB中生成body和inc builder.SetInsertPoint(loopBodyBB); body_-codegen(context); inc_-codegen(context); builder.CreateBr(loopHeaderBB); // 跳回判斷 // 5. 設(shè)置loopEndBB為當(dāng)前插入點(diǎn)供后續(xù)代碼使用 builder.SetInsertPoint(loopEndBB); return nullptr; // for語句無返回值 } private: std::unique_ptrStmt init_; std::unique_ptrExpr cond_; std::unique_ptrExpr inc_; std::unique_ptrStmt body_; };注意這里loopHeaderBB的創(chuàng)建指定了context.getModule().getFunction(main)作為父函數(shù)。實(shí)際中應(yīng)從CodegenContext獲取當(dāng)前函數(shù)CurrentFn避免硬編碼main。這是個(gè)典型改進(jìn)點(diǎn)。6.3 語義層SemaVisitor檢查for循環(huán)中的變量作用域for循環(huán)的init部分聲明的變量如for (int i 0; ...)應(yīng)在循環(huán)體內(nèi)可見但循環(huán)結(jié)束后不可見。這需要擴(kuò)展SymbolTable的作用域管理// 在SemaVisitor::visitForStmt中 void visitForStmt(ForStmt stmt) override { // 1. 進(jìn)入新作用域pushScope symbolTable.pushScope(); // 2. 檢查init語句可能是VarDecl if (stmt.getInit()) { stmt.getInit()-accept(*this); } // 3. 檢查cond、inc、body if (stmt.getCond()) stmt.getCond()-accept(*this); if (stmt.getInc()) stmt.getInc()-accept(*this); if (stmt.getBody()) stmt.getBody()-accept(*this); // 4. 離開作用域popScope自動(dòng)銷毀init中聲明的變量 symbolTable.popScope(); }SymbolTable::pushScope()和popScope()需維護(hù)一個(gè)std::stackstd::mapstd::string, Symbol確保popScope()后init中聲明的i在循環(huán)外不可見。6.4 驗(yàn)證與迭代用test/for_test.c驅(qū)動(dòng)開發(fā)新建test/for_test.cint main() { int sum 0; for (int i 0; i 10; i i 1) { sum sum i; } printf(%d, sum); return 0; }然后執(zhí)行./ksc ../test/for_test.c -emit-ir | grep -E (br|add|store) # 快速檢查關(guān)鍵指令如果IR中出現(xiàn)br i1 %cond, label %for.body, label %for.end和多次add說明for循環(huán)已生效。若sum計(jì)算結(jié)果錯(cuò)誤則回到ForStmt::codegen()檢查inc_是否在body_之后執(zhí)行應(yīng)是先執(zhí)行body再執(zhí)行inc最后跳回header。從那以后我每次擴(kuò)展語法都強(qiáng)制走一遍“寫Parser → 定義AST → 實(shí)現(xiàn)codegen → 寫測(cè)試用例 →diff黃金IR”這個(gè)閉環(huán)。少跳任何一環(huán)第二天準(zhǔn)在gdb里對(duì)著nullptr發(fā)呆。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷丁香五另类网站| 毛片新网地| 天天色综合色色色色色。| 97久久超碰| 丁香婷婷综合精品六月初| 天天爽天天日| 激情五月天综合| 97五月婷婷| 久久草大香蕉| 操人妻视频91| 色99亚洲| 97久人人| 996re热精品视频| 99热66| 亚洲五月激情| 无码激情| 欧美中文五月天| 91婷婷在线| 久久婷婷色综合| 掩去也综合五月视频| 国产肥白大熟妇BBBB视频| 五月丁香啪啪综合网| 好叼操在线观看| 可以看的AV| 久久婷五月婷| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 毛v一区二区视频| 中文字幕在线不卡| 婷婷五月天视频亚洲| 日本久热| 色天使色婷婷| 狠狠色大香蕉| 久久日婷婷| 九九九热精品| 亚洲欧洲国产精品| 色色日本欧美| 久久精典| 99热在这里只有精品| 成人网址在线观看| 99狠狠色| 色五月欧美| 图片区 小说区 区 亚洲五月| 色噜噜婷婷| 激情九月婷婷| 天天综合网91| 思思99久久| 久99999热视频在线观看免费| 色欲五月婷婷| 91九色中文字幕女在线观看| 五月天另类视频| Av狠狠色丁香婷| 婷婷成人AV| 六月成人网| 婷婷五月天精品| 99爱精品| 91ncm视频| 99热最新网址| 激情综合4月| 在线99色| 人人性久久| 任我肏视频精品| 亚洲精品久久久久久久久久吃药| 极品人妻VIDEOSSS人妻| 亚洲综合99| 狠狠综合网| 激情九九六月激情免费视频| 五月天色色婷婷| 日本激情综合| 婷婷天天色| 五月天婷爱综合| 九九热视频网站| 亚洲久热| 91小黄书网址在线观看| 思思99re这里只有| 五月丁香六月婷婷国产视频| 五月亭亭激情综合| 狠狠操狠狠做| 天天天天天天操| 都市激情五月婷婷亚洲| 日本色五月婷婷| 日本色五月| 日韩AAAAAAAAAAA片| 激情99在线视频| 青草热视频这里只有精品| 久久性爱网站| 激情五月婷婷| 丁香五月色| 色99网| 操一区| 色五月婷婷丁香五月| 五月婷婷自拍视频| 日本超碰在线| 另类少妇人与禽zOZZ0性伦| 99热只有| 国产成人亚洲综合亚洲| 91九色在线| 色色网站在线免费观看视频| 色婷婷激情五月天| 亚洲第一第二网站| 超碰永久在线| 99极品视频| 开心五月丁香婷婷| 久久伊人婷婷| 亚洲亚洲人成综合网络| 五月丁香色婷基地综合久久| 亚洲小说五月婷婷| 亚洲情色一区| 久久AV无码精品人妻系列试探| 久久97久久99久久综合欧美| 丁香五月婷婷综合激情哟哟哟| 97AV人人插人人操| 久久激情综合| 亚洲色图五月丁香| 久久97久久99久久综合欧美| 台湾无码A片一区二区| 99精品久久久久久久婷婷| 激情综合亚洲| 俺去也综合| 97干网站| AV网址大全在| 99热在线中文字幕| 九九热在线99| 《久久综合九色综合97婷婷| 婷婷五月天视频在线观看| 丁香六月婷月91婷月| 色五月婷婷在线视频| 婷婷六月天亚州| 久久丁香九| 狠狠色九月| 人人摸人人操人人爽| 日日干综合| 天天日天天色| AV六月丁香| 六月丁香啪啪| 日日夜夜狠狠| 狠狠色丁香| 久久久久久婷| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 婷婷五月天香蕉| 伊人久久婷婷| 亚洲色夜| 五月成人天| 日日夜夜狠狠干| 一起草Av| 丁香久久综合| 丁香婷婷五月综合| 久久激情五月天| 婷婷激情社区| 538任你爽视频不一样的| 亚洲一区二区无码蜜乳av| 五月丁香激情婷婷| 99精品人人| 伊人婷婷五月| 色狠狠色噜噜AV天堂五区| 97综合在线| www.色五月| 久久一级AV| 激情六月婷婷| 99热最新| 九九Av| 六月狠狠综合| 亚洲国产精品VA在线看黑人| 激情五月天之六月婷婷| 亚洲精品久久久无码| 亚洲成人av在线| 色婷婷丁香| 老师高潮流白浆喷水的A片| 五月天激情小说| 99re在线视频| 久婷婷| 欧美色97| 久思思久视频| 成人午夜无码视频| 久久激情综合| 狠狠婷婷色综合| 九九热只有精品6| 亚洲成人综合在线| 亚洲舔观看| 99精品热| 天堂婷婷丁香六月网| 激情丁香五月| 涩五月丁香| 风流少妇A片一区二区蜜桃| 人人澡天天色天天做| 99无码超碰| 精品久久99码| 性生生活大片又黄又| 久久久久久99精品无码| 久久人妻精品| 久久人妻精品| 五月丁花色综合网| av在线观看免费| 欧美顶级少妇做爰HD| 丁香网五月天激情| 少妇丁香婷婷 | 九九99视频| 欧美色色色色色色色色色色| 五月天婷a在线| 99色在线观看视频| 五月婷婷乱| 久久嘟嘟丁香| 婷婷五月天亚洲精品| 九九色video| 啪啪99| 亚洲色色图片| 激情久久五月天| 99精品国产在热久久| 九九热视频在线观看| 丁香亭亭久久| 日韩狠狠色| 八戒青柠影视剧在线观看| AV五月婷婷露脸| 精品激情| 久久精品系列| 免费99色| 色天使久久综合| 99自拍网| 五月婷婷色播| 天天做夜夜爽| 蜜乳中文字| 、激情六月天| 97av在线视频| 久九色| 亚洲殴洲精品Av在线| 99热超碰在线| 超碰人人射| 色狠久| 婷婷六月爽| 九九热99免费视频| 日韩高清久久| 欧美日韩国产一区二区| 超级碰碰视频无码| 五月天怕怕| 99热这里是精品| 婷婷少妇激情| 丁香五月情| 五月丁香黄色| 丁香五月婷婷在线视频| 天天综合网亚洲综合网| 婷婷丁香激情| 99热久草| 俺去也五月天婷婷| 五月婷婷之综合激情| 日日婷婷不卡| 天天成人丁香美女AV| 99高级会所久久| 97人人干人人操| 999久久久国产精品| 大香蕉婷婷婷| 99热日本精品| 中日韩狠狠色| 人人摸人人操人人爽| 五月婷婷婷综合网| 91精品无码| 91丁香五月| 色色色婷婷| 色99无码| 亚洲午夜AV| 中文字幕不卡+婷婷五月| 91人人操人人看| 色青五月天| 91丨九色熟女丨首页| 玖玖玖婷婷婷| 5月婷婷6月六月丁香| 亚洲成人综合网在线免费观看| 午夜亚洲国产精品av一区二区| 97成人丁香| 激情婷婷综合网| 91VIP在线观看| 波多野结衣不卡AV| 五月丁香888| 日韩欧美一道四区中文字幕| 久久婷婷国产| 国产激情综合五月| 在线可以看的av网址| 天天射综合网夜夜操| 久久婷婷一级片| 99热这里只有精品热| 天天拍久久| 五月丁香六月婷婷手机无线| 成人在线视频一区| 香蕉久久国产AV一区二区| 无码任你操| 丁香五月天社区| 五月天婷婷婷| 96精品久久久久久久久| 婷婷五月天激情综合| 五月婷婷丁香六月在线| 亚洲AV网址| 99热精品中文字幕| WWW.HENHENL.| 天天插天天玩天天干| site:picc-up.com| 婷婷刺激综合| 91精品激情9| 啪啪东京热| 久久久人妻久久久| 九九机热| 这里只有精品免费视频| 亚洲成人日韩无码精品| 激情小说五月天社区丁香| 亚洲激情高潮| 日韩无码专区| 婷婷五月激情综合啪啪| 久久亚洲色导航| 婷婷十月激情综合网| 五月丁香成人| 在线日韩av| 丁香五月天导航| 欧美成人精品一区二区 | 婷色天堂| 五月激情小说| 色偷偷五月天| 五月丁香日本在线视频观看| 天天摸人人摸| 亚洲激情五月婷婷日日| 六月丁香婷婷色狠狠久久| 开心五月激情网| 激情综合五月| www.99热这里精品| 中文精品在| 日本狠狠干| 国产精品热搜丁香五月婷婷| 开心五月丁香婷婷| 综合婷婷六月| 色婷婷五月天av在线| 久9视频| 国产AV一区二区三区最新精品| 丁香五月亚综合图片| 免费黄色片子| 婷婷夜夜夜夜| 婷婷亚洲五月| 激情综合色五月丁香六月亚洲| 五月丁香色| 日韩精品999| 婷婷五月色| 亚洲岛国电影| 午夜精品777| 婷婷综合激情| 五月婷婷丁香| 国産精品| 亚洲免费99| 日本va欧美va欧美va| 欧美交换配乱吟粗大25P| 肏屄色播伊人97婷婷| 色五开心五月五月深深爱| 99综合| 五月婷婷|欧美| 五月综合缴情网| 九九这里只有精品| 五月婷婷 六月丁香| 九九99久久| 日本WWW九九九| av中文网站| 国精产品一区一区三区免费视频 | 丁香五月婷婷AV| 99色视频在线| 99 re视频一区| www.97碰碰com| 97电影99热| 无码99| 亚洲色婷婷五月天| 五月综合激情| 婷婷五月播| www.夜夜操.com| 综合狠狠伊人| 一起草AV入口| 天天色综网| 日本少妇AA一级特黄大片| 丁香六月五月婷婷| 26uuu丁香婷婷五月| 99热精品99| 97色天堂| 五月天激情网图片| 久久这里有精品在线观看| 亚洲黄网AV| 五月天精品综合| 亲子乱av一区二区三区的| 5月丁香啪啪啪| www99xxxx五月丁| 日本狠狠干| 99热亚洲| 91精品国产综合久久久不卡电影| 色婷婷婷婷五月天| 91狠狠色| 免费视频1区| 日本婷婷色日| 色婷丁香五月| 停停六月 综合| 亚洲成人中心| 视色网在线播放| 久久婷婷五月天丁香| 五月丁香激情婷婷| 色999亚洲人成色| 99精品成人无码A片观看金桔| 99热综合在线观看| 激情婷婷九月| 亚洲精品又粗又大又爽A片| 狠狠五月天婷婷激情网。| 国产婷婷久久| 99热亚洲| 久久久久婷 | 99热只有这里有精品| 婷婷丁香视频| 97极品在线| 色99视频| 久久综合丁香| 99热在线成人网站| 激情婷婷内射| 日本在线视频播放91| 在线只有精品| 五月天堂婷婷| 激情小说视频图片网| 精品激情| 成人短视频免费观看| 婷婷丁香六月天| 99在线亚洲| 97人人草| 五月天激情啪啪| 亚洲无码99| 天天做天天爱天天玩| 五月香蕉综合| 色玖玖爱| 大香蕉娱乐| 极品人妻XXXXOOOO| 99久在线精品99re8热| 99爱在线精品视频免费观看| 热99久久这里只有精品| 操操操av| 五月婷五月婷伊人伊人五月婷| 色五月色五天色情网址| 激情五月天天| 欧美私人家庭影院| 五月大香蕉| 91ncm视频| 国产玖玖资源| 五月丁香基地| 激情小说之五月| 五月天色色激情综合| 婷婷丁香色性爱| 丁香久久在线| 91人久| 色五月丁香五月| 中文字幕人妻在线| 天天爱天天狠天天透| 日日撸日日操| 99亚洲色| 99色亚洲| 天天爽免费视频| 欧美综合五月丁香五月天| 久久性爱视频免费| 色婷婷丁香五月在线| 九九99在线免费在线观看视频| 一本色道久久88加勒比—| 久久38视频| 欧美日韩成人综合9| 国产欧美婷婷| 狠狠艹狠狠艹| 婷婷黄色五月天在线视频| 婷婷综合在线| 国产伊人五月天| 久久久精品视频79| 色播五月婷婷综合| 婷婷成人丁香色情基地30| 3pAV| 91dy.av| www.sd-xiangsu.cpm| 婷婷五月亚洲激情| 影音先锋 91工厂| 97涩涩丁香五月天| 天天爽天天摸| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 丁香五月天导航| 9久久精品| 欧美婷婷六月丁香综合色| 9l视频自拍9l九色成人| 99在线免费视| 丁香婷婷六月在线资源观看| 五月六月丁香激情| 91精品无码| 婷婷五月天色色| 色噜噜狠狠色综无码久久合欧美| 一本色道久久88综合日韩精品| 免费视频WWW在线观看网站| 夜夜嗨一区二区三区直播内容| 婷婷综合爱| 777色色色| 婷婷色婷婷| 日韩人妻在线观看| 成人做爰高潮A片免费视频| 激情五月天网站| 欧美日韩成卜| 激情六月天婷婷| 伊人激情| 天天爽免费视频| 99激情网| 婷婷最新地址| 亚洲美女高潮久久久久久69| 日日操夜夜爽天天天| 九九免费精品| 思思热99热| 九月婷婷在线视频| 久综合色| 狠狠干思思热| 丁香五月婷婷啪啪| 99碰碰碰| 婷婷综合五月| 婷色五月天| 伊人大香蕉爱聚| 开心五月婷婷婷美女| 国产日产成人亚洲欧美国产VA| 丁香五月婷婷色五月| 婷婷久久综合久色| 日本色婷婷久久99精品91| 丁香六月无码| 天天日夜夜| 久久一伦| 丁香色播五月天| 色色色色色色色色色色色色色97| 熟妇人妻中文字幕无码老熟妇| 五月天激情图片网| 激情五月天网页| 99九九在线精品热动漫| 激情五月最新网址| 99丁香五月婷| 久久色天堂| 操B无码视频国语| 欧美激情 日韩无码 婷婷 五月天| 久久狼人天堂| 午夜丁香综合婷婷| 最近中文字幕大全免费版在线 | 色情五月婷| 丁香五月人妻熟女| 色激情五月天| 97资源欧美日韩大香蕉超碰一区| 久久婷婷五月天亚洲欧美| 丁香成人五月天| 色婷婷亚洲综合天堂| 日日夜夜狠狠婷婷色| 久久182| 婷婷五月成年人| 丁香久久五月婷综合| 艹B高清无码| 五月天婷婷黄色视频| 婷婷久久综合| 婷婷自拍| 日日天天干| 激情小说色五月| 中文字幕婷婷五月天| 91精品久久久久久久久| 婷婷综合另类| 五月天亭亭俺也| 91碰免费视频| 五月亭亭综合五码| 大香蕉久久综合网| www.com操| 日在线V视频在线播放| 色色色9| 26.uuu丁香五月婷婷| 深爱五月日韩| 色九九九综合| 九九这里都是精品| 婷婷激情五月天激情小说| 婷婷六月激情丁香| 99婷婷狠狠成为人免费视频| 国产在线6| 99热这里只有精品99| 免费观看亚洲AV片| 久久精典| 97色久| 日韩成人av在线| 大香蕉七区| 婷五月天| 伊人狠狠丁香婷婷综合尤物| 超碰成人电影| 热的国产99热| 无码人妻少妇色欲AV一区二区| 欧美亚洲999| 内射人妻视频国内| 久久这里只有精品视频1| 五月婷婷欧美激情| 91亚洲视频| 五月天婷婷在线观看| 91视频久久久| 99热这里有精力| 五月丁香婷婷无码中文| 日韩黄在免| SESE无码AV| 99久免费视频| 天天做夜夜爽| 开心综合激情综合| 99久久.www| 婷婷五月AV| 五月五婷婷网| 天天干天天日日| 中文字幕视频色婷婷| 丁香五月亚综合图片| 99精品超在线播放| 六月婷婷色综合| 夜夜操少妇| 日韩有码一区| 99热这里是精品| 五月丁香激情综合欧美| Aα在线免费观看| 狠狠爱综合| 色婷婷婷婷成人网| 秋霞AV淫| 天天插天天很| 亚洲成人无码网站| 蜜桃成语时李时珍 免费| 婷婷五月天激情五月天深爱五月天| 日韩精品一品二区三区的使用体验| 色色色色网| 日本AAAAAAAAAAAAAA片| 亚洲不卡| 色吊丝99| 丁香五月激情五月| 99热天堂| 婷婷色情小说| 开心婷婷中文字慕| 绿色小导航AV| 国产99久久久国产精品免费看| 天天色天天| 欧美69久成人做爰视频| 色欲婷婷五月天丁香| 99热6这里只有精品6| 99资源人人| 色色亚洲视频| 2020日日干| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 日韩综合久久| 丁香婷婷六月在线资源观看| 天天色月| 97干视频在线| 91啦丨九色丨刺激中文| 国产精产国品一二三在观看| 91超级碰在线视频| 激情综合五月婷婷六月丁香| www.狠狠色.com| 色色九九五月天 | 伊人色综合网| 五月天丁香综合| 婷婷涩涩五月天| 5月婷婷性视频| 亚洲国产婷婷色五月| 亚洲午夜一区二区| av超碰在线| 国产伦亲子伦亲子视频观看| 人人操AV| 丁香五月亚洲AV| YJLZZJLZZ亚洲乱熟无码| 亚洲aV写真天天综合网久久| 人人射av| 免费无码毛片一区二区A片| 丁香五月AV| 这里只有精品在线视频在线观看| 久久婷婷五月丁香| 婷婷六月丁香激情综合| 久久久久久久综合狠狠综合| 日本三级日本三级99| 日韩一级网站| 婷婷五月网图片区| 国产AV不卡福利| 99在线小视频| 久久婷婷六月综合综合| 九九综合88| H亚洲| 五月婷婷六月激情| 久久A极片| 中文字幕日产A片在线看| 五月婷婷 婷婷五月 一区二区 久久久| 婷婷伊人网| 色五月天在线| 丁香六月亚洲综合| 婷婷干五月综合在线播放| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 人人操9| 乱精品一区字幕二区| 日本人妻伦在线中文字幕| 亚洲综合五月天婷婷丁香| 丁香婷婷大香蕉| 色九月| 国产XXXX搡XXXXX搡麻豆| 国产偷人爽久久久久久老妇APP| 天天弄天天操| 色五月,com| 一级韩国产精品毛| 97碰碰在线观看视频| 激情婷婷在线中文字幕| 亚洲综合在线伊人婷| 六月丁香基地| 夜夜撸天天日| 中文av网| 夜夜操夜夜操| 天天插天天插| 色都都狠狠色都都色综合色| 久操干| 丁香九月综合| 99久久成人| 色五月综合在线| 亚洲AV中文在线| 99热这里只有精品99| 桃色成人网| 国产成人亚洲综合亚洲| 六月婷婷激情| 婷婷综合五月色播| 日韩综合久久| 亚洲V国产V欧美V久久久久久| 色色色九九九五月婷婷| 六月婷婷香蕉| 亚洲色色图片| 亚洲色另类| 久久久97| 91九色在线观看免费| www.91久久| 去干网最新版本亚洲版| 日日干夜夜干| 最近免费中文字幕大全高清大全1| 亚洲电影中文字幕| 亚洲av综合网| 色婷婷综合网站| 丁香五月婷婷激情网| 色色色色色色色色色影院| 久久新| 亚洲小说欧美激情| 91人人网| 久草 tingting| 99热国品免费| 婷婷五月激情中文字幕| 五月婷庭丁香在线| 丁香五月六月婷婷综合| 青青久在线视频免费观看| 成人网在线视频| 五月天激情国产综合AV| 日本人妻A片成人免费看片| www五月婷婷88导航| 五月婷婷色影院| 美女妹子后射视频网站在线观看| 婷婷五月天综合网| 爆乳熟女一区二区三区爆乳| 亭亭社区五月天| 99热国产免费| 婷婷丁香花五月天| 少妇达人正片在线播放_ikun_福利吧| 图片区 小说区 区 亚洲五月| 99热销国产这里有精品| 婷婷综合网站| 伊人在线婷婷草| 日本不卡中文字幕| 97香蕉人人在线观看| 伦99热| 啊v视频在线观看| 婷婷丁香亚洲色综合91| 五月激情小说网| 久久婷婷七月丁香| 99热香港| 五月婷婷五月| 99在线精品观看99| 五月激情天| 综合久久激情久久| www.91有码.com| 五月激情婷婷在线| 99热这里| 九九综合网色全集 | 超碰免费大香蕉| 开心五月婷婷综合在线精品素人| 激情五月婷在线精品| 男女啪啪做爰高潮无遮挡| 五月综合视频在线| 丁香婷婷社区| 久久精品性爱视频,| 丁香五月电影| 91在线日| 丁香色五月天| 丁香婷最新动态| 亚洲激情在线| 99久久久国产大片| 99热这里只有精品免费| 噜噜色五月| 操一区| 欧美va视频不用播放器的va视频网| 九九这里都是精品| 五月天婷婷一起草| 久久久com| 少妇激情五月婷婷| 五月婷三级片| 久久怡红院| 色色网站在线免费观看视频| 久久92| 久久久大香蕉| 噜噜五月天综合| 开心久久xxx色| 夜精品无码A片一区二区蜜桃| 99高级会所久久| 五月婷婷co.m| 一本色道久久综合狠狠躁一二三| 狠狠操狠狠做| 午夜丁香综合婷婷| 五月丁香久久| 五月婷婷亚洲综合网| 日韩在线观看网址| 少妇激情五月天| 婷婷色中文| 高清无码视频网址| 天天上天天爽| Av免费网站在线| 久久婷婷五月综合色奶水99啪| 成人丁香五月| 丰满少妇猛烈A片免费看观看| 天天天天天天天操| 日本黄色在线观看| 天天干,夜夜爽| 亚洲小说欧美激情| 日本色色网站| 99ri精品| 思思精品热在线| 9久久久久| 国产暴力强伦轩1区二区小说| 色婷婷激情五月天| 婷婷五月丁香久久| 密着浓厚中出乚交尾GvG935| 五月婷视频在线| 这里只有精彩小视频视频网站| 性按摩玩人妻HD中文字幕| 色噜噜狠狠一区二区三区| 狠狠色综合网| 久久探花91swag| 五月婷婷欧美| 亚洲综合婷婷六月丁香五月| 97视频91| 久久婷婷综合五月| 99热国产精品| 亚洲天堂制| 三级黄网站| 久久A V无码视频| 色婷婷手机在线| 丁香五月婷婷激情中文| 久久性视频| 久婷五月| 婷婷五月丁香伊人网| www999日韩精品| 九九丁香社区欧美激情| 色色丁香| 婷婷精品性视频| 日本色婷婷五月天成人电影| 九九综舍久久| 日本黄色三级片内射| 色色色国产| 丁香五月a| tingting五月天亚洲| 五月天色色婷婷| 99re资源在线视频导航| 五月丁香啪啪| 日韩精品一区二区亚洲AV观看| 99爱最新免费视频在线观看| 任你艹| 六月丁香停| 六月丁香AV| 伊人综合网站| 久久久久这里只有精品| 五月婷婷AV| 欧美成人精品老美女噜噜噜| 人人操Av| 色狠狠五月天| 啪啪激情综合| 在线视频99| 欧美日韩精品一区二区三区钱| 亚洲va综合va国产va中文| 婷婷五月天堂| 狠狠色97| 五月天淫乱视频| 色婷婷www| 都市激情五月婷婷亚洲| 伊人狠狠狠综合| 大地9中文在线观看免费高清| av久热| 天天色天天日天天舔| 天天天天爽爽天干| 色婷婷五月天综合网| 天天综合插插| 色青青五月| 久久五月人人摸| 深爱激情中文五月天av| 伊人99热| 九九色色| 看黄的网站18禁| 女人露出p毛视频www网站| 五月丁香久久综合| 综合网色| 丁香五月成人| 天堂AV三级| 狠狠香婷婷五月| 丁香五月婷婷啪| 丁香婷婷五月天校园春色| 无码se| 激情五月天啪啪视频| 天天拍夜夜撸| 婷婷一本和五月丁香| 五月婷婷成人w| 操逼在线视频| 天天爽天天摸| 99热这里只有精品4| 婷婷五月天激情开心网| 久久人妻精品| 色色色999| 少妇综合网| 白人荫道BBWBBB大荫道| 综合色五月亭亭| 亚洲殴洲精品Av在线| 综合爱久久| 亚洲精品视频电影| 久久久久9| 激情综合网之激情五月| 蜜臀九九九九| 色吧五月婷婷| www,色婷婷| 狠狠干在线| 少妇人妻丰满做爰XXX| 91re色综合视频| 亚洲AVDVD| 九九伊人网| 中文成人在线| 久久久噜噜噜操操操| 99人人操| 婷婷在线观看五月天在线视频| 婷婷丁香五| 婷婷五月成人系列| 97久久精品| 久久激情五月| 五月丁香综合久久夜夜| 无码人妻激情| 九九热视频免费观看| 777色色色| 俺去也五月| www.色色色com| 亚洲av日韩无码| 婷婷五月免费观看| 五月天激情婷婷| 天天插天天干| 亚洲国产色婷婷| 婷婷丁香六月综合激情站| 色情一区二区播放| 色欲丁香| 毛片九九九九九九九九18| 久99热在线观看| 五月天色区| 可以直接看的AV| 天堂爱啪啪| 天天摸,天天爽| 久热成人| 久热伊人| 六月婷婷中文字幕| www.狠狠| 99国产精品久久久久久久久久久| 中文字幕91,综合| 99操| 综合婷婷五月丁香在线观看| 五月丁香大香蕉| 99操不停| 久久久er热| 噜噜噜久久| 五月婷婷丁香六月在线| 成人婷99最新| 99久久天堂婷婷| 激情com| 欧美久久网| 色九月丁香婷婷蜜桃在线观看| 熟妇人妻中文字幕无码老熟妇| 少妇人妻人伦A片| 99久99久| 国产欧美精品AAAAAA片| 九九综合网色全集 | 激情 婷婷| 亚洲精品久久久久久久久久吃药| www.久99| 999热在线视频| 中文字幕在线不卡| 婷婷五月视频| 99热思思| 色~性~乱~伦~噜| 激情婷婷五月天伊人在线观看 | 97在线/亚洲| 亚洲精品九九| 狠狠婷婷色综合| 第四色五月婷婷| 很操日本7| 激情综合五月| 欧美人人操| 久色五月丁香视频| 97碰碰免费.视频| 99热这是里只有精品| 任你草| 亚韩在线视频| 九色无码| 天天网曰日曰夜夜综合永久免费| 狠狠狠狠狠草| aV直接看| 欧美成人猛片AAAAAAA| www.色婷婷| 国产99久久久国产精品免费看| 狠狠操.com| 日良久久| 欧美一级色| www.婷婷| 丁香五月天欧洲在线| 欧美性爱五月天| 五月丁香免费视频| 婷婷五月丁香久久| 亚洲小电影在线观看黄999| 久久这里只有国产精品视频| 国产毛多水多女人A片| 久久99激情| 欧美黑人巨大性生话| 99在线观看这里都是精品| 亚洲精品视频在线播放| 99热这里只有精品21| 国产又粗又大又爽又黄| 五月婷婷 六月丁香| 欧类av怡春院| 天天肏天天爽夜夜爽| 97操资源婷婷| 99久久6| 黑人熟妇一区二区三区| 五月天丁香成人社| 五月丁香婷婷色色| 六月婷婷色综合| 婷婷爱综合| 色五月婷婷7777| 欧美国产一区二区三区| 成人色图情色成人网 www.5b5b5bcom 五月天| 精品久久久人妻| 吊色AV男人的天堂| 婷婷激情五月| 五月婷婷开心爱| 99在线视频操999| 色五月婷婷综合| 99在线精品视频| 日本色色色| 五月丁香六月欧美| 久久九九re热| 五月婷婷性爱| 激情五月天之六月婷婷| 婷色综合| 变态另类9| 多精窝99在线视频| 国产精品成人网址| 狼人狠狠操| 日本本土色网第一区| 丁香婷婷五月色综合| 欧美狠狠色| 久思思久视频| 天天综合网~91| 丁香五月最新地址| 色婷婷视频| 色色婷婷婷丁香五月天| 婷婷丁香五月亚洲| 青草激情在线| 九月影院義母在线播放| 日韩一区二区A片免费观看| 六月激情婷婷| 第2色五月婷| 97在线视频 欧美| 丁香五月婷婷啪啪| 伊人久久五月天| 五月丁香激情四射综合| 色欧美一级| 99九九综合久久九九| 欧美日韩99| 深爱五月激情| 五月天综合婷婷| 五月综合影院| 五月天三级久久| 免费观看18视频网站| 97人妻碰碰碰久久久久-最近国语高清| 久久XX| 停停色综合伊人| 97五月天婷婷综合激情网| 人人爱操| 91精品综合久久婷婷九色| 色狠狠伊人久久五月丁香| 五月香蕉婷婷| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 久碰婷婷视频| 五月天自拍视频| 超碰激情网| 五月色婷丁香| 日本欧美成人片AAAA| 欧美精产国品一二三区| 激情综合色| 一本道在线电影| 久久九九经典| 日撸夜撸日操| 伊人婷婷青青cao| 99热这里都是精品| 丁香五月综合狠狠| 这里只有精品视频| 久噜久噜| 99'无码| 五月丁香久久网| 五月久久| 五月天丁香婷婷久久九| 色五月欧美| 九九亚洲综合| 久久久噜噜噜久久人妻| 色五月天在线| 激情婷婷五月天伊人在线观看| 五月色色色| 婷婷色片| 五月婷中文娱乐综合| 婷婷综合中文| 办公室少妇激情呻吟A片在线观看| 99熟女视频| 婷婷五月色惰| 久久久五月婷婷| 五月婷AV| 欧美成人Va| 91久久99久久91熟女精品| 五月天婷婷情色| 激情婷| 日本人妻操| 五月丁香综合啪啪| 婷婷五月影院| 婷婷爱五月| 可以直接看的av| 日本在线噜噜| 这里只有免费的精品| 99精品久久久久| 吊色AV男人的天堂| 九九热这里只有精品5| 超碰在线观看9| 欧洲色区| 色色无码| 九九热在视频| 色婷婷综合视频| 五月婷婷深深爱爱| 丁香六月婷婷一区| 1024人妻无码中文字幕| www.色五月天.com| 五月丁香激情啪啪网| 日本天堂久久| 中文在线成人| 九九综合色综合| 欧洲毛片基地c区| 伊人网欧美在线男人天堂五月丁香| 激情五月小说婷婷| 另类图片天天影视在线观看| 任你爽免费视频| 国产99久久久| 91精品91久久久中77777| 丁香婷婷综合精品六月初| 天天免费成年人视频| 九九视频精品视频精品| 久久久精品人妻录| 色 色 色综合com| 欧美日本黄色| 天天插综合| 国产精品久久久久久久久久| 丁香五月婷婷图片综合| 丁香五月九九| 久操人妻| 五月色欧洲| 丁香婷婷色五月| 91成人电影| 激情五月婷婷| 拍色综合| 丁香五月婷婷色情综合| 日日操夜夜爽白洁| 国内精品玖玖| 亚洲综合无码| 粉嫩AV久久一区二区三区| 久久丁香综合精品综合| 偷拍91九色| 亚洲精品欧洲精品| 思思国产99| 久操福利| 欧美内射AAAAAAXXXXX| 大香蕉久久久久久久久| 五月丁香色| 丁香婷五月| 久久草中文日韩欧美| 狠狠精品干练久久久无码中文字幕| 婷婷丁香五月社区亚洲| 曰曰久久| 99福利视频| 99九九热在线观看| AA片在线观看视频在线播放| 91综合在线观看首页| 狠狠做六月爱婷婷综合aⅴ| 天天操狠狠操| 久草五月天| 99精品久久久久久久久| 色婷婷狠狠爱| 99热这里只有免费| 五月丁香人妻| 九月婷婷人人操人人舔人人爱| 爱操人妻| 婷婷六月花| 九九九九这里只有精品| 久久久日韩特色特黄AAAA| 婷婷五月色播网| 综合久久六月| 九九99精品| 国产精品美女| 狠狠色噜噜狠狠狠888了| 日本色婷婷| 97日日碰碰| 久久久月丁香| 成人AV在线网站| 97久久超视频| 激情校园 亚洲| 日韩啪啪视频| bukadeavzaixian| 五月激情综合五月| 色播丁香| 99在线热视频| 色婷婷狠狠干芒果TV| 99精品网| 丁香六月婷婷开心| 天天日综合| 99热草草| 五月婷婷色播网| 欧美婷婷五月丁香| 天天肏高清在线| av中文网站| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 无码髙清| 婷婷五月欧美AA片免费| 五月婷婷开心色伊人| 99久久久免费| 丁香五月黄色| 丁香婷婷色情社区成人小说| 国产精产国品一二三在观看| 99操碰| 91免费看片| 99色.com| 精品亚洲VA网站| 久久婷青青草原| 先锋资源 996| 亚洲V国产V欧美V久久久久久| 欧美激情综合| 日本九九九九| 久久玖玖综合| 色人妻五月| av网站免费在线| 九九碰九九爱97| 婷婷综合网站| 91精品电影18T| 久久女人天堂| 久99久视频免费观看| 天天色宗合| www.久操| 天天狠狠干| www.久操| 天天天综合网| 丁香九月综合在线| 婷婷操婷婷干婷婷射| 丁香五月婷婷高清| 五月天天天色| 黄色91在线观看| 99九九视频| 色综合视频| 激情五月婷| 色欲色天天香综合| 色久天| 亚洲欧洲色色| 超碰97在线操|