99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

編譯原理課設(shè)利器:GDUT PL0編譯器實(shí)驗(yàn)包全解析

編譯原理課設(shè)利器:GDUT PL0編譯器實(shí)驗(yàn)包全解析 簡(jiǎn)介面向編譯原理課程學(xué)習(xí)者的完整課內(nèi)實(shí)驗(yàn)與課程設(shè)計(jì)資料由廣東工業(yè)大學(xué)學(xué)生在學(xué)習(xí)過程中整理系統(tǒng)覆蓋詞法分析、語法分析、語義分析及代碼生成四大編譯器核心階段并以PL0教學(xué)語言為實(shí)例串起整個(gè)實(shí)驗(yàn)環(huán)節(jié)適合本科階段復(fù)習(xí)、課程設(shè)計(jì)參考或自學(xué)實(shí)踐。資源共131個(gè)文件主要包含PL0源程序、C與Java工程源碼、編譯生成的class/exe產(chǎn)物、分析過程png截圖以及實(shí)驗(yàn)報(bào)告md筆記整體僅3.01MB目錄結(jié)構(gòu)清晰便于按需查找。目前已有500人學(xué)習(xí)下載。實(shí)驗(yàn)報(bào)告中詳細(xì)記錄了每一步實(shí)現(xiàn)細(xì)節(jié)、遇到的問題與解決思路配合源碼和可視化圖表可讓學(xué)習(xí)者直觀理解編譯器構(gòu)造流程掌握PL0解釋器或編譯器的搭建方法是完成課程實(shí)驗(yàn)、撰寫課程設(shè)計(jì)報(bào)告或進(jìn)行相關(guān)復(fù)習(xí)的高價(jià)值參考資料。1. 編譯原理課設(shè)就該拿 PL0 開刀這份 GDUT 實(shí)驗(yàn)包到底裝了什么編譯原理這門課最勸退的不是文法而是你永遠(yuǎn)不知道自己的編譯器離“能跑”還有多遠(yuǎn)。PL0 是 Pascal 之父 Wirth 設(shè)計(jì)的教學(xué)語言去掉一切工程復(fù)雜度幾十行 EBNF 文法就能描述全貌卻把詞法分析、語法分析、語義分析、代碼生成、解釋執(zhí)行這條編譯器流水線完整走了一遍。廣東工業(yè)大學(xué)GDUT這套課內(nèi)實(shí)驗(yàn)和課程設(shè)計(jì)資源正是拿一個(gè)可運(yùn)行的 PL0 編譯器當(dāng)載體把整個(gè)編譯流程拆成能動(dòng)手、能驗(yàn)收、能寫進(jìn)報(bào)告的分階段任務(wù)。對(duì)正在趕編譯原理實(shí)驗(yàn)的在校生來說它是現(xiàn)成的實(shí)現(xiàn)參照對(duì)自學(xué)編譯器構(gòu)造的開發(fā)者來說它是能真正跑起來的最小完整范例。最值錢的不只是代碼而是報(bào)告里記錄的那套“從設(shè)計(jì)到排錯(cuò)”的全過程。2. 先看清家底從 PL0.bpr 到 7 個(gè) class讀文件清單就是讀架構(gòu)2.1 PL0.bpr 重復(fù)出現(xiàn)Borland 工程文件背后的多實(shí)現(xiàn)版本PL0.bpr 是 Borland C Builder 的工程文件壓縮包里出現(xiàn)三次對(duì)應(yīng)三個(gè)不同實(shí)驗(yàn)階段的工程快照。也就是說這份資源不是孤零零的一份源碼而是一組按實(shí)驗(yàn)進(jìn)度不斷迭代的版本。結(jié)合 answer.cpp 的存在可以推斷第一個(gè)實(shí)驗(yàn)用 C 完成了詞法分析器的答案實(shí)現(xiàn)而 Parser.class、Scanner.class、Interpreter.class 這組 Java 編譯產(chǎn)物又在告訴你課程設(shè)計(jì)的最終形態(tài)大概率是用 Java 重寫了一遍完整編譯器。做課設(shè)時(shí)最怕的就是拿到手不知道從哪看起。我的習(xí)慣是先列文件清單再到每個(gè)文件里看它干了什么。這一步能幫你快速判斷這套資源的實(shí)現(xiàn)路線C 版本適合拿來對(duì)照詞法分析的原理Java 版本適合拿來跑通全流程實(shí)驗(yàn)報(bào)告負(fù)責(zé)把兩套代碼串成一條完整的故事線。2.2 七個(gè)核心 class 的職責(zé)邊界一句話說清每個(gè)類管什么PL0.class、Scanner.class、Parser.class、Interpreter.class、Table.class、Symbol.class、Fct.class這七個(gè)類的命名非常規(guī)整基本就是經(jīng)典編譯器教科書的分層結(jié)構(gòu)。我整理了一下class 文件職責(zé)對(duì)應(yīng)編譯階段Scanner.class詞法分析把字符流切成 token 流詞法分析Parser.class語法分析按文法規(guī)約 token同時(shí)驅(qū)動(dòng)語義動(dòng)作語法分析Table.class符號(hào)表管理常量、變量、過程定義語義分析Symbol.class單個(gè)符號(hào)項(xiàng)記錄名字、類型、地址語義分析Fct.class指令類型枚舉對(duì)應(yīng) P-code 中間指令代碼生成Interpreter.class按指令碼逐條執(zhí)行的解釋器目標(biāo)執(zhí)行PL0.class主入口讀取源文件并串聯(lián)各階段驅(qū)動(dòng)注意 Fct.class 的存在幾乎可以斷定它采用了經(jīng)典 PL0 的 P-code 指令集也就是 LIT、LOD、STO、CAL、INT、JMP、JPC、OPR 這一套棧式指令。這套設(shè)計(jì)幾十年來一直被編譯原理教材沿用因?yàn)樗闹噶詈?jiǎn)單到用手工就能解釋執(zhí)行但又足夠覆蓋變量、表達(dá)式、條件跳轉(zhuǎn)、過程調(diào)用這些核心語言特性。想驗(yàn)證我的判斷不必去看源碼直接反編譯 class 文件就行。JDK 自帶的 javap 就是干這個(gè)的javap -c -p Parser.class | head -60這個(gè)命令的作用是反匯編 Parser.class輸出每個(gè)方法的字節(jié)碼指令。-c表示輸出方法體里的字節(jié)碼-p表示包含私有成員head -60只截取前 60 行避免刷屏。跑完之后你會(huì)看到 Parser 內(nèi)部持有 Scanner 實(shí)例的字段引用以及調(diào)用 Table 和 Fct 的操作碼這就等于把整個(gè)編譯器的主干關(guān)系摸了一遍。2.3 可視化文件和實(shí)驗(yàn)報(bào)告答辯時(shí)最值錢的素材CBC00.png、CBC.png、qt00.png 這三個(gè)圖片文件是詞法分析和語法分析過程的可視化輸出一般是用圖形方式展示 token 識(shí)別結(jié)果或者語法樹的構(gòu)造過程。這類截圖在實(shí)驗(yàn)報(bào)告里的分量比代碼本身還重——老師看報(bào)告時(shí)第一眼掃的就是你有沒有真正跑出結(jié)果圖比代碼直觀得多。PL0_Exp、PL0_Des、PL0_Raw 這三個(gè)文件從命名上看分別是 PL0 的表達(dá)式處理、聲明處理和原始語法定義。它們對(duì)應(yīng)了課程設(shè)計(jì)里“語義分析”這一塊的工作內(nèi)容。README.md 則是整份實(shí)驗(yàn)報(bào)告的外殼不只是說明文檔里面有每一步的實(shí)現(xiàn)細(xì)節(jié)、遇到的問題和解決方式這份“踩坑實(shí)錄”才是整套資源里最值得先讀的東西。3. 詞法分析實(shí)驗(yàn)復(fù)現(xiàn)把源程序字符流切成 token核心代碼與驗(yàn)收方法3.1 詞法分析器該輸出什么PL0 的五類 token 與處理邊界詞法分析器的輸入是一串字符輸出是一串 tokenPL0 的 token 分五類關(guān)鍵字、標(biāo)識(shí)符、無符號(hào)整數(shù)、運(yùn)算符和界符。關(guān)鍵字包括 BEGIN、END、IF、THEN、WHILE、DO、CONST、VAR、CALL、PROCEDURE、READ、WRITE、ODD 這些保留字運(yùn)算符包括 - * / # : ( ) , ; .其中#在 PL0 里表示“不等于”。這里有兩個(gè)容易踩的邊界第一標(biāo)識(shí)符必須以字母開頭后面可以跟字母或數(shù)字但如果出現(xiàn)1abc這種數(shù)字后直接接字母的寫法必須在詞法階段報(bào)錯(cuò)不能把1和abc拆成兩個(gè) token 放過去第二:、、這類雙字符運(yùn)算符必須做“最大匹配”也就是一次識(shí)別兩個(gè)字符不能把拆成和否則語法分析階段會(huì)徹底亂套。3.2 用 C 實(shí)現(xiàn)一個(gè)精簡(jiǎn) Scanner直接可編譯的核心代碼answer.cpp 是這份資源里詞法分析的 C 實(shí)現(xiàn)參考我按 PL0 標(biāo)準(zhǔn)寫了一版同樣思路的精簡(jiǎn) Scanner可以直接編譯運(yùn)行// pl0_scanner.cpp —— PL0 詞法分析器精簡(jiǎn)實(shí)現(xiàn) // 編譯: g pl0_scanner.cpp -o pl0_scanner #include cctype #include cstring #include string #include iostream // 關(guān)鍵字表詞法分析器必須先把保留字和普通標(biāo)識(shí)符區(qū)分開 const char *keywords[] { BEGIN, END, IF, THEN, WHILE, DO, CONST, VAR, CALL, PROCEDURE, READ, WRITE, ODD }; // 判斷標(biāo)識(shí)符是否為關(guān)鍵字直接查表 bool isKeyword(const std::string word) { for (size_t i 0; i sizeof(keywords) / sizeof(keywords[0]); i) { if (word keywords[i]) return true; } return false; } // 從 src 的 pos 位置開始切一個(gè) tokenpos 是引用參數(shù)會(huì)持續(xù)推進(jìn) std::string nextToken(const std::string src, size_t pos) { // 跳過空白和換行PL0 標(biāo)準(zhǔn)語法沒有注釋符號(hào) while (pos src.size() isspace(src[pos])) pos; if (pos src.size()) return ; // 返回空串表示 EOF // 標(biāo)識(shí)符或關(guān)鍵字以字母開頭后續(xù)允許字母、數(shù)字、下劃線 if (isalpha(src[pos])) { size_t start pos; while (pos src.size() (isalnum(src[pos]) || src[pos] _)) pos; std::string word src.substr(start, pos - start); return isKeyword(word) ? word : IDENT( word ); } // 無符號(hào)整數(shù)連續(xù)數(shù)字PL0 只支持整數(shù)不支持浮點(diǎn) if (isdigit(src[pos])) { size_t start pos; while (pos src.size() isdigit(src[pos])) pos; return NUMBER( src.substr(start, pos - start) ); } // 雙字符運(yùn)算符必須放在單字符判斷之前否則 會(huì)被拆開 if (pos 1 src.size() src[pos] : src[pos 1] ) { pos 2; return :; } if (pos 1 src.size() src[pos] src[pos 1] ) { pos 2; return ; } if (pos 1 src.size() src[pos] src[pos 1] ) { pos 2; return ; } // 單字符運(yùn)算符和界符直接返回當(dāng)前字符 return std::string(1, src[pos]); } int main() { std::string src VAR x, y; BEGIN x : y 2 END.; size_t pos 0, cnt 0; while (true) { std::string tok nextToken(src, pos); if (tok.empty()) break; std::cout cnt : tok \n; } return 0; }代碼里的關(guān)鍵邏輯是這三處isalpha(src[pos])判斷標(biāo)識(shí)符起始條件因?yàn)?PL0 規(guī)定標(biāo)識(shí)符必須以字母開頭不能用下劃線開頭連續(xù)數(shù)字用isdigit逐字符拼出整數(shù)但沒有做溢出檢查實(shí)驗(yàn)里一般不管這個(gè)雙字符運(yùn)算符判斷必須在單字符之前這是最大匹配原則的直接應(yīng)用。如果調(diào)換順序:會(huì)被拆成:和兩個(gè) token后續(xù)語法分析全都白做。3.3 運(yùn)行驗(yàn)證與邊界用例怎么確認(rèn) token 序列不漏不重寫完 Scanner 別急著往下走先把驗(yàn)收用例設(shè)計(jì)好。我一般會(huì)準(zhǔn)備幾組邊界輸入VAR x, y; BEGIN x : y 2 END.這是標(biāo)準(zhǔn)程序期望輸出依次是VAR、IDENT(x)、,、IDENT(y)、;、BEGIN、IDENT(x)、:、IDENT(y)、、NUMBER(2)、END、.一共 13 個(gè) token。如果輸出里多出或漏掉一個(gè)說明某個(gè)分支的pos推進(jìn)有問題這是詞法實(shí)驗(yàn)最常見的錯(cuò)誤來源。再測(cè)兩組特殊情況IF x y THEN x : 1用來驗(yàn)證沒有被拆開VAR 1x;用來驗(yàn)證數(shù)字后直接接標(biāo)識(shí)符的情況。對(duì)第二種上面這版代碼會(huì)把1輸出成 NUMBER把x輸出成 IDENT這在標(biāo)準(zhǔn) PL0 里是詞法錯(cuò)誤理想情況應(yīng)當(dāng)在isdigit分支里追加檢查讀完數(shù)字后若當(dāng)前字符是字母直接報(bào)告非法 token 并中止。這一步建議你自己加上因?yàn)樗抢蠋熥類劭鄯值男〖?xì)節(jié)。4. 語法與語義分析從 token 流到中間指令再到解釋執(zhí)行4.1 PL0 的 EBNF 文法與遞歸下降設(shè)計(jì)的映射關(guān)系詞法分析只負(fù)責(zé)切 token真正的“讀懂程序結(jié)構(gòu)”是語法分析的事。PL0 的完整文法用 EBNF 寫出來也就十幾行program block . . block [ CONST ident number {, ident number} ] [ VAR ident {, ident} ] { PROCEDURE ident ; block ; } statement . statement ident : expression | CALL ident | BEGIN statement {; statement} END | IF condition THEN statement | WHILE condition DO statement | READ ident | WRITE expression . condition ODD expression | expression (|#||||) expression . expression [|-] term {(|-) term} . term factor {(*|/) factor} . factor ident | number | ( expression ) .遞歸下降分析的做法就是給每個(gè)非終結(jié)符寫一個(gè)同名函數(shù)函數(shù)體里按產(chǎn)生式右側(cè)的順序逐項(xiàng)消費(fèi) token。這個(gè)方案相比自底向上的 LR 分析代碼量小得多而且出錯(cuò)時(shí)可以直接打印出“在第幾行缺了什么”這是教學(xué)編譯器幾乎都選遞歸下降的根本原因。你在這份資源的 Parser.class 里反編譯看到的就是一組按 expression、term、factor 嵌套設(shè)計(jì)的函數(shù)。4.2 符號(hào)表與指令集設(shè)計(jì)Table/Symbol/Fct 三件套分工語義分析階段要處理兩件事一是檢查變量有沒有聲明、類型對(duì)不對(duì)二是為代碼生成準(zhǔn)備地址信息。這份資源里的 Table.class 負(fù)責(zé)維護(hù)符號(hào)表Symbol.class 定義單個(gè)符號(hào)項(xiàng)Fct.class 枚舉中間指令。經(jīng)典的 PL0 符號(hào)表是每層過程一張表通過層差level和地址addr來定位變量。下面是一個(gè)簡(jiǎn)化但結(jié)構(gòu)完整的 Java 實(shí)現(xiàn)// Symbol.java —— 符號(hào)項(xiàng)定義 public class Symbol { String name; // 符號(hào)名 int kind; // 0常量, 1變量, 2過程 int level; // 所在過程層差 int addr; // 在本層符號(hào)表中的位置 int value; // 常量值變量和過程不用 public Symbol(String name, int kind, int level, int addr, int value) { this.name name; this.kind kind; this.level level; this.addr addr; this.value value; } }// Table.java —— 單層符號(hào)表負(fù)責(zé)登記和查找 import java.util.LinkedHashMap; import java.util.Map; public class Table { private MapString, Symbol symbols new LinkedHashMap(); private int nextAddr; // 下一個(gè)可分配的符號(hào)表地址槽 // 向表中登記一個(gè)符號(hào)重復(fù)定義返回 -1 public int enter(String name, int kind, int level, int value) { if (symbols.containsKey(name)) { System.err.println(錯(cuò)誤符號(hào) name 重復(fù)定義); return -1; } Symbol s new Symbol(name, kind, level, nextAddr, value); symbols.put(name, s); return s.addr; } // 在當(dāng)前層查找符號(hào) public Symbol find(String name) { return symbols.get(name); } }這段代碼里的LinkedHashMap保證符號(hào)按聲明順序排列方便生成報(bào)告時(shí)展示符號(hào)表內(nèi)容。enter返回的是地址槽位語法分析拿到這個(gè)地址后會(huì)交給代碼生成階段寫入 P-code。4.3 P-code 指令集與 Interpreter 的執(zhí)行模型PL0 的中間代碼不用三元式也不用四元式而是一套基于棧的 P-code 指令。每條指令三個(gè)字段指令碼、層差、操作數(shù)。核心指令就這幾條指令含義作用LIT 0, 常量加載常量把常量壓入棧頂LOD 層差, 地址加載變量按層差和地址取變量值壓棧STO 層差, 地址存儲(chǔ)變量把棧頂值寫入變量地址INT 0, 大小分配空間為局部變量在棧上開辟空間JMP 0, 地址無條件跳轉(zhuǎn)讓程序計(jì)數(shù)器跳到目標(biāo)位置JPC 0, 地址條件跳轉(zhuǎn)棧頂為假時(shí)跳轉(zhuǎn)CAL 層差, 地址調(diào)用過程保存返回地址并跳轉(zhuǎn)OPR 0, 運(yùn)算號(hào)運(yùn)行運(yùn)算彈出棧頂元素做加減乘除或比較Interpreter 的核心就是個(gè) while 循環(huán)加 switch逐條讀指令、逐條執(zhí)行。這里給一版 Java 簡(jiǎn)化實(shí)現(xiàn)// InterpreterLoop.java —— P-code 解釋執(zhí)行主循環(huán)結(jié)構(gòu)簡(jiǎn)化版 public class InterpreterLoop { // 棧式虛擬機(jī)stack[top] 是棧頂top 從 0 開始遞增 private int[] stack new int[1000]; private int top 0; // code 數(shù)組模擬代碼區(qū)每行是 {指令碼, 層差, 操作數(shù)} public void execute(int[][] code) { int pc 0; while (pc code.length) { int fct code[pc][0]; int level code[pc][1]; int addr code[pc][2]; pc; // 先取指令再自增防止跳轉(zhuǎn)指令覆蓋當(dāng)前指令 switch (fct) { case 0: // LIT stack[top] addr; break; case 1: // LOD // 這里用 base(level) 找層差對(duì)應(yīng)的?;刂?stack[top] stack[base(level) addr]; break; case 2: // STO stack[base(level) addr] stack[--top]; break; case 5: // JMP pc addr; break; case 6: // JPC if (stack[--top] 0) pc addr; break; case 9: // OPR 的簡(jiǎn)化入口運(yùn)算號(hào)在 addr 里 runOp(addr); break; } } } private int base(int level) { // 完整版需要維護(hù) display 寄存器數(shù)組這里返回 0 只是占位 return 0; } private void runOp(int op) { // 按 op 區(qū)分 - * / 比較等運(yùn)算具體指令分配見實(shí)驗(yàn)報(bào)告 } }這里的base(level)是最關(guān)鍵也最容易寫錯(cuò)的地方。真實(shí) PL0 在棧上維護(hù)了靜態(tài)鏈SL和動(dòng)態(tài)鏈DLbase(level)需要沿著靜態(tài)鏈向上找 level 層才能拿到對(duì)應(yīng)過程的棧起始地址。很多初版代碼在這里直接返回 0導(dǎo)致嵌套過程一調(diào)用就棧錯(cuò)亂。這也是為什么上課總強(qiáng)調(diào)“先畫棧幀布局圖再寫解釋器”。4.4 實(shí)驗(yàn)驗(yàn)證走一遍完整編譯流程完成了 Scanner、Parser、Table、Interpreter 之后用一個(gè)最小的 PL0 程序驗(yàn)證全流程VAR x; BEGIN x : 1; WRITE x END.這一行程序的編譯產(chǎn)物應(yīng)該是INT分配一個(gè)變量槽LIT 1壓入常量STO存入 xLOD讀回 xWRITE對(duì)應(yīng)的指令輸出棧頂值。我在本地跑通這五步之后才敢往文法里加 IF 和 WHILE。建議你也用同樣的順序逐步擴(kuò)展不要一上來就寫全部文法。5. 實(shí)驗(yàn)報(bào)告與踩坑記錄這些雷我替你先踩了5.1 實(shí)驗(yàn)報(bào)告的組織方式別寫成使用說明書GDUT 的實(shí)驗(yàn)報(bào)告一般要求包含實(shí)驗(yàn)?zāi)康?、算法設(shè)計(jì)、關(guān)鍵代碼、測(cè)試截圖和問題分析。很多同學(xué)把報(bào)告寫成了代碼注釋的搬運(yùn)工這是最吃虧的。老師真正想看的是兩樣?xùn)|西一是你對(duì)“為什么這樣設(shè)計(jì)”的說明比如為什么選遞歸下降而不是 LR、符號(hào)表為什么要分層二是你遇到的具體問題和排查過程這部分才是報(bào)告里最有說服力的原創(chuàng)內(nèi)容。我的建議是報(bào)告結(jié)構(gòu)固定為五段式文法設(shè)計(jì)用 EBNF 描述你的語言、算法流程圖狀態(tài)轉(zhuǎn)換圖或遞歸下降函數(shù)調(diào)用關(guān)系、核心代碼只選取詞法難點(diǎn)和語義動(dòng)作掛接點(diǎn)、測(cè)試用例至少三組包含一組錯(cuò)誤輸入的報(bào)錯(cuò)截圖、問題記錄每個(gè)問題按現(xiàn)象、原因、解決三段寫。CBC00.png、CBC.png 這些可視化圖片放在“測(cè)試用例”一節(jié)作為運(yùn)行結(jié)果的直接證據(jù)。5.2 五個(gè)高頻翻車現(xiàn)場(chǎng)現(xiàn)象、原因、解決三步定位第一個(gè)坑運(yùn)行 Parser.class 直接報(bào) UnsupportedClassVersionError?,F(xiàn)象是java Parser命令拋出版本不支持異?;蛘咛崾绢愇募姹惧e(cuò)誤。原因是編譯這個(gè) class 的 JDK 版本和當(dāng)前運(yùn)行環(huán)境的 JDK 版本不匹配class 文件頭部的 major version 對(duì)應(yīng)不同的 JDK 發(fā)行版。解決方法是先反編譯看版本號(hào)再?zèng)Q定安裝哪個(gè)版本。javap -verbose Parser.class | grep major versionjavap -verbose會(huì)輸出 class 文件的完整元信息grep major version直接過濾出版本號(hào)。major 52 對(duì)應(yīng) JDK 855 對(duì)應(yīng) JDK 1161 對(duì)應(yīng) JDK 17??吹桨姹咎?hào)之后裝對(duì)應(yīng)版本的 JDK或者直接用當(dāng)前 JDK 重新編譯源碼哪個(gè)方便用哪個(gè)。第二個(gè)坑1abc這類輸入沒有在詞法階段報(bào)錯(cuò)?,F(xiàn)象是詞法分析器把1abc拆成 NUMBER(1) 和 IDENT(abc)語法分析居然通過了運(yùn)行結(jié)果錯(cuò)誤。原因是數(shù)字識(shí)別分支只認(rèn)數(shù)字沒有檢查數(shù)字結(jié)束后緊跟著的字符是不是字母。解決方法是讀數(shù)字后加一個(gè)判斷if (isdigit(src[pos])) { size_t start pos; while (pos src.size() isdigit(src[pos])) pos; if (pos src.size() isalpha(src[pos])) { std::cerr 詞法錯(cuò)誤: 數(shù)字后不能直接跟字母\n; return ; } return NUMBER( src.substr(start, pos - start) ); }這段多出來的判斷能讓非法輸入在一開始就被攔下而不是跑到語法階段產(chǎn)生一串看不懂的錯(cuò)誤。第三個(gè)坑變量未聲明卻通過了語法分析?,F(xiàn)象是BEGIN x : 1 END;這種程序沒在 VAR 段聲明 x語法分析沒報(bào)錯(cuò)運(yùn)行時(shí)棧操作亂套。原因是語法分析只檢查了文法結(jié)構(gòu)沒在語義動(dòng)作里查符號(hào)表。解決方法是 Parser 在處理ident : expression之前先調(diào)用Table.find(ident)查不到就輸出“未聲明標(biāo)識(shí)符”并中止編譯這一步也叫語義分析的基礎(chǔ)檢查是扣分重災(zāi)區(qū)。第四個(gè)坑嵌套過程里同名變量互相覆蓋。現(xiàn)象是 procedure A 聲明了 var xprocedure B 也聲明了 var xB 里改 x 之后回到 A 里發(fā)現(xiàn) x 也被改了。原因是符號(hào)表只做了一層沒有按過程分層維護(hù)作用域。解決方法是每進(jìn)入一個(gè) block 新建一層符號(hào)表查變量時(shí)從當(dāng)前層往上逐層找當(dāng)前層沒有就找上一層找不到才報(bào)未聲明。這就是 4.2 里Table需要擴(kuò)展成多層鏈表的原因只靠一個(gè)LinkedHashMap支撐不了嵌套過程。第五個(gè)坑zip 解壓后 class 文件打不開運(yùn)行直接崩潰?,F(xiàn)象是解壓后某個(gè) class 文件用 javap 都反編譯不了提示zip END header not found或者 EOFException。原因有兩種可能zip 包是偽加密加密標(biāo)志位被置位但文件內(nèi)容并沒真正加密一部分解壓工具會(huì)誤報(bào)或者壓縮包本身不完整某個(gè)文件在傳輸中斷裂。解決方法是先判斷偽加密用 7-Zip 打開 zip 包如果能看到文件列表且能正常預(yù)覽內(nèi)容但解壓時(shí)報(bào)錯(cuò)基本就是偽加密。這種情況下用工具修復(fù)加密標(biāo)志位或者換用能忽略偽加密的解壓工具重新解壓。如果確認(rèn)是文件損壞檢查壓縮包里的文件大小和 README 記錄是否一致對(duì)不上就重新下載。這個(gè)問題的排查順序是先看壓縮包 CRC再單文件校驗(yàn)最后才考慮是不是偽加密。5.3 一條普適的排錯(cuò)路徑從報(bào)錯(cuò)現(xiàn)象反推階段編譯器是一個(gè)多階段流水線出問題時(shí)先不要亂猜按階段定位能省一半時(shí)間。token 流錯(cuò)了是詞法階段問題token 對(duì)但語法樹構(gòu)造失敗是語法階段問題語法通過但運(yùn)行時(shí)棧亂是符號(hào)表或指令生成問題指令序列對(duì)著呢但結(jié)果錯(cuò)是運(yùn)算實(shí)現(xiàn)問題?,F(xiàn)象排查階段首選檢查點(diǎn)token 輸出不對(duì)詞法分析雙字符運(yùn)算符分支、數(shù)字邊界出現(xiàn) “expected …”語法分析遞歸下降函數(shù)是否漏調(diào)用advance()運(yùn)行時(shí)報(bào)棧越界語義分析變量是否登記符號(hào)表、層差計(jì)算編譯通過但結(jié)果錯(cuò)代碼生成OPR 運(yùn)算號(hào)映射是否正確6. 課后擴(kuò)展給 PL0 加三樣?xùn)|西讓答辯老師眼前一亮6.1 擴(kuò)展一給 term 加乘除運(yùn)算練習(xí)優(yōu)先級(jí)掛接標(biāo)準(zhǔn) PL0 的term只處理乘和除有的實(shí)驗(yàn)版本連乘除都沒有。加乘除很簡(jiǎn)單難點(diǎn)不在詞法——*和/本來就是單字符運(yùn)算符——而在語法函數(shù)里運(yùn)算符的保存時(shí)機(jī)。我第一次寫時(shí)直接這樣寫void term() { factor(); while (tok MUL || tok DIV) { advance(); factor(); emit(tok MUL ? Fct.OPR_MUL : Fct.OPR_DIV); } }這段代碼有個(gè)隱藏 bugadvance()已經(jīng)把tok更新成下一個(gè) token 了emit里的tok MUL判斷用的根本不是剛才讀到的運(yùn)算符指令生成必然錯(cuò)位。正確做法是先把運(yùn)算符存下來再前進(jìn)void term() { factor(); while (tok MUL || tok DIV) { int op tok; // 關(guān)鍵先保存當(dāng)前運(yùn)算符 advance(); // 再讀下一個(gè) token factor(); emit(op MUL ? Fct.OPR_MUL : Fct.OPR_DIV); } }這種“先存后取”的細(xì)節(jié)就是遞歸下降分析里最常見的隱性 bug 來源。你在這份資源的報(bào)告里大概率也能看到類似的記錄。6.2 擴(kuò)展二給符號(hào)表加數(shù)組類型練習(xí)地址計(jì)算PL0 只有簡(jiǎn)單變量加數(shù)組是不錯(cuò)的加分項(xiàng)。需要在Symbol里增加上下界字段在factor和賦值語句里解析下標(biāo)表達(dá)式代碼生成時(shí)把下標(biāo)換算成偏移量。數(shù)組的坑在下標(biāo)越界運(yùn)行時(shí)要生成一條檢查指令下標(biāo)超出范圍就報(bào)錯(cuò)終止。這個(gè)擴(kuò)展能把符號(hào)表、語義檢查、代碼生成三個(gè)階段串起來練一遍。6.3 擴(kuò)展三用 Graphviz 導(dǎo)出語法樹答辯現(xiàn)場(chǎng)生成圖在 Parser 里收集語法樹節(jié)點(diǎn)輸出成 DOT 格式文件再用 Graphviz 生成 PNG。答辯時(shí)當(dāng)場(chǎng)跑一遍比 PPT 里的截圖更有說服力digraph ast { node0 [label:]; node1 [labelx]; node2 [label]; node3 [labely]; node4 [label2]; node0 - node1; node0 - node2; node2 - node3; node2 - node4; }這個(gè) DOT 文件對(duì)應(yīng)x : y 2的語法樹digraph聲明有向圖每個(gè)node定義一個(gè)點(diǎn)-定義父子關(guān)系。實(shí)戰(zhàn)時(shí)把這個(gè)思想延伸到完整 PL0在 Parser 的每個(gè)子函數(shù)里創(chuàng)建新節(jié)點(diǎn)并把子節(jié)點(diǎn)掛上去最后統(tǒng)一輸出。我做課設(shè)那會(huì)兒吃過最大的虧是把語義分析和代碼生成混在一個(gè)超大 switch 里寫調(diào)試一個(gè)錯(cuò)誤要翻幾百行代碼。從那以后我每次做編譯器實(shí)驗(yàn)都強(qiáng)制先把 Fct 指令集、Symbol 結(jié)構(gòu)和符號(hào)表接口定義好再動(dòng)手寫 Parser——接口穩(wěn)定了后面所有階段只是填實(shí)現(xiàn)細(xì)節(jié)。這套 GDUT 資源的報(bào)告里恰好也有類似的分階段設(shè)計(jì)記錄建議你先讀 README 再動(dòng)代碼。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九九热9| www.精品99| 99综合| 先锋资源婷婷| 九九九九这里只有精品| 激情五月深爱婷婷| 婷婷丁香97| 五月丁香啪综合| 丁香五月婷婷五月| 999精品久久久久久久| 丁香五月色欲| 大香蕉久久伊人婷婷五月丁香| 九九精品热| 开心六月丁香五月婷婷| 国产亚洲av片| 97人人超| 色欲午夜无码久久久久久张津瑜| 国产色丁香| 野外99热| 成人无码精品1区2区3区免费看| 先锋av性爱成人电影| 超碰在线资源| www.超碰在线| 五月天综合网| 99热国品| 久久婷婷超碰| 精品一二三区久久AAA片| 色情播放| 午夜丁香丁香婷婷| 精品爆操| 国产成人在线精品| 九热视频免费观看| 久久婷婷综合色丁香| h在线看免费版在线看| 婷婷情色激情| 色婷婷久久综合久色综| 色五月首页| 操人妻90p| 超碰无码老师| 两性婷婷丁香五月| 变态另类色图| 中文字幕成人影视| 九九国产视频| 天天天天天操| 婷婷六月丁香久| 性爱激情小说AV五月丁香花| 婷婷五月天最新网址| 涩丁香| 色播六月| 亚洲视频二区| 夜色综合网| 丁香六月婷婷色XXXX| 丁香啪啪| 婷婷五月天久久久| 欧美婷婷丁香五月社区| 人人操97| 香蕉久久六月| 亚洲AV网址| 无码yw| 996黄色片| 久久久久久18| 久久婷婷伊人| 婷婷色五月久久| 五月婷婷五月天天| 久久这里只有国产视频| 大狠狠在线| 婷婷色色播五月天| 天堂久久婷婷| 丁香六月婷婷综合| 色色色成人网| 超碰人人摸AV| 丁香五月婷婷亚洲激情四射| 天天操五月天| 欧美性爱中文字幕| 91dy.av| 开心五月婷婷在线| 天天骑天天操| www久久99| 情欲禁地| 一区视频网站| 99热免费网站| 免费观看的婷婷五月视频在线| 天天综合五月| 婷色五月天| 色色色综合| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 免费视频无码| 五月天婷婷丁香花| 视色综合| 91色婷婷综合久久中文字幕二区| 伊人色五月| 久草婷婷| 亚洲色色在线| av性爱在线| 高清无码中文字幕aVDV| 五月婷婷性爱| 免费观看18视频网站| 九九精品碰| 日韩性视频| 五月丁香天天| 成人va在线播放| 九九热这里| 亚洲99热| 色综合久久99色| 狠狠色官网| 欧美色色色色色| 九九碰九九爱97超碰| 丁香五月六月综合激情| 久久婷婷五月综合色丁香花| 国产VA播放| 婷婷激情综合| 97久久综合网| 六月丁香婷婷天堂| 亚洲亚洲人成综合网络| 99热这里只有精品55| 日韩精品AV一区二区三区| 天天色五月| 久热这里只有精品6| 婷婷五月天视| 天天操夜夜啊| 狠狠干在线视频| 五月丁香激情综合网| 久久久久久婷| 色婷五月天综合网| 久久久久亚洲A∨成人乱码电影| 色婷婷AV久久久久久久| 色色9 9| www.99热在线| 夜夜撸日日操| 99在线热视频| 久久精品系列| 婷婷综合仓库中文| 1995年关宝慧版蜘蛛女| 亚洲第一成人无码A片| 午夜丁香婷婷| 丁香五月六月婷婷综合| 97干在线观看| 亚洲AV中文在线| 婷婷天天五月天| 五月丁香啪啪婷婷| 狠狠人妻色综合| 97在线99| 亚洲色爽| 午夜无码熟熟妇丰满人妻| 九九热a| 久青操| 伊人久久丁香五月91| Av性爱网站| 五月丁香啪啪综合| 丁香五月亚洲无码| 久久久五月天婷婷| 婷婷午夜综合| 欧美噜噜噜草| 桃色五月婷婷| 日韩久久这里只有精品| 殴美97色| 色九区| 五月丁香免费视频| 香蕉综合在线| 色婷婷在线视频久| 国产AV一区二区三区最新精品| 色色五月婷婷久久| 五月激情婷婷综合| 色综合天天网| 在线超碰91| 欧美激情2025| 色色草97| 67194成I人在线观看线路1| 久久曰曰| 亚洲六月综合激情久久下卡| 免费播放片大片| 婷婷免费无马| 丁香,开心成人,久久| 久久丁香久久| www.激情五月天。com| 丁香五月婷婷五月| AV五月丁香| 欧美成人AAA片一区国产精品| 天天成人综合| 日韩狠狠色| 亚洲va成人va成人va在线观看| 久操激情| 中文字幕婷婷9月天| 国产视频婷婷| 在线观看免费狠狠色丁香香综合| 亚洲综合在线视频| www.26uuu.com亚洲电影| 天天久久婷婷| 色综合色| 丁香五月欧美色综合| 97超碰综合| 国产成人片| 桔色成人在线| 色婷婷激情小说网| 4399亚洲视频| 欧亚中文A V| 99久在线精品| 天天精品视频免费观看| 就爱干 在线| 婷婷九色| 狠狠爱婷婷五月天| 欧美日韩成人在线| VA色婷婷| 操97免费超级视频| 激情深爱综合网| 久久中国毛毛片爱久久| 一本大道伊人AV久久综合| 五月天色综合| 精品九九在线观看| 五月丁香免费视频| 国产精品丝| 这里只有精彩视频| 五月丁香色婷婷久久| 婷婷丁香第一页| 日本成人综合| 亚洲成片在线观看| 国产干逼片| 欧美25p| 五月久久丁香| 操逼福利视频| 久久婷婷五月丁香| 久久只这里有精品| 91一起操| 亚洲AV日韩无码| 伦乱人妻| 色99xx| 天天综合色| 91操操| 99免费热视频在线| 久热这里只有精品6| 97色色色视屏| 日韩一66精品| 丁香五月综合福利视频导航| 婷婷五月天直播| 五月丁香色情| 久久人妻久久久久| 啪啪黄页网| 一本到不卡高清DVD| 大香蕉久操| 欧美日本va| 99热精品在线播放| 九九热亚洲中文在线观看免费| 久久伊人9| 97香蕉人人在线观看| 激情婷婷六月天| 婷婷六月色开 | 偷偷操99| 丁香花五月天激情| 婷婷五月激情四月综合| www.99热视频在线观看| 午夜精品777| 性小说五月天| 色丁香五月综合网| 深爱婷婷基地| 996热re视频精品视频| 免费观看2018www黄色操逼网站| 色色色五月天婷婷| 丁香五月婷婷www..com| WwW色婷婷| 99热精品在线在线| 伊人丁香在线| 超碰成人AV| 2015WWW永久免费观看播放| 色99超碰| 99色婷婷视频| 天天爽综合| 色色色.COM| 欧美婷婷精品激情| 五月天大香蕉| 99热这里有精品| 国产AV影片| 99在线观看精品视频| 色婷久久| 亚洲婷婷综合视频| 久久久人妻不卡| 亚洲激情丁香五月天色| 久久精品亚洲一级牲爱综合| 丁香婷婷五月色成人网站| 丁香九月婷婷综合| 五月丁香人妻| 九九爱激情| 碰碰碰91| 亚洲色色在线| 日日夜夜天天| 国产乱人偷精品人妻A片| 精品香蕉99久久久久网站 | 狠狠综合网| 99热热热99精品丁香| 91怕怕网| 五月激情丁香久久综合网| 伊人婷婷色激情丁香| 久久五月天婷婷| 深爱五月激情| 久久网址99热| 日韩狠狠色婷婷| 丁香婷在线| 五月天久久综合| 九九这里只有精品| 色欲影香| 五月婷婷第四色| 97香蕉久久超级碰碰高清版| 色九四色| 九九热九九| 激情综合网五月天| 性按摩玩人妻HD中文字幕| 婷五月天| 久久久久人无码人妻| 天堂网啪啪| 久久九九99| 九九色播五月丁香| 婷婷激情五月天视频在线| 91啪啪视频| 中文字幕网伦射乱中文| 六月婷婷成人| 成人AV在线电影| 婷婷综合性爱网| 久99久视频| 激情五月天www| 亚洲最大视频| 超碰操日| 96性爱视频| 五月婷婷色影院| 国产亚洲AV人片在线| 欧美A级网站| 婷婷五月天综合在线| 国产国产乱老熟女视频网站97| 久婷婷五月综合欧美| 天天日夜夜操五月| 国外亚洲成AV人片在线观看| 婷婷狠狠久久| 日本九九九九| 丁香六月婷婷五月天| WWW.桔色成人.COM| 97成人在线视频精品| 四色女婷婷| 五月激情站| 97五月婷婷| 六月丁香激情网| 五月婷婷丁香在线| 99精品在线播放| 日本五月天网站| 淫视馆av三区| 99色免费视频| 大学生高潮无套内谢视频| 任你操精品免费| 五月婷婷中文| 久久九九re热| 五月婷婷啪啪网| 99久久精品亚洲综合| 久狠日av| 最新日韩久热免费视频看看| 久久婷婷人人| 大香蕉天堂| 婷婷五月天成人| 九九热青青草| 99热1| 伊人九九综合| 九九综合伊人| 久久精品爱爱| 无码一区精品一区视频| 五月婷婷二月丁香| 久9精品| 99精品在线| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 亚洲女婷婷五月基地综合久久久 | yw.av| 亚洲欧美一区二区三区四区爱爱动图| 超碰人人操人人9| 人妻内射视频| 99日本精品视频热| 99精品无码| 婷婷深爱五月天在线| 国产精产国品一二三在观看| 天天干天天操天天拍| 丁香五月婷婷久久久| 婷婷五月在线播放| 狠狠色婷婷7777久| 亚洲精品久久久久久久久久飞鱼| 激情五月婷婷色播网| 3DAV亚洲香蕉久久 一区二区| 99热这里只有精品1| 久久久ww| 国产精产国品一二三在观看| 五月天婷婷在线视频| 久综合| 激情四射五月天| 久热最新视频| 日韩啪| 丁香五月天社区| 亚洲激情视频网| 五月婷婷丁香综合,亚洲天堂| 婷婷五月天小说| 九九九这里只有精品| 成人中文网| 激情五月久久| 九九免费在线视频| 久久色天堂| 色色婷| 丁香婷婷色情社区成人小说| 色婷婷五月综合| 国产乱妇乱子在线播视频播放网站 | 庭庭久久内射| .青娱乐天天操B| 性爱动图国产麻豆一区二区三区| 婷婷新网址| 久热这里只有精品99re| 久久金品黃色| 99热这里精| 婷婷爱爱蜜臀天天操| 伊人玖玖精品| 能直接看的AV网站| 六月婷婷深深爱| 狠狠色婷婷丁香五月| 久久99久久99久久99人受| 丁香六月天婷婷开心综合| 骚五月婷婷| 亚洲九N| 久操无码| 九九热最新| 丁香五月综合在线| 亚洲五月天综合色| 日本九九视频| 五月丁香狠狠爱婷婷综合| 婷婷九月色| 婷婷色五月在线视频| 韩国情人在线电视剧免费观看高清版全集 | 午夜电影网VA内射| 99热精品在线播放观看| 日韩欧美颜射| 五月天天综合| 天天透天天干| 九九中文色色| 9l视频自拍九色9l黑人| 亚洲精品久久久无码| 999婷婷综合| 五月丁香六月婷婷操操操| 婷婷丁香水多多视频| 亚洲精品视频在线播放| 久久婷婷内射| 久久久99婷婷久久久久久| 丁香久久在线| 99超超碰| 国产熟妇乱子伦hd| 日本V在线观看不卡视频网站| 久热只有精品| 日韩另类| 色综合色综合网| 另类视频在线| 日韩亚洲视频| 天天天天天天天操| 99 这里只有精品| 久久机热这里只有精品免费视频| 久热这里只有精品性色AV| 色域五月婷婷丁香| 九月婷婷久久久| 91人人操.COM| 六月丁香啪啪| 久久久思思热| 色婷婷婷综合五月天| 第二色AⅤ| 色婷婷综合久色AV五色最新| 五月天 综合 在线| www.五月天性.com| 五月丁香六月花| 婷婷综合在线观看视频| 日日夜夜爽| 久久这里只| 久久99性爱| 婷婷干五月综合在线播放| 99免费视频在线观看爱| 日韩1区2区| 五月天播播| 色综合天堂| 日本三级中文字幕| 色婷五月| 久99在线| 91热视频色网站| 91黄址| 综合亚洲色色| 狠狠色精品综合| 天天爽天天干天天| 人人综合久| 黄网在线免费观看| 丰满少妇乱A片无码| 九九精品9| 色玖玖玖| 五月丁香综合网色欲| 亚洲欧洲自拍图片专区五月天| 婷婷深爱五月丁香网| www.婷婷五月| 亚洲午夜av| 亚洲偷| 99玖玖人人| 日韩色五月| 欧美天天爽| 狠狠干狠狠干狠狠干狠狠干| 日韩在线观看亚洲| 亚洲精品又粗又大又爽A片| 另类丁香五月天区图| 综合九九久久| 欧美精产国品一二三区| 开心五月网 | 亚洲乱码日产精品BD| 99热在线观看成人| 婷婷久久五月| 丁香婷婷六月| 亚洲精品99| 久久大大香| www.五月婷婷.com| 五月丁香婷婷三级| 91超级碰碰碰| A级毛片高清免费不卡播放谢谢谢谢| 这里只有精品免费在线视频| 99思思| 丁香五月久久| 中文字幕不卡视频| 丁香婷婷激情五月色| 天天综合网在线| 精品一区二区三区免费毛片爱| 久re在线| 国产精品色色色色| 97碰在线视频| 人人操插| 久草热在线视频| 精品无码久久久久久久久| 亚州综合色| 午夜不卡成人一区二区| 免费视频无码| 五月丁香成人| 伊人在线视频| 男人的天堂99| 欧洲综合色| 婷婷亚洲综合| 人妻在线观看视频| 久久婷婷五月综合激情国产| 99re思思久久| 色久女| 五月婷婷真爱激情网| 国产人妻777人伦精品HD| 日韩av在线电影| 精品成人a v无码内射| 人妻熟女一区二区AV| 69精品人人人人| 超碰国产AV| 婷婷五月天亚洲综合网| 伊人9999| 综合福利网| 99精品视频在线6| 99热超碰| 久久丁香五月天| 婷婷色在线视频| 婷婷六月天| 丁香五月六月激情久久| 久热精彩视频98| 六月婷婷狠狠做| 色欲一区二区三区精品A片| 色综天天综合| 欧美精品18| 婷婷五月丁香五月| 亚洲五月天激情| 丁香五月影院| 九九激情网| 日本老女人黄页在线播放| 91在线日| 日韩欧美一区二区三区四区| 久热九九| 久久婷婷五月综合色播| 激情五月天。| 婷婷五月天成人小说| 国洲夜色亚热在线久久| 中文AV网站| 亚洲另类av| 久久天堂网| 91热爆在线| 激情综合一| 伊人丁香六月婷婷| 九九亚洲天堂| 激情五月天小说| 激情综合在线播放| 99操逼| 色激情综合狠狠婷婷| 欧美槡BBBB槡BBB少妇| 五月天综合区| 色爱爱综合网| 丁香六月啪啪啪| 亚洲超碰在线| www久久久久久久久久久| 狠狠干思思热| 国产老熟妇亲子乱对白| 五月综合激情网| 爱的综合网| 婷婷香蕉视频| 亚洲热视频| 激情丰满熟妇五月| 久久久精品99| 久久久久久欧美精品se一二三四| 97丁香五月| 激情五月丁香社区| 久久人妻熟女一区二区| 可以直接看的av| 丁香色综合| 情欲禁地| 激情五月婷黄版| 99免费视频久久| 九九精品9| 激情综合国产| 婷婷激情五月综合在线视频| 99福利导航| 风流少妇A片一区二区蜜桃| 涩涩涩五月天| 色婷婷在线视频久| 婷婷五月天黄色网址| 性一交一乱一交A片久| 激情www| 99re最新地址视频| 自拍视频在线观看9| 99热这里只有精品2| 久久欧洲综合网| 五月天婷婷久久| 久久月天堂| 色色色99| XX久久| 色噜综| 亚洲国产成人综合| 色婷婷最新域名 | www.yw色| 91精品久久久久久综合五月天| 69热在线| 五月丁香欧美综合| 五月婷九九草| 国精产品一区一区三区免费视频| 97碰久久| 色 色 色综合com| 婷婷黄色五月天在线视频| 999激情视频| 不卡成人免费| 国产精品色情AAAAA片软件| 国产9色在线/日韩| 激情五月影院| 思思久久99热只有频精品66| 五月婷婷六月爱| 日本久久网| 久久超级碰碰| av在线免费网站 | 中文字幕丰满人妻无码专区| 禁片二区| 精品9久| 国产精品久久久久久久久久| 狠狠做深爱婷婷久久综合一区| 色婷婷色99国产综合精品| 色99欧洲色19| 色情五月天A片| 婷婷五月俺要去| 亚洲小视频免费看| 久久丁香婷婷五月天| 9精品视频在线观看| 殴美97色| 久婷自拍视频| 人碰91| 狠狠色噜噜狠狠亚洲A∨| 婷色天堂| 99A片| 任你搞免费视频观看| 欧美黄色一级录像| 国产一级黄色影片,| 在线看九一V图片| 中文字幕免费高清电视剧| 嫩草AV久久伊人妇女超级A| 操一操干一干| 激情五月激情综合网| 激情丁香婷婷| 久久人妻熟女一区二区| 五月婷婷爽爽爽| 五月婷婷丁香91| 色婷婷六月| 久9综合| 亚洲天堂玖玖| 久久婷婷五月综合啪| 天天肏天天肏天天肏| 婷婷五月色影视先锋| 99九九综合久久九九| 99re久久| www.25五月婷婷| 天天色五月| 色五月婷婷DVD| 五月丁香亚洲婷婷| 日本在线视频播放91| 久久综合丁香| 久9热| 日本操B视频| 婷婷丁香综合色AV| 色99日韩| 婷婷五月天亚洲天堂| 欧洲第一久色| 99在线视频精品| 色情五月综合婷婷| 婷婷五月天A V| 丁香五月www| 丁香六月婷婷综合激情欧美| 色欲五月天| 99这里只有精品|v| 99精品在线播放| 无码激情AAAAA片-区区| 伊人久热91网| 五月天狠狠网站| 亚洲五月综合色播| 五月天丁香久久| 久久xx| 色五月美女| 97超碰人人操| 26uuu亚洲欧美| 99热这里都是精品| 五月日韩中文字幕| 久婷久婷| 久久婷婷婷婷伊人| 色情综合| 91窝窝| 久久66er久久| 97色色视频| 成人视频网| 激情婷婷五月少妇| 色婷婷五月婷婷五月婷婷五月| 激情图片婷婷丁香五月| 亚洲视频一区| VA色婷婷| 99久在线精品99re8| 99精品久久| 日本色色网站| 色性日本| 中文激情网| 91久久九久久九久久九久久九久久| 青青草a在线| 九九综合| 色婷婷四虎| 思思99精品视频在线观看| 97se视频在线| 五月丁香六月停停停| 五月婷婷激情综合在线| 五月天婷婷成人网| 182无码| 99这里只有免费的小视频在线观看| 亚洲中文乱字字幕在线永久| 亚洲六月色| 99r这里只有精品哦| www.射伊蕉婷婷| 九月性爱网| 五月天小说激情| 人人播| 97视频91| 在线观看亚洲视频影院| 色播五月丁香综合| 丁香五月天BBw| 天天干,夜夜爽| 九九99在线免费在线观看视频| 五月天天天天天天天天天天天天天天天婷婷婷 | 超爽内射| 99热中文字幕久久| 久久91久久精品久久| 婷婷六月丁香久| 久久性爱视频网站| 亚洲永久免费| 日日噜噜夜夜狠狠久久丁香六月| 五月天狠狠色| 成人免费在线电影| 99久久www| 亚洲va成人va成人va在线观看| 综合99在线| 亚艹艹| 91欧美日韩| 丁香五月婷婷色| 九热网站| 色欲久久久久| 亚洲图色五月天| 黄色激情五月天| 超碰在线观看caop| 六月丁香激情| 在线观看免费狠狠色丁香香综合| 69色婷婷| 欧美色色色色色色色| 日韩性视频| 99热最新| 五月丁香婷婷色| 99成人网站| 国产成人精品一区二三区熟女在线 | 秋霞av吧| 五月天俺去也| 婷婷丁香综合| 97操视频| 狠狠艹狠狠艹| 精品国产AV色一区二区深夜久久| 操逼在线视频| www99精品亚| 99这里只有精| 超碰人人艹| 五月天综合网| 开心五月色婷婷综合开心网| 日韩美女在线视频19| 免费黄色AV| 伊人春天av| 99精品视频在线观看| 亚洲VA在线| 丁香婷婷婷五月综合色情| 美女网黄| 婷婷色五月天第7色| 天天激情站| 天天爽天天干| 久久66er久久| 色在线免费观看| 狼人狠狠操| 2025中文在线视频字幕免费观看| 亚洲无码性爱| 97超碰人人操| 丁香五月天欧美| 青青草Avb在线| 色色色色色色色色网站| 呦呦视频无码播放| 99伊人性爱在线影院| 丁香五月欧美| 婷婷五月花西瓜| 成人视屏在线观看| 春色激情| 久久婷婷五月天懂色| 色五月婷婷视频| 996精品热视频| 久久激情网| 思思国产99| 色噜噜狠狠色综| 香港九九六区八区99| 色热久| 日日肏天天操| 97碰久久| 国产精品24r| 色综合色色| 99久久九九| 久久97| 五月天婷婷激情四射综合| 99热这里只有精品1| 99成人免费热视频| 美女亚洲五月丁香| 加勒比日本一区二区三区| 欧美日韩欧美| 婷婷成人综合| 夜夜骑夜夜撸| 婷婷五月天视频在线观看| 久久婷婷色| 91操在线| 综合av在线| 操91| 婷婷五月色综合| 99热这里只有精品一区| 狠狠干天天内射| 99综合一区| 97偷拍在线视频| 亚洲熟妇AV乱码在线观看| 婷婷四色五月| 九九在线精品| 五月婷AV| 丁香五月天婷婷久久| 91人妻PORNY九色大屁股| 九色PORNY在线精品酒店| 九九成人电影婷婷| 北京熟妇搡BBBB搡BBBB| 啪啪综合网| 激情99| 激情五月天影院| 色色免费网战视频| 九九亚洲小视频| 色六月天天激情综合网| 五月丁香婷婷色| 丁香五月在线自慰| 久99热在线观看| 五月开心啪啪| 色五月婷婷天堂| 一级视频网址| 婷婷伊人欧美| 久久六月婷婷| 婷婷丁香激情五月天色色色| 成人做爰高潮A片免费视频| 99ri视频| 开心五月深爱五月| 综合网亚洲| 日本久热| 深爱激情六月天| 99色在线视频| 人妻啪啪啪| 六月婷婷中文字幕| 婷婷成人五月天成人文学| 色五月婷婷亚洲| 色五月AV| 色色色综合网| 亚洲亚洲人成综合网络| 亚洲亚洲人成综合网络| 国产成人综合亚洲| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 色婷婷六月| 98色花堂98t.R| 色婷精品91| 99热自拍| 婷婷六月色| 免费视频WWW在线观看网站| 日本黄色三级片内射| 真实的国产乱XXXX在线91| 99色人| 九九热99在线视频| 五月丁香综合影院| 九月丁香婷婷综合| 26uuu视频欧美| 人人添人人| 97韩国久久电影院| 色婷婷亚洲六月婷婷中文字幕| 这里只有精品视频| 丁香五月婷婷超碰在线| 婷婷成人视频| 久久精品国产精品| 另类图片五月天婷婷| 操操自拍| 婷婷五月天天天日日夜夜| 婷婷成人丁香色情基地30 | 五月久久噜噜| 99热成人在线观看| 婷婷激情人妻| 精品久热| 人妻在线观看视频| 色综合九九色综合88| 五月激情婷婷图片基地| 婷婷五月丁香五月天| 六月丁香综合| 五月天婷婷丁香| 青青草婷婷五月天| 久9热视频| 久久99热免费| 五月色婷婷综合| 婷婷久月| 激情5月婷婷| 色婷婷色情| 丁六月激情| 天天激情欧美美女| 色区久久| 九九人人看| 丁香五月图片| 激情五月综合第一页| 婷婷六月色丁香视频在线观看| 天天干天天爽天天操| 操久久网| 亚韩精品视频1区| 亚洲无码播放| 亚洲色激情| 狠狠色狠狠操| 黄色成人AV在线| 婷婷色婷婷亚洲成人| 丁香六月无码| 深爱激情五月网| 成人VAV视频在线观看| 婷婷免费精品视频| 亚洲激情五月| 亚洲情综合五月天| 久99久视频| 婷婷五月天免费视频在线观看| 日日爽日日| 丁香六月亚洲| 激情小说五月天中文字幕| 成人电影AV在线观看| 久久久天堂国产精品女人| 婷婷性爱网| 老司机伊人| 日日日日日| 97人人做| 欧洲激情精品婷婷| 欧美顶级少妇做爰HD| 免费观看亚洲AV片| 欧美成人色婷婷| 五月婷婷爽爽爽| 只有精品视频在线观看| 在线中文亚洲| 九九99九九精品视频| 综合逼五月激情婷婷| 玖玖爱资源站| 日本视频欧美观看免费| 狠狠操狠狠干综合| 久久精品国产精品| 六月丁香五月激情亚洲AV| 五月天婷婷綜合院| 久久久A级视频| 99综合免费视频| 99热这里有精品| 国产亚洲精品人人| 激情五月天视频| 日本成人综合| 婷婷五月天激情网| 久久色吧| www,99热| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 欧美韩国日本| 欧美va亚洲va| 26uuu成人网| 九九99在线免费在线观看视频| 玖玖在线| 91婷婷色 | 激情综合网五月激情| 超碰人人摸AV| 人妻VideOssS人妻| 艹B高清无码| 99热骚货| 亚洲综合五月天婷婷| 久久这里只有精品无码| 免费视频WWW在线观看网站| aaaaaa片| 国外亚洲成AV人片在线观看| WWW色五月天| 嫩草AV久久伊人妇女超级A | 婷婷丁香五月综合激情小说| 五月婷婷玖玖综合玖玖爱| 婷婷五月骚厕所| 99热在线极品极品| 青草青青草| 一区三区视频有限公司| 婷婷九月亚洲| 五月婷婷与六月丁香图片激情| 综合色五月天| 超碰国产在线| 天天干天天爽| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 任你爽精品免费视频6| 99久在线精品| 91久久婷婷| 日韩九区| 五月婷婷影视| 久久ri精品视频| 欧美婷婷综合| 婷婷97碰碰| 天天弄天天操| 亚洲激情五月丁香久久久久| 免费日本aⅴ中文字幕 | 俺也去五月婷婷丁| Www,五月天| 成人午夜免费电影| 色色色色综合| 天天操夜夜玩!| 麻豆123区| 亚洲综合久| 久久这里只有精品07 | 免费观看的AV| 色色影院黄大片| 狠狠色婷婷7777久| 一本久久亚洲五月婷婷| 日韩啪啪自拍| 99热国产精品| 亚洲AAA| 久久码久久无清| 综合婷婷| 不卡影院午夜理论片| 五月久久网| 婷婷激情五月| 国产亚洲精久久久久| 婷婷九月激情| 操碰色一区就去操| 91ncm视频| 激情5月婷婷狠狠干| 九月丁香欧美综合| 色欲色香综合网| 五月草影视| 99操视频| 亚洲综合碰| 综合网激情| 色狠久| 99热啪啪| 狠狠色婷婷丁香五月| 九九热在线99| 99思思| 激情另类综合| 97操碰在线视频| 国产肥白大熟妇BBBB视频| 丁香五月婷婷视频| 五月婷婷丁香五月亚洲色| 九九综合图片网| 99在线精品视频| www.99精品在线| 久久网思思| 婷婷香香五月| 日本视频欧美观看免费| 亚洲亚洲人成综合网络| 久久伦乱| 99久久大片| 五月天婷婷自拍图片在线观看| 亚洲Av成人在线观看| 午夜天堂一区人妻| 久热AA| 亭亭五月天成人| 99这里精品| 免费亚洲婷婷中文字幕| av人人操| 91人人人人人| 欧美精品18| 成人AV中文字幕| 五月天激情啪啪| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 亚洲综合狠狠艹| 美女va| 亚洲综合色婷婷| 青青色com久久| 色噜噜丁香| 99自拍视频| WWW.99热| 久久九九@| 色色色色热| 五月婷色激情五月| 啪啪激情网站| 日本色婷婷五月天成人电影| 二色av| 色一情一乱一乱一区91| AV免费在线网站| 色亭亭丁香五月天| 少妇高潮呻吟A片免费看软件| 99综合视频| 久机视频这只有精品| 亚欧州精品视频| 婷婷五月天视频免费在线观看| 五月婷婷色激情| 欧美综合五月丁香六月婷| 久久五月激情网| 五月婷婷狠天天色综合| 丁香五月花婷婷开心| 热九九精品| 国产xxxxx在线观看| 无码色色色色色| 99热这里| 中文字幕亚洲-区久久99婷婷| 久操香蕉| 婷婷五月丁香第四色超碰在线| 精品一区二区三区免费毛片爱| 狠狠狠狠狠干| 伊人色综合网| 欧美槡BBBB槡BBB少妇| 色狠狠色噜噜AV天堂五区| 国产精产国品一二三在观看| 国产亚洲成AV人片在线观黄桃| 欧美性生交XXXXX无码小说| 国产欧美精品AAAAAA片| 中文中文在线| 色吧婷婷五月亚洲| 视频一区二区在线| 色综啪啪啪啪啪啪| 99热九九在线| 99精品视频偷拍| 色五月色五天色情网| 一起草av| 婷婷色五月亚洲| WWW.夜夜| 色噜噜狠狠一区二区三区| 丁香五月手机在线| 另类激情五月| 丁香五月婷婷基地| 国产精品天天狠天天看| 人人操婷婷| 婷婷丁香五月91| 六月丁香久久| 婷色成人| 丁香五月天天高清在线| 婷婷五月天国产在线播放| 91热爆在线| 风流少妇A片一区二区蜜桃| AV大片在线播放| 九九激情视频| 亚洲精品无码久久| 六月丁香婷婷亚洲中文玖玖| 五月婷导航| 97人人看| 噼里啪啦在线观看免费完整版视频| 丁香激情综合| 色播五月天婷婷老师| 五月丁香日本一抹本| 亚洲99在线| 9l视频自拍9l九色9l成人| 五月天婷婷激情| 91碰碰视频在线观看| 六月成人网| 亚洲五月天婷婷在线| 婷婷色五月在线视频| 色五月琪琪| 日韩AV免费电影在线播放| 色色色色区| 日韩色色小视频| 国产色五月| 新97人人上人人| 精品一二三区久久AAA片| 五月天激情图片网| 深爱五月激情综合| 综合久久五月天| 天天干天天做| 狠狠色噜噜狠狠亚洲A∨| 国产成人网| 六月丁香影院| 丁香五月天综合| 99玖玖精品| 成人精品一区二区三区四区五区 | 开心日韩丁香婷婷五月| 丁香五月婷婷综合精品素人| 无码激情AAAAA片-区区| 欧美久久网| 久久成人综合五月天| 九色视频91疯狂| 丁香五月玖玖| 99re思思热在线视频| 色色色色网| 欧美日韩精品人妻狠狠躁免费视频| 狠狠色婷婷7777久综合| ji'qing'luan'ren'lun| 五月丁香久| 国产av网| 色97综合婷婷天天色| 超碰在线观看9| 97午夜一区二区| 五月婷婷新网站| 色婷婷激情四射视频| 狠狠色综合图片| 这里只有在线精品| 婷婷伊人久久| 丁香熟女乱| 丁香五月婷婷激情123| 深爱激情综合网| 99色精品| 日本五月天一页| 香蕉久久国产AV一区二区| 久久激情网| 久久色五月| 婷婷伊人綜合| 激情婷婷综合五月少妇| 八戒青柠影视剧在线观看| 91精品久久久久| 人人综合久| 色色五月天com| 337午夜福利| 欧美情色一区| 美女婷婷六月色| 国产精品色色| 色五月丁香五月| 九九99九九99九九99视频网| 黄色99热| 韩国天天婷婷| 欧美日本不卡黄色片| WWW.桔色成人.COM| 欧美丰满熟妇BBB久久久| 亭亭玉立国色天香| 依人大香蕉| 婷婷五月电影院| 五月丁香欧美综合| 99热99精品| 九九视屏| 日本久久精品18| 婷婷婷婷婷婷婷婷| 99热很操老逼| 性色五月天| 五月天婷婷激情在线色图| 天天透天天爱| 射久久丁香五月| 久久婷婷五月综合色丁香| 久七香蕉| 九月婷婷激情| AV成人在线播放| 99热新网址| 99久久亚洲精品视频| 五月激情影视| 天天搞夜夜六| 91男同视频| 亚洲小视频| 99热99|