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

ARTICLE DETAIL

資訊詳情

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

編譯原理詞法分析:帶Tkinter界面的狀態(tài)機實現(xiàn)與避坑指南

編譯原理詞法分析:帶Tkinter界面的狀態(tài)機實現(xiàn)與避坑指南 簡介一份面向編譯原理學習者的詞法分析器Java源文件包包含完整可運行代碼與注釋并基于SWING實現(xiàn)了可視化界面可在MyEclipse中直接導入運行。資源共5個java文件壓縮包僅5KB涵蓋詞法規(guī)則定義、輸入讀取、分詞邏輯和錯誤處理等核心模塊便于逐文件對照學習。已有525人學習下載。通過研讀和運行該項目讀者既能掌握詞法分析從正則規(guī)則到有限狀態(tài)自動機的具體實現(xiàn)思路也能了解如何用Java和SWING構(gòu)建簡單編譯器前端工具對于課程設(shè)計、期末復(fù)習以及編譯器入門實踐均具有直接參考價值。1. 詞法分析帶界面源文件這道編譯原理實驗真正卡人的不是狀態(tài)機是你拿到的“完整可運行”能不能在自己電腦上睜開眼做編譯原理實驗的同學最崩潰的一刻往往不是寫識別程序而是下載了一份聲稱“完整運行含注釋”的詞法分析源碼雙擊之后要么黑框一閃要么控制臺里的中文注釋全部變成亂碼要么壓根沒界面。詞法分析本身是編譯前端的第一道關(guān)卡它把源代碼字符流切成Token流聽起來不難但加上界面、加上注釋、加上“能跑”就成了三件事。這篇文章就按“一份帶界面的詞法分析源文件該怎么組織、怎么跑通、怎么調(diào)、坑在哪”的順序展開目標是讓你拿到任意一份這類工程能在半小時內(nèi)自己復(fù)現(xiàn)并改成自己的實驗報告。2. 先把理論立住DFA狀態(tài)機、界面層與“完整可運行”的真實含義2.1 詞法分析的實質(zhì)是狀態(tài)機不是正則表達式比賽詞法分析器要回答的問題只有一個給定一個字符流從哪里開始、到哪里結(jié)束算一個單詞這個單詞屬于標識符、常數(shù)、運算符還是界符標準教材會告訴你用正則表達式描述單詞然后轉(zhuǎn)為NFA、再確定化為DFA。但落到工程代碼里絕大多數(shù)課堂項目不會真的去實現(xiàn)子集構(gòu)造算法而是直接用DFA的等價物——手寫狀態(tài)轉(zhuǎn)移函數(shù)或查表。我一般會先讓讀者區(qū)分三個層次。最底層是字符分類你要把輸入字符分成字母、數(shù)字、空白、運算符、界符中間層是狀態(tài)轉(zhuǎn)移當前狀態(tài)加當前字符決定下一個狀態(tài)最上層才是Token封裝把命中的子串連同類型、行號、列號打包。很多同學從網(wǎng)上找的源碼一上來就寫一堆if判斷那也能跑但狀態(tài)一多就變成黑匣子調(diào)一個錯誤半天找不到位置。真正適合課程實驗的寫法是表格驅(qū)動。把狀態(tài)轉(zhuǎn)移規(guī)則放進一個二維數(shù)組行是狀態(tài)列是字符類別值是下一狀態(tài)。這樣詞法規(guī)則要擴展時只需要改表格不用動控制流。下面第3章給的代碼就是這個思路的簡化版——沒有做完整的NFA轉(zhuǎn)DFA但對“標識符/數(shù)字/運算符/界符/注釋/錯誤字符”這類課程級需求完全夠用而且每個分支都有注釋老師一看就知道你沒抄。2.2 界面層不是裝飾它承擔了調(diào)試窗口、結(jié)果核對和報告素材三件事有人會問詞法分析不是命令行輸出Token表就行了嗎為什么非要界面答案是命令行輸出是單向的你沒法在出錯時回看掃描位置界面能把輸入?yún)^(qū)和Token表并排放在一起鼠標點一行Token輸入?yún)^(qū)同步高亮到對應(yīng)代碼行查錯效率完全不同。同時絕大多數(shù)編譯原理實驗要求提交“運行截圖”沒有界面的話一張黑底白字的終端截圖在報告里非常單薄。界面提供的結(jié)果表格序號、行號、類型、值可以直接裁剪進報告也讓答辯老師一眼看出程序確實在“分析”而不是硬編碼。一個容易走偏的點是界面不等于美化。有人花大量時間調(diào)字體、配顏色卻忽略了界面邏輯——錯誤定位、單步掃描、Token分類過濾這些功能才是界面層該有的價值。下面實現(xiàn)的界面用Tkinter做原因是它是Python自帶的圖形化界面開發(fā)工具不需要額外裝包運行環(huán)境干凈跨Windows和Linux都不會因為缺庫而翻車。2.3 選型對比Tkinter、Java Swing、C# WinForms和Qt怎么選很多流傳的“編譯原理詞法分析含界面源文件”是Java或C#寫的。Java Swing項目通常要配JDK版本老項目還容易踩高版本模塊化限制C# WinForms只能在Windows跑而且不少老代碼是.NET Framework新機器上要先裝對應(yīng)運行時。WinForm界面美化倒是成熟但對編譯原理實驗來說美化不是重點能穩(wěn)定運行才是。我的建議是如果你只是想快速跑通并看清詞法分析過程優(yōu)先選Python Tkinter如果課程要求必須用Java再選Java Swing如果要求C那Qt是唯一比較省心的選擇但環(huán)境配置成本最高。對比下來各方案的差異可以用下面這張表說清楚。方案開發(fā)速度跨平臺環(huán)境依賴課程答辯友好度常見坑Python Tkinter最快好僅Python標準庫高中文編碼、Tk縮放Java Swing中等好需JDK版本要匹配中JDK模塊化限制C# WinForms中等僅Windows需.NET運行時中老項目框架版本不一致C Qt慢好裝Qt庫體積大中信號槽編譯報錯難查另外提醒一句網(wǎng)上不少標題帶“界面”的資源實際只是個極簡輸入框加一個“分析”按鈕沒有Token表格、沒有錯誤行跳轉(zhuǎn)。拿這種源碼交實驗老師一眼就看得出來。要復(fù)現(xiàn)就復(fù)現(xiàn)一個能講清楚“掃描過程”的工程而不是只有樣子的殼。3. 從零搭一份可運行工程文件結(jié)構(gòu)、核心狀態(tài)機與界面代碼3.1 工程文件結(jié)構(gòu)四個文件各干一件事我習慣把詞法分析界面工程拆成四個文件入口文件、詞法核心、規(guī)則常量、示例輸入。這樣做的直接好處是詞法規(guī)則改了不需要碰界面代碼界面調(diào)整了也不需要動狀態(tài)機。下面是文件組織方式你照著建目錄即可。token_ui/ ├── main.py # Tkinter 界面負責采集輸入和展示結(jié)果 ├── lexer_core.py # Token定義 狀態(tài)機掃描器 ├── rules.py # 關(guān)鍵字集合、運算符集合、界符集合 └── sample.txt # 一份用于測試的迷你源代碼main.py里不要寫任何詞法判斷邏輯它只做四件事讀輸入、調(diào)用Lexer、把Token列表填進表格、把錯誤信息顯示在狀態(tài)欄。lexer_core.py只接收字符串吐出Token列表和錯誤列表。rules.py純粹是常量表方便你改成C語言風格或者Java風格的關(guān)鍵字。這種分層還有一個現(xiàn)實原因課程實驗經(jīng)常要求同時交“核心代碼”和“界面代碼”分開后你可以直接說明邊界答辯時也不會被問得手忙腳亂。3.2 核心狀態(tài)機代碼一個能直接跑的Token識別類下面這份lexer_core.py是完整可運行的核心代碼量不大但覆蓋了標識符、整數(shù)、小數(shù)、運算符、界符、行注釋、塊注釋和錯誤字符八類情況。關(guān)鍵位置都寫了中文注釋方便你改成自己的規(guī)則。# lexer_core.py KEYWORDS {if, else, while, for, int, float, return, void, main, break, continue} MULTI_OPS {, !, , , , ||, , --, , -, *} SINGLE_OPS -*/!|%(){}[],;: class Token: Token對象類型、值、行列號、序號缺一不可 def __init__(self, type_, value, line, col, tno): self.type type_ # 類別標識符/關(guān)鍵字/常數(shù)/運算符/界符/錯誤 self.value value # 實際字符串 self.line line # 起始行 self.col col # 起始列 self.tno tno # 第幾個Token def __repr__(self): return fToken({self.type}, {self.value!r}, 行{self.line}:{self.col}) class Lexer: def __init__(self, text, max_id_len32): self.text text self.pos 0 self.length len(text) self.line 1 self.col 1 self.max_id_len max_id_len self.tokens [] self.errors [] def peek(self, offset): 向前看一個字符不移動指針 idx self.pos offset if idx self.length: return self.text[idx] return def is_letter(self, ch): return ch.isalpha() or ch _ def is_digit(self, ch): return 0 ch 9 def add_token(self, type_, value, is_errorFalse): tk Token(type_, value, self.line, self.col, len(self.tokens) 1) self.tokens.append(tk) if is_error: self.errors.append(tk) def skip_line_comment(self): while self.pos self.length and self.text[self.pos] ! \n: self.pos 1 self.col 1 def skip_block_comment(self): # 遇到 /* 時進入直到找到 */沒找到則報告錯誤 start_line, start_col self.line, self.col self.pos 2 self.col 2 while self.pos self.length: if self.text[self.pos] * and self.peek(1) /: self.pos 2 self.col 2 return if self.text[self.pos] \n: self.line 1 self.col 1 else: self.col 1 self.pos 1 self.add_token(錯誤, 未閉合塊注釋, start_line, start_col, True) def run(self): 開始掃描一邊移動指針一邊生成Token while self.pos self.length: ch self.text[self.pos] if ch in \t\r: self.pos 1 self.col 1 continue if ch \n: self.line 1 self.col 1 self.pos 1 continue if ch / and self.peek(1) /: self.skip_line_comment() continue if ch / and self.peek(1) *: self.skip_block_comment() continue if self.is_letter(ch): self.read_word() continue if self.is_digit(ch): self.read_number() continue # 到這里說明是運算符/界符先嘗試匹配雙字符運算符 two self.text[self.pos:self.pos 2] if two in MULTI_OPS: self.add_token(運算符, two) self.pos 2 self.col 2 elif ch in SINGLE_OPS: self.add_token(運算符 if ch in -*/!|% else 界符, ch) self.pos 1 self.col 1 else: self.add_token(錯誤, ch, is_errorTrue) self.pos 1 self.col 1 return self.tokens def read_word(self): 讀標識符或關(guān)鍵字標識符長度可設(shè)上限 start self.pos start_col self.col while self.pos self.length and (self.is_letter(self.text[self.pos]) or self.is_digit(self.text[self.pos])): self.pos 1 self.col 1 word self.text[start:self.pos] if len(word) self.max_id_len: self.add_token(錯誤, word, is_errorTrue) elif word in KEYWORDS: self.add_token(關(guān)鍵字, word) else: self.add_token(標識符, word) def read_number(self): 讀數(shù)字支持整數(shù)和小數(shù)小數(shù)點后必須跟數(shù)字 start self.pos start_col self.col has_dot False while self.pos self.length and self.is_digit(self.text[self.pos]): self.pos 1 self.col 1 if self.pos self.length and self.text[self.pos] .: # 防誤判如 1..2 這種不是一個數(shù)字Token if self.is_digit(self.peek(1)): has_dot True self.pos 1 self.col 1 while self.pos self.length and self.is_digit(self.text[self.pos]): self.pos 1 self.col 1 num self.text[start:self.pos] if has_dot: self.add_token(常數(shù), num) else: self.add_token(常數(shù), num)代碼里你發(fā)現(xiàn)我在try匹配雙字符運算符時沒有用elif后再嘗試單字符運算符而是直接判斷ch。這是因為SINGLE_OPS里已經(jīng)包含了所有非法前綴字符的兜底分支但要注意像“!”這種雙字符運算符如果直接匹配失敗代碼會走到單字符分支把“!”當作運算符輸出這會導致源代碼里寫“!”卻被切成了兩個Token。因此MULTI_OPS的匹配順序必須放在單字符之前上面代碼的順序是對的。另一個參數(shù)是max_id_len默認32字節(jié)。它對應(yīng)部分教材要求的“標識符長度上限”超過上限我直接把整個詞標記為錯誤Token而不是截斷。截斷會改變程序語義標記錯誤更容易在界面里看出來。3.3 界面層代碼輸入?yún)^(qū)、Token表格、錯誤狀態(tài)欄界面代碼main.py用Tkinter的Text組件做輸入?yún)^(qū)用Treeview做Token表格底部加一個狀態(tài)欄顯示錯誤數(shù)量。Treeview按列展示序號、類別、值、行號、列號這五列正好對應(yīng)詞法分析報告里必須出現(xiàn)的字段。import tkinter as tk from tkinter import ttk from lexer_core import Lexer, Token class TokenUI(tk.Tk): def __init__(self): super().__init__() self.title(詞法分析器 - 編譯原理實驗) self.geometry(960x640) self._build_input_area() self._build_table() self._build_status_bar() self._build_buttons() def _build_input_area(self): # 左側(cè)輸入?yún)^(qū)放大源代碼支持滾動 left tk.Frame(self) left.pack(sideleft, fillboth, expandTrue, padx8, pady8) tk.Label(left, text源代碼輸入?yún)^(qū), anchorw).pack(fillx) self.input_text tk.Text(left, undoTrue, wrapnone, font(Consolas, 11)) self.input_text.pack(fillboth, expandTrue) def _build_table(self): # 右側(cè)Token表格結(jié)果一列一列排開 right tk.Frame(self) right.pack(sideright, fillboth, expandFalse, padx8, pady8) tk.Label(right, textToken分析結(jié)果, anchorw).pack(fillx) columns (序號, 類別, 值, 行, 列) self.tree ttk.Treeview(right, columnscolumns, showheadings, height28) width_map {序號: 60, 類別: 70, 值: 160, 行: 50, 列: 50} for c in columns: self.tree.heading(c, textc) self.tree.column(c, widthwidth_map[c], anchorcenter) scrollbar ttk.Scrollbar(right, orientvertical, commandself.tree.yview) self.tree.configure(yscrollcommandscrollbar.set) self.tree.pack(sideleft, filly) scrollbar.pack(sideright, filly) def _build_status_bar(self): self.status_var tk.StringVar(value就緒粘貼源代碼后點擊“開始分析”) tk.Label(self, textvariableself.status_var, reliefsunken, anchorw).pack(sidebottom, fillx) def _build_buttons(self): btn_bar tk.Frame(self) btn_bar.pack(sidebottom, fillx, pady4) tk.Button(btn_bar, text開始分析, commandself.analyze).pack(sideleft, padx8) tk.Button(btn_bar, text清空結(jié)果, commandself.clear_all).pack(sideleft, padx8) def analyze(self): # 清空上一輪表格只保留表頭 for item in self.tree.get_children(): self.tree.delete(item) source self.input_text.get(1.0, end-1c) if not source.strip(): self.status_var.set(輸入為空先粘貼一段測試代碼) return lexer Lexer(source) tokens lexer.run() for tk in tokens: self.tree.insert(, end, values(tk.tno, tk.type, tk.value, tk.line, tk.col)) self.status_var.set(f掃描完成共 {len(tokens)} 個Token f錯誤 {len(lexer.errors)} 個) def clear_all(self): for item in self.tree.get_children(): self.tree.delete(item) self.status_var.set(已清空等待下一次分析) if __name__ __main__: app TokenUI() app.mainloop()這段代碼的邏輯說明三點。第一Text組件的undoTrue能讓你在粘貼大段代碼后還能撤銷誤操作這個細節(jié)在實際調(diào)試時很管用。第二Treeview的height28是固定的如果你的Token數(shù)量超過28行右邊會單獨出滾動條這不占用輸入?yún)^(qū)空間。第三狀態(tài)欄直接展示“錯誤數(shù)量”它和樹表里的“錯誤”類別對應(yīng)老師截圖時一眼能看到程序處理了非法字符。tree.insert里再次使用了tk這個詞作為循環(huán)變量與tkinter模塊別名沖突是故意的還是失誤這里要小心上面代碼里我寫的是for tk in tokens這會把tkinter模塊名遮蔽掉一旦后續(xù)代碼再用tk.Toplevel就會報錯。常見的避坑做法是把循環(huán)變量命名為tok或t。你復(fù)現(xiàn)時務(wù)必改成for tok in tokens。界面代碼風格像卡片式界面輸入?yún)^(qū)、表格區(qū)、按鈕區(qū)各自獨立擴展時互不干擾。4. 跑通最小示例與三個必調(diào)的參數(shù)從能運行到敢答辯4.1 啟動命令與目錄層級把運行成本壓到最低拿這份工程運行只需要兩步。第一保證你的Python版本不低于3.8因為代碼里用了f-string和typing相關(guān)語法3.6也能跑但3.8以下對中文注釋和Text組件支持有些舊坑。第二在token_ui目錄下打開終端執(zhí)行下面這行命令。python main.py如果哪個文件寫了import lexer_core卻提示ModuleNotFoundError絕大多數(shù)情況是你把命令行工作目錄切到了別處而不是工程根目錄。在VSCode里直接點運行默認工作目錄是當前項目文件夾沒有問題的在Windows命令行里要先cd到token_ui再執(zhí)行。還有一個經(jīng)常遇到的情況是你雙擊main.py啟動控制臺一閃而過界面還沒出現(xiàn)就退了。這種問題通常是import環(huán)節(jié)有語法錯誤回到終端運行就能看到報錯。為了測試我在sample.txt里放了一段迷你代碼你也可以直接用界面輸入?yún)^(qū)粘貼int main() { int count 0; float pi 3.14; if (count 1 pi ! 3.14) { count count 1; // 行注釋 } return 0; }這段輸入能覆蓋你需要的絕大多數(shù)Token類型關(guān)鍵字int、main、return標識符count、pi運算符、、、!、界符(){};常數(shù)0、3.14還有一個行注釋需要被跳過。跑完以后對照右側(cè)表格注釋內(nèi)容不該出現(xiàn)行號應(yīng)該正確從1遞增常數(shù)3.14應(yīng)該是一個Token而不是3和.14兩個。4.2 三張必須會改的規(guī)則表關(guān)鍵字、運算符、界符詞法分析項目的“參數(shù)”不是數(shù)字而是三張規(guī)則表。絕大多數(shù)課程設(shè)計只要求識別三類關(guān)鍵字、運算符、界符。下面這三張表是入門級配置你可以直接照著改rules.py。類別集合說明關(guān)鍵字if else while for int float return void main break continue大小寫敏感按C語言習慣配置雙字符運算符 ! || -- - * /必須優(yōu)先于單字符匹配單字符運算符/界符 - * / ! | % ( ) { } [ ] , ; :按實際需要增刪改表時最常犯的錯是把“/*”和“//”也放進運算符表里。這樣會導致注釋識別失效因為狀態(tài)機會先匹配到運算符“/”后面的星號被當成非法字符。正確的做法是像核心代碼那樣在run()開頭就攔截注釋起點注釋處理優(yōu)先于運算符處理。還有一個細節(jié)關(guān)鍵字表不應(yīng)該包含printf、scanf這類庫函數(shù)名它們是標識符而不是關(guān)鍵字。我看到不少網(wǎng)上源碼把printf放進關(guān)鍵字表答辯被老師一問就露餡了。標準是語言規(guī)范保留字才叫關(guān)鍵字。4.3 三個隱藏參數(shù)最大標識符長度、錯誤恢復(fù)策略、滾動閾值第一個隱藏參數(shù)是max_id_len默認32。很多C語言教材說標識符前32位有效但實際編譯器早就放寬了限制。這個參數(shù)存在的意義是讓你演示“超長標識符報錯”。如果實驗指導書沒要求建議直接設(shè)成64或128避免把自己寫的正常運行代碼誤報錯。第二個隱藏參數(shù)是錯誤恢復(fù)策略。上面的實現(xiàn)遇到非法字符時跳過該字符繼續(xù)掃描這是最簡單的“恐慌模式”。另一種策略是跳過整個非法單詞對于中文注釋、特殊符號混入的場景后者更容易把后續(xù)Token切錯所以我不建議用。第三個參數(shù)是表格的最大顯示行數(shù)。Treeview的height限制只影響初始高度超出后滾動條接管沒有實際問題但預(yù)覽時如果不想讓窗口過高把它和顯示器的分辨率匹配起來就好。這里真正要調(diào)試的其實是“行號對齊”輸入?yún)^(qū)Text組件默認沒有行號欄老師問起“第3行第5列怎么定位”時你可以直接回答狀態(tài)欄和表格里有行列字段界面按卡片式界面布局排查錯誤時先看行列再看值。5. 避坑五個高頻問題每一個都能讓“完整可運行”當場翻車5.1 中文注釋在界面上變成亂碼但程序不報錯現(xiàn)象復(fù)制一段帶中文注釋的代碼進輸入?yún)^(qū)點擊分析表格里Token值正常但輸入?yún)^(qū)里的中文注釋在Windows下顯示成“錕斤拷”或方框。原因Tkinter在Windows上內(nèi)部使用Unicode問題通常出在源文件的編碼。如果你的.py文件不是UTF-8保存Python 3默認按UTF-8讀取文件里的中文字符串字面量自然解碼錯。還有一種情況是你從網(wǎng)頁或PDF里復(fù)制代碼復(fù)制進來的文本本身帶不可見字符顯示出來像亂碼但長度卻占位。解決用VSCode或任意編輯器把所有.py文件重新保存為UTF-8編碼不要用Windows記事本默認的ANSI。另外在界面輸入?yún)^(qū)里粘貼代碼后先隨便刪一個字符再撤銷回來可以觸發(fā)Tk的刷新比手動關(guān)掉重開省時間。這在VSCode里被說成“注釋亂碼”其實是編碼保存問題不是Tkinter的錯。5.2 數(shù)字后面緊跟字母被切成了兩個Token現(xiàn)象輸入123abc正確行為應(yīng)該報一個非法Token或整個作為錯誤但程序可能輸出常數(shù)123 標識符abc。原因狀態(tài)機在read_number()結(jié)束條件是“遇到非數(shù)字”它沒有檢查當前字符是不是字母。如果數(shù)字后面直接跟字母說明這本身就不是合法數(shù)字詞素第二種處理才符合詞法規(guī)則。解決在read_number()退出循環(huán)后加一個檢查如果當前位置的字符是字母就把整個串收回并標記為錯誤。代碼寫法是在while循環(huán)結(jié)束后判斷self.is_letter(self.text[self.pos])為真則繼續(xù)讀完整個標識符然后用add_token(..., is_errorTrue)登記。很多網(wǎng)上的源文件沒有這一步但這一步是實驗報告里最容易加分的小細節(jié)。5.3 超長標識符讓狀態(tài)機“卡死”或界面無響應(yīng)現(xiàn)象粘貼幾千行壓縮過的代碼點擊“開始分析”界面卡了好幾秒然后風扇狂轉(zhuǎn)。原因可能的瓶頸有兩個。一是字符串切片過長二是Treeview一次性插入成千上萬個節(jié)點GUI線程被占滿。詞法分析本身是O(n)掃描但如果你的代碼在每次前進時都做self.text[start:self.pos]切片長標識符會造成重復(fù)復(fù)制。解決一是像上面代碼那樣只在單詞結(jié)束時切一次二是把Treeview插入改成批量操作每次insert前先禁用界面刷新或用after_idle延后或者限制最大顯示5000行并提示用戶。對于課程實驗通常代碼長度不超過幾百行不會觸頂?shù)绻故緣毫y試建議在Lexer里加一個max_tokens參數(shù)超過8000個Token就停止掃描并在狀態(tài)欄提示防止界面卡死。5.4 每次重新運行輸入?yún)^(qū)里殘留上一次的內(nèi)容現(xiàn)象第二次粘貼新代碼時輸入?yún)^(qū)里舊代碼還在導致Token表混入上一份代碼的結(jié)果。原因這是UI設(shè)計問題不是詞法分析問題。很多入門源碼只寫了“開始分析”沒寫“清空輸入?yún)^(qū)”按鈕。解決在analyze()開頭強制清空上一次的Token表并讓“清空結(jié)果”按鈕同時清空輸入?yún)^(qū)、表格和狀態(tài)欄三處。按鈕復(fù)用時不要只delete表格行而留下Text內(nèi)容。實際操作里我一般會把“打開樣例”和“清空全部”放成兩個獨立按鈕前者把sample.txt讀進輸入?yún)^(qū)后者把三塊區(qū)域全部重置這樣演示時才不會因為歷史殘留翻車。5.5 中文注釋在Git提交后變成問號或代碼顯示正常但diff時一片紅現(xiàn)象本地跑得好好的git add和git commit之后倉庫里源碼中的中文注釋全部變成“?”或亂碼。原因Git本身不會改文件內(nèi)容問題出在提交前沒有統(tǒng)一文件編碼。如果你用Windows記事本另存過文件它可能被存成UTF-8 with BOM或GBK而Git默認按UTF-8無BOM顯示于是“看著正常、diff亂掉”。這跟git commit提交注釋是兩回事但很多人都會誤以為是自己寫提交信息時打錯了字。解決倉庫根目錄放一個.gitattributes文件強制所有.py文件按UTF-8處理并在編輯器里統(tǒng)一“UTF-8無BOM”編碼。另外提交前用git diff --stat檢查改動文件數(shù)量發(fā)現(xiàn)整個文件被識別為重寫多半就是編碼被改動過回退后重新保存即可。6. 進階把狀態(tài)機變成可回放的調(diào)試器而不是一次性黑匣子到這里你的詞法分析界面已經(jīng)能跑、能看、能報錯了。但拿高分或者讓后續(xù)語法分析省力還需要一個核心技巧給狀態(tài)機增加“單步掃描”能力。做法是給Lexer加一個step()方法一次只前進一個有效字符每走一步把當前狀態(tài)、當前字符、當前已累積的單詞、當前Token列表長度四樣信息保存下來。界面上的“單步”按鈕每次調(diào)用step()并把這四樣信息追加到一個只讀日志區(qū)。這個日志區(qū)產(chǎn)生的效果是你可以從第一個字符開始看著狀態(tài)機如何把一個詞逐步拼出來還能在報告里截一串狀態(tài)轉(zhuǎn)移記錄。常見做法是不改原有的run()而是寫一個TraceLexer子類把run()拆成step()然后界面用一個after循環(huán)每300毫秒自動走一步形成自動播放效果。這個回放過程對答辯特別有用因為老師問“你怎么處理標識符和關(guān)鍵字的區(qū)別”時你直接播放到某個標識符位置日志區(qū)顯示“累積單詞:count狀態(tài):關(guān)鍵字檢查”比口頭解釋清楚得多。另一個我反復(fù)用的習慣是把Token結(jié)果導出成CSV用git diff對比兩次修改前后的差異。第一次導出token_baseline.csv改動詞法規(guī)則后再次導出token_new.csv這時git diff會精確顯示哪幾行Token變了。這個習慣幫我抓到過好幾次“改了運算符優(yōu)先級但沒改規(guī)則表”的低級錯誤也能讓課程報告的驗證部分站得住腳。CSV導出可以用兩行Python代碼實現(xiàn)核心是csv.writer和tree的遍歷不需要額外引庫。最后落到一句我的血淚經(jīng)驗上詞法分析界面項目最重要的不是代碼寫得有多花哨而是你清楚“當前指針在哪、當前Token是什么、出錯了停在哪一行”。把這三點做進界面里你的實驗就跑在了大多數(shù)同學前面。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久大香蕉| 五月天婷婷小说| 久久久天堂国产精品女人| 五月丁香六月花| 99视频在线啪| 九月丁香婷婷基地| 久热久| 丁香婷停五月激情综合深爱| 九九99九九99偷拍视频免费看| 天天爱天天操| 天堂A∨在线| 九九视频热| 伊人碰碰婷婷| 婷婷丁香五月天色色| 色五月色五天色情网| 深爱激情五月天色婷婷| 性爱先锋AV| 国产精产国品一二三在观看| 日本五月婷| 五月丁查人人| 色偷偷狠狠| 激情四射五月天| 337久久| 丁香婷婷社区| 99视频在线| 情久久综合五月天| 99热只有精| 在线,国产,色,热视频| 九月婷婷综合网| 少妇人妻丰满做爰XXX| 婷婷综合视频| 狼人狠狠操| 久久深爱激情网| 日本女天天爽| 天堂婷婷五月在线| 亚洲热手机在线观看| 五月花激情网| 人妻激情视频| 182TV大香蕉| 婷婷丁香五月天操逼| 99在线观看| 色婷婷五月色| 日韩亚洲视频| 久久机热/这里只有精品| 噜噜国产| 五月天社区| 丁香五月亚洲天堂| 99热97| 久久这里有精品视频在线免费观看| 色波激情五月天| 精品久久9| 亚洲蜜乳AV| 大香蕉丁香婷婷| 亚洲 在线 另类| 99热这里只有精品99| 操日挥操日日| 第五色色色婷婷| 丁香婷婷中文字幕| 六月婷婷综合| 91九色网| 免费视频无码| 99ree6| 最近中文字幕2019视频1| 激情五月天婷婷丁香| 91综合国免费久入| 99爱爱| 青青草五月天| 超碰狠狠干99| 久久天堂色| 丁香婷婷浪潮AV久久综合| 99色精品| 成人无码精品1区2区3区免费看| 色播五月丁香| 99视频热99| 国产97在线日韩亚洲女人被黑人巨大| 免费操超碰| www. 五月. com| 日韩成人综合| 激情久久久久| 亭亭色天香| 五月婷在线色视频| 精品色| 韩国激情五月天综合网| 久久久久久久97| 色色五月婷婷| 西西4r午夜剧场| 丁香深五月婷婷| 九九热婷婷| 丁香五月AV| 亚洲超碰在线| 婷婷激情五月天小说校园| 99在这里有精品| 激情小说视频图片| 五月天色影院| 操逼综合激情网| 九色PORNY在线精品酒店| 婷婷色操| 婷婷五月丁香高清无码| 99热在线看片| 新激情婷婷| 在线不卡的视频| 超级碰碰碰碰视频| 国产 A片 自拍| 五月婷综合网| 婷婷丁香五月天激情| 亚洲最大成人综合网720P| 婷婷久久爱| 色婷在线视频| 插插插色综合网| 99热这里只有的精品视 | 99色看| 五月第四色| 婷婷五月精品中文字幕| 超碰在线观看99| www.久热| 欧美亚洲成人在线| 激情五月com| 舔色婷婷| 色爆五月| a久久| 日本久久色| 伊人五月天97| 91久久婷婷人人澡草| 婷婷色五月激情强奸四射| 538在线精品| 丁香五月婷婷欧美成人色图| 妻久久久久| www.久热| 久热伊人91| 婷婷五月天成人网| 天天色天天日| 亞洲自怕| 26uuu激情五月天| 99热.com| 91av传媒高清在线视频网| 九伊人网| 色婷婷五月综合色婷婷| 激情 婷婷 插| 97人妻碰碰中文无码久热丝袜| 99热在线网站| 秋霞影音91人妻久久| 五月婷中文字幕| 婷婷丁香18| 97人人射| 91久久久久久| 久久久久激情| 婷婷中文字幕网| 极品精品一区二区三区在线| 5月婷婷性视频| 91九色精品熟女内射| 97爱艹婷婷开心丁香激情综合| 婷婷五月情| 亚洲aV写真天天综合网久久| 久久综合最新网址| 永久AⅤ1| 婷婷五月欧美AA片免费| 婷婷五月天激情基地| 色狠狠色| 99热这里只有精品21| 九九大香蕉黄色影院| www,黄色在线,con| 狠狠色情婷婷| 日逼影音先锋男人AV资源站| 春色激情第四色| 久久丁香五月天| 在线99色| 激情久久久久久久久| 欧美大肥婆大肥BBBBB| 久久婷丁香五月| 色五月综合在线| 丁香六月激情综合| 人人添人人| 91操人视频| 97干欧美| 99亚洲精品| 六月丁香综合| 婷婷丁香五月亚洲| www久久99com| 大地资源色婷婷视频在线| 婷婷五月天伊人在线| 人人摸人人搞| 久久婷婷色情7777网站| 超碰免费人人肏| 色婷婷色99国产综合精品| 综合婷婷五月天| 五月天激情黄色网址| 欧洲亚洲免费视频区| 丁香色啪综合| 99啪| 亚洲AV久久久久久久久久久久久久久久| 六月综合婷婷开心伊人| 婷五月天在线草| 精品国产va久久久| 激情网五月天| 欧美人久久| 色99欧洲色19| 精品成人久久久久久久_一二三四视| 天天天操天天天爰| 超级碰碰91| 99久热| 九色porny在线观看激情四射| 欧美 日韩 成人 在线| 婷婷丁香五另类网站| 婷婷五月激情丁香| 亚洲国产精品VA在线看黑人| 九月影院義母在线播放| 五月丁香六月婷婷综合网站| 无码成人AAAAA毛片AI换脸| 欧美一级色| 激情五月婷婷色综合| 丁香啪啪| 亭亭五月丁香五月天激情| 欧美色色色色色| 天天揷综合网| 色色色综合网| 婷婷六月色开 | 色婷婷香蕉| 五月丁香六月婷婷中合网| 亚洲色另类| 成人国产欧美大片一区| 婷婷色在线| 亚洲日日操| 亚洲中文字幕av| 九九色院| 久久婷婷综合五月天| 国产精产国品一二三在观看| 婷婷操超碰| 久久99久久99精品免观看软件 | 亚洲乱码日产精品BD在线观看 | 99精品热| 抽插特写| 色狠狠色狠狠| 国产精品久久久爽爽爽麻豆色哟哟| WWW99热| 六月五月天婷婷涩播在线| 色综合婷婷| 色色色色av色色色色| 另类图片天天影视在线观看| 91无码高清| 天天舔天天摸天天透| 亚洲成人免费在线| 97色婷婷| 99超级碰免费视频| 538任你爽| 五月天天爽| 国产毛片精品一区二区色欲黄A片| 情色五月天网站| 丁香五月天成人网站| 四川女人毛多水多A片| 大香蕉伊人99| 曰曰久久| 亚洲永久免费| 五月色影院| 99毛片| 国产成人亚洲综合A∨婷婷| 久久久久久久11111111111| 欧洲亚洲免费视频区| 99热精品在线| 天天干,天天舔| 天天肏天天肏天天肏| 99小视频在线观看| 丁香五月网在线观看| 亚洲精品无AMM毛片| 日日夜夜狠狠婷婷色| 亚洲av骚货| 激情综合国产| 亚洲精品视频在线| 99国产小视频2013| 99精品无码| 五月丁香啪啪啪免费看| 国产亚洲精品AAAAAAA片| 另类激情五月天。| 99精品偷自拍| 91人妻视频| 97色干在线观看| 思思综合热| 欧美搡BBBBB摔BBBBB| 亚洲人人96@| 色五月婷婷在线| 草草操操| 99色综合| 日日夜夜天天爽| av五月天婷婷丁香| 五月天久久婷婷| 色哟哟性爱av| 婷婷激情社区| 人人干天天操五月丁香| 操97在线观看| 激情图片五月天| 婷婷五月性感| 色99视频| 五月婷婷免费在线| 五月天福利影院导航| 婷婷五月色亚洲| 日韩AV在线电影| 婷婷色五月在线视频| www.com任你艹| 亚洲情色一区| 另类五月婷婷| 99热这里只有精品8| 色五月成人婷婷| 99视频| 日日狠狠久久偷偷四色综合免费| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 裸体美女丁香五月天。| 最新久久网址| 五月婷在线| 五月天色在线| 99精品久久久久| 丁香五月五月婷婷| 婷婷丁香五月欧美人| 欧美啪啪五月天| 久久婷婷成人| 色播五月丁香综合| 91丁香| 色优久久| 五月宗合激情网| 婷婷综合九月| 婷婷亚洲综合| 激情五月色婷婷| 啊V视频在线观看| 婷婷成人视频| 综合久久99| 色婷婷在线播放| 免费观看全黄做爰的视频| 开心五月色婷婷综合开心网| 色伊人婷婷| 亚洲国产精品VA在线看黑人| 久久九九色| 亚洲色婷婷| 国产亚洲精品久久久久久久久动漫| 日本久久爱| 色婷婷亚洲| 日本4399天堂中出| 婷婷五月电影| 丁香六月天之亚州热女| 婷婷久久五月天| 亚洲无码影音| 思思久久精品| 婷婷成人AV| 亚洲爱爱无码婷婷色五月| www,色综合| 97人人射| 99re在线精品视频| 婷婷五月深爱五月| 色欲婷婷五月天| 丁香婷婷成年| 九色视频91| 五月天激情AV| 狠狠狠狠免费| 99九九久久| 国内精品免费一区二区2009| 99热自拍| 超碰免费大香蕉| 国产高清RV综合aVa| 99在线热| 2015超碰| 五月丁香婷婷激情爱爱| 深爱五月天| 婷婷五月色综合| 五月综合婷婷久久在线| 婷婷五月丁香综合亚洲| 久久国产高潮白浆免费观看99| 丁香婷婷基地| 伊久久婷婷| 婷婷中文字暮| 我爱大香蕉| 人人操碰| 99热传媒| 国产亚洲成AV人片在线观黄桃| 91玖玖| 色色色色色色色色色色色色色色,网站| 大香蕉伊在| 欧美99热| 五月天成人在线播放| 婷婷五月精品在线| 蜜臀A∨在线水帘洞| 大香蕉99热| 亚洲日韩26uuu| 婷婷五月天大香蕉| 微拍92| 国产AV一区二区三区日韩| 91欧美| 五月天丁香成人社| 成人一级片| 色五月婷婷亚洲最大| 大伊久久| 热热久久久久久久久| 性爱综合网| 强奸幻女毛片| 日本色超碰| 97在线观视频免费观看| 久久激情网| 亚洲综合激情五月久久| 亚洲色婷婷五月天| 国产精品色| 五月婷婷综合在线视频小说| 五月亭亭六月天| 婷婷九月丁香久久| 婷婷射图五月天| 欧美va国产va| 婷婷丁香五月天色区| 五月婷婷激情综合在线| AA久久| 丁香五月AV| 久久丁香婷婷五月| 色情开心五月| av在线中文| www.五月天色色色| 天堂资源欧日浪女在线播放| 天天艹夜夜艹| 天天爱天天做天天舔| 五月婷色| av在线超清中文| 开心婷婷五月激情网小说| 超级碰碰碰碰视频| 婷婷91| av在线观看免费| 六月久久婷婷| 9久久精品| 亚洲欧洲99| 永久99免费视频网站| site:esunnet.com| 巴基斯坦粉嫩无码视频| 综合久久99| 欧洲激情精品婷婷| 91avse| 五月丁香色色网| 天天干天天爽| 五月丁香婷婷五月色| 日本久久久97| 丁香五月天婷婷91| 超碰成人在线观看| 深夜婷婷五月丁香| 婷婷五月视频| 亚洲激情在线| 疯狂做受XXXX高潮A片| 久久久久久久久月丁| 激情五月天.色网| 99热只有精品在线| 九九视频免费| 五月色俺婷婷| 中文字幕综合| 日韩欧美一区二区三区四区| 婷婷五月天日日日干干干| 99精品视频网站| 在线中文亚洲| 丁香激情五月| 伊人久久大香线蕉亚洲五月天,| 伊人色综合影院视频| 婷婷第六色| 五月婷婷插一插| www激情婷婷com| www.五月婷婷| 久久探花91swag| 激情五月天的婷婷| 综合亚洲六月婷婷在线| 丁香婷婷色五月天| 婷婷五月天影院| 香蕉AV777XXX色综合一区| 成人视频免费观看高清完整版在线观看| A级毛片高清免费不卡播放谢谢谢谢| 九九热黄色| 密乳视频| 亚洲操逼片| 最近中文字幕2019视频1| 中文字幕天天干| www久久99| 五月丁香六月花| 日本久久人人| 色五月 婷婷, 大香蕉| 日本色色网站| 国产日日操夜夜操的肉棒视频| 激情五月综合亚洲另类| 五月天激情婷婷| 色色网站日本91| 免费黄色视频网址| 五月婷婷六月丁香综合| 亚洲人人操| 99人妻碰碰碰久久久久| m色激情网| 色婷婷综合久久久久| 无人区码一码二码三码医生系列| 中文字幕AV网址| 丁香五月天天日| AV在线观看网站| 玖玖婷婷免费| 26uuu欧美日韩| 婷婷五月天欧美| 人妻人人操| 色综合视频| 夜夜夜叫天天天做| 99综合视频| 黄页免费一级视频懂色| 色婷婷先锋| 色九九综合| 有哪些A片网站| 色婷婷网| 综合色五月| 婷婷成年人免费视频| 五月激情小说| 99自拍视频在线观看| 久久这里只| 日韩成人av在线| 色99无码| 九九热经典视频在线观看| 久久五月丁香| 久久xxxx| 丁香激情久久| www.精品久9| 色五月成人在线| 色婷婷丁香五月| 丁香婷婷九月| 99婷婷国产最新视频| 五月天久久小说| 91免费在线视频6| 亚洲九九夜夜| www.超碰| 色~性~乱~伦~噜| 五月丁香亭亭AV女优| 麻豆五月丁香婷婷| 亚洲精品久久久久久久久久吃药| 色婷婷影视| 综合狠狠干| 影音先锋综合网| 麻豆五月丁香婷婷| 无码碰碰| 五月婷婷视频28| 五月综合激情婷婷六月色窝| 新久久五月天激情| 超碰99在线观看| 婷婷大香蕉| 五月天丁香网| 欧美色婷婷| 色99网| 色色色色综合网| 九九综合伊人| www九九| 色色操| 久久综合性| 99热这里只有精品1025| 无码啪啪| 啪啪99| 日本精品99网站| 精品久久久999| 影音先锋91| 婷婷丁香五月综合免费视频百花| 91肏| 大香蕉精品视频| 在线成人网站| 熟女重口味αV| 五月丁香香蕉| 丁香五月在线视频| 少妇人妻丰满做爰XXX| 91热er| 欧美黄色一级录像| 天天爽天天摸| 五月丁香视频色色| 99九九玖玖| 日韩综合久久| 深爱婷婷网| 激情五月天激情网| 国产欧美性成人精品午夜| 色综色五月天婷婷| 久久大香免费| 久久婷婷综| 激情综合网五月在线播放| 婷婷五月天影院| 久久五月丁香六月婷| 欧美特大片黄| 五月丁香婷婷成人网| 亚洲色99综合天堂| 91热视频色网站| 丁香九月久久| 婷婷五月花| 99人人操人人摸| 99久久久久久久| 91热久久| 色色婷五月天| www.91AV.com| 色区久久| 激情五月色综合国产精品| WWW.HENHENL.| 激情久久五月天| 亭亭丁香aV| 99久久户外勾搭| 99九九精品| 青青草网武则天| 六月丁香激情网| 丁香五月婷婷成人综合| 香蕉色色网| 99热这里只有精彩| 色色色欧美色色| 丁香婷婷婷五月综合色情| 99久久99九九九99九他书对| 五月综合激情综合久| 五月婷免费视频| 思思热视频在线观看| 久久九九热38| 超碰成人免费| 激情综合网 激情五月天| 久久图色4| 99视频这里有精品| 天天久| 激情欧美婷婷| 蜜臀av 粉嫩av 懂色av| 亚洲精品成人| 精品国产va久久久| 五月天综合网| 人人操人| www.狠狠| 免费观看的婷婷五月视频在线| 97精品综合久久| 97久久婷婷色| 五月婷婷激情网| 天天插天天插天天插天天插| 五月丁色AV| 久久九九亚洲| 人与禽A片啪啪| 婷婷射图| 激情五月少妇| 狠狠香蕉| 97久久五月丁香婷婷| 日本天天操| 五月婷婷五月色| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 国产精品人妻欲求不满| 香蕉久久国产AV一区二区| 超碰99资源站| 五月天精品综合在线| 99热偷拍| 夜夜躁婷婷AV| 久久3级片| 色五月天电影| 狼友视频在线观看18| 日本激情五月天‘| 午夜理论片最新午夜理论剧| 999激情视频| 91干在线视频| 中文字幕无线久必| 99自拍视频在线| 午夜五月天| 色五月天天| 久久精品婷婷| 欧美WW在线网| 五月婷婷www| 天天日天天久久青青| 性爱综合网| 激情婷婷五月| 99re思思热久久| 九九视频精品在线免费| 丁香婷婷精品视频| 噜噜噜狠狠色综合| 色欲九区| 9热视频在线观看| 欧美色色色色色色色| 婷丁香五月天| 丁香五月天激情五月天激情五月天激情网| 伊人网碰碰| 伊人热在线大香蕉| 日韩一本操| 婷婷丁香五月综合| 婷婷五月天开心网| 丁香婷婷五月| 国产成人网址| 亚洲激情视频在线观看| 九月综合| 97操碰碰无码视频| 中文字幕丰满人妻无码专区| 久久99网| 欧美丁香五月| 狠狠搞狠狠操| 婷婷五月天激情开心网| 丁香婷婷色| 思思久久99热只有频精品66| 开心五月婷| 99精彩视频在线观看| 69婷婷丁香午夜| 亚洲精品操一操、噜一噜、摸一摸、爽 | 青青草蜜臀| 色宗合,宗合网| 开心 五月 综合| 亚洲日本激情| 日日想日日夜日日操| 精品婷婷五月天| 亚洲avjiujiur91| 五月激情网五月综合网| 婷婷激情蜜桃玖玖丁香| 热99久久这里只有精品| 色情丁香五月天| 久久五月丁香六月婷| 99综合婷婷五月| 人人射av| 丁香五月婷中字幕| 五月天色综合| 久久在这里99| 99热在线观看| 搡BBBB搡BBB搡18| 婷婷五月天性色| 色综合久久8| 色一情一乱一乱一区9| 五月婷婷色啪| 久久综合干| 青青草a在线| 婷婷五月天深爱| 欧美综合五月丁香五月天| 色综合狠狠色| 五月丁香av中文| 香蕉综合网| 欧美成人无码一区二区三区| 开心色播色五月婷婷| 亚洲激情免费视频| 色婷婷五月天在线观看| 五月丁香综合在线| 免费视频WWW在线观看网站| 丁香五月天堂婷婷| 色婷婷五月天成人网| 超碰在线成人| 91免费在线视频6| 高清激情av在线观看| 色五月婷婷五月丁香五月| 色色色色综合| 婷婷中文字幕| 国产毛片操B| 亚洲精品中文字幕成人片| 日韩av在线电影| 激情黄色五月天| 精品思思久久| 成人αV视频免费观看| 丁香激情综合| 七七九九色色| 9久久婷婷国产综合精品性色| 国产AV一区二区三区最新精品| 丁香六月婷婷综合缴| 色播五月婷婷综合| 大香蕉九操| 九九精品丁香花| 99热这里只有精品4| 激情五月婷婷五月| 26uuuavcom| 影音先锋一区二区三区| 高清 码 免费看片短视频| 九九色热| 综激情网| 五月天婷婷社区| 五月丁香婷婷激情久久| 婷婷性爱影院| 91九色小视频| 4399在线观看免费高清毛片| 996热| 狠狠色色| 丁香五月五月婷婷| 激情五月天色婷婷综合| 深爱五月月天| 色婷婷丁香九月| 色五月天 丁香| 色婷婷亚洲婷婷| 97碰碰九九视频| 久热这里只有国产| 五月婷网| 亭亭丁香97| 亚洲综合婷婷| 精品无码99| 欧美成人精品A片免费一区99| 九九精品9| 五月婷婷,狠狠操| 久热精品视频| 99这里只有精品国产| 嫩草视频观看| 国内婷婷丁香社区在线播放| 天天摸色吧天天摸色吧| 人妻体体内射精一区二区| 丁香五婷婷| 婷婷五月天熟妇| www.婷婷五月天| 国产操逼网站| 欧美、日韩、中文、制服、人妻| 日本女色人人| 欧美69久成人做爰视频| WWW.婷婷五月天.COM| 天堂成人A片永久免费网站| 91网站黄| 色婷婷六月丁香综合欲精品| 性欧美大战久久久久久久83| 激情久久久| 午夜激情久久| 色操综合| 操操熟女| 大香蕉七区| 超碰无码318604| 激情中文在线| 久热9热| 熟女91九色| 国产资源在线视频| 亚洲精品九九| 探花搜索结果 - 黄上黄| 色九九丁香九月色九九色| 极骚大香蕉伊人| 99re久热| 五月丁香视频色色| www.91AV.com| 99精品在线观看视频| 色婷婷777狠狠| 夜夜久久综合网| 97视频久久| 99熟女| 亚洲永久四色| 色五月婷婷久久爱| 欧美综合在线五月天色婷婷| 婷婷六月丁香欧美视频在线| 天天爱天天吃狠天天透| 九九人人精品| 在线播放中文字幕| 国产在线网| 五月激情久久| 五月天激情影院| 五月天合网| 欧美色色色| 翔田千里无码| 亚洲AV电影美洲AV电影| 97色操| 九月激情综合婷婷| 六月婷婷激情| 五月激情综合婷婷| 操人妻视频91| 久久色9| 亚洲日本激情| 国产色五月婷婷| 麻豆雪千夏| 丁香桃色网| http://www.com久久久精品一区| 日韩肏屄网| 日本怕怕视频| 啪啪啪啪五月天| 亭亭玉月丁香| 五月婷在线观看| www.99.色| 久久3p| 人妻系列久久久久久久久久久| 六月丁香影院| 色五月婷婷综合| 影音先锋美国A| 激情五月天综合网| 日日天天操| 色狠狠综合| 婷婷中文在线| 99se丁香| AV色五月婷婷| 久久亚洲激情五码| 五月激情小说网| 九九九九中文字幕| 99热欧美在线观看| 婷婷色基地| 思思热在线视频精品| www.五月婷| 五月丁香综合网色欲| 婷婷开心激情五月激情网| 久久激情网| 欧洲亚洲精品| 人操人人| 五月欧美色色五月| 色婷婷狠| 日本婷婷激情四射中文字幕在线观看| 丁香六月久久| 亚洲成人在线五月天| 成人在线日韩| 奇米色大香蕉| 婷婷五月色| 中文字幕免费高清电视剧| 久久中国毛毛片爱久久| 亚洲AV网址| 99热这里只有精品 搜| 色呦呦美女| 色婷婷精| 五月婷婷综合网在线播放| www.久久爱.com| 91精品久| 丁香五月综合在线| 99热在线观看精品| 操婷婷基地| 狠狠色丁香婷婷综合久久97AV| 美女五月天| 五月天婷婷久草丁香| 亚洲综合字幕色色| 91综合色| 亚洲国产黄色电影| 思思热热久久| 97操碰| 五月丁香啪啪啪综合网| 亚洲欧美婷婷五月色综合| 伊人久久婷婷五月综合97色| 密臀久久| 狠狠色狠狠操| 激情综合99| 26uuu日韩| 色婷婷精| 色五月婷婷内射| 国产成人精品一区二三区熟女在线| 五月丁香婷婷基地| 蜜臀av粉嫩av懂色av| 五月婷婷在线综合| 97搞在线| 色色日韩无码| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 色播五月婷婷五月| 五月天久久婷| 狠狠色 综合色区| www.五月天| 精品久久人妻热| 日本婷婷| 狠狠舔| 九九热视频这里只有精品| 超碰在线免费9| 麻豆雪千夏| 成人啪啪色婷婷久| 婷婷五月天视频亚洲| 色原狠狠综合| 噜噜色噜噜网| 在线看黄色| 五月丁香婷婷免费视频| 狠狠色九月| 五月天色综合| 欧美在线视频免费播放| 99热精品在线观看| 亚洲xx网| 色五月婷婷91| 九九色影视| 99在线观看| 激情五月综合视频| 99色在线| 久久九九99| 99热免费| 五月婷婷影视| 国产黄色大片| 五月天啪啪啪| 97色片| 99热免费精品| 六月五月丁香五月欧美| 丁香五月综合| 五月婷婷五月天天| 五月婷婷综合成人| 开心激情综合| 91五月花丁香| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 久热免费视频| 国产精品丝| 亚洲色视频| 日本精品。999| 日韩一级片| www.婷婷五月天啪啪| 99久久婷婷国产综合精品电影| 丁香成人视频| 天堂在线9| 大香蕉婷婷| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 艹B高清无码| 亚洲色网络| 日本3级片偷拍网站| 丁香六月婷婷| 久热精品视频| 婷婷狠狠狠爱| 操骚货在线| 色五月激情综合| 天天综合色丁香| 综合网五月| 99er6热在线观看精品6| 亚洲成人av在线播放| 99色视频| 五月天三级| 欧美69色| 日本天天操| 激情五月天婷婷视频| 六月婷欧美| 色噜噜狠狠色综无码久久合欧美| 日本色色色| 久草丁香婷婷1024| 玖玖婷婷色五月| 夜夜天天久久婷婷| 色黄啪啪| 久久婷五月| 五月丁香六月婷婷开心网| 99久久久久| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 色婷婷激情五月天| 丁香色六月婷婷| 丁香婷婷久久| 五月天激情综合网| 激情99热| 激情五月天啪啪| 嫩草AV久久伊人妇女超级A| 婷婷五月激情六月| 开心五月激情| 久久婷婷五月综合成人d啪| 激情综合网激情五月天| 五月丁香综合在线| 日日干日日s| 大香蕉五月| 亚洲狠狠丁香婷婷香蕉| 五月天婷婷影院| 激情五月视频在线婷婷| 婷婷五月69| 久久一级片| 拍真实国产伦偷精品| 色天五月天在线观看视频| 日韩婷婷五月天| 91视频精品99| 婷五月天| 图片区 小说区 区 亚洲五月 | 色婷婷五月在线| 精品九九九久| 人人干人人看| 激情综合五月开心狠狠| 69er小视频| 亚洲成人免费电影| 在线看黄色| 91肏肏肏| 欧美在线干| 97九色视频| 色色色色色色色色网站| 2020久久婷婷五月| 欧美日韩国产日本精品四虎网网站物| 99久久九九视频| 思思精品视频| 草一草avb| 亚洲热久久| 甈你aaaaa| sS丁香五月婷婷| 99久久www| 操逼综合网| 婷婷五月天桃花网| 欧美S码亚洲码精品M码| 色婷婷99| 在线视频99| 激情五月天在线免费美女视频| 99久久思思| 天天草天天舔| 久热只有这里有精品| 久婷五月| 色激情五月| 色婷婷综合影院| 99视频日韩| 国内精品免费一区二区2009| 另类少妇人与禽zOZZ0性伦| 亚洲中文乱字字幕在线永久| 婷婷色啪| 六月婷久久| 婷婷六月色开 | tingtingzonghewang| 久久在这里有精品| 99色这里| 激情五月天婷婷久久久久久久久久久| 久久色婷婷| 久久激情五月天| 久久性操| 久久久久亚洲AV成人无码电影| 国产.亚洲.欧洲视频在线| 五月花激情网| 婷婷天堂视频| 色综合香蕉| 久99热在线观看| 欧美日韩成人高清在线| 六月婷婷青青青视频| 极品九九九九九九| 婷婷五月丁香激情图片 | 久久人妻人人槡| 综合图区激情| 激情综合网五月激情网| 久久久久久人妻久久久久久久久久人妻久久久 | 色色综合网络| 99爱免费视频| 婷婷国产成人| 婷婷五月色激情欧美激情| 丰满人妻一区二区三区| 伊人色综合久久久| 9久久婷婷国产综合精品性色| 99精品在线观看视频| 天天狠天天叉| 色噜噜婷婷| 不卡在线视频| yw国产AV| 久草a片| 大香蕉99热| 26UUU| 婷婷色系婷色| 99热无码首页| 亚洲人人操| 婷婷开心激情| 天天爽天天爽| 人人操婷婷| 99热热热国产超碰| 午夜激情婷婷| 激情小说婷婷小说| 五月丁香六月欧美| 久久青青日本视频| 婷婷涩五月| 久久丁香五月综合六月激情红杏视频 | 久久a热| 丁香五月综合婷婷| 极品人妻VIDEOSSS人妻| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 97色天堂| 五月天综合视频| 香蕉97碰碰碰欧美| 婷综合六月| 91精品久久久久久| 激情婷婷五六月天| 天天插天天插天天插天天插| 久久与婷婷| 五月婷婷色| 99九九热播在线免费视频| 九九这里是免费的视频5| 婷婷丁香五月亚洲欧美| 久久99美女精彩视频| 亚洲秘 无码一区二区三区妃光/1| 婷婷综合五月| 97午夜一区二区| 中文无码婷婷| 婷婷五月丁香基| 五月婷婷影院| 激情五月综合亚洲另类| 伊人激情网| 91一起操| 激情六月婷| 丁香五月综合婷婷| 色噜噜丁香| 五月丁香自拍| 婷婷成人五月天一区| 六月丁香影院| 婷婷五月天av| 亚洲操B视频| 777.色色| 91视频一起草| AA片在线观看视频在线播放| 欧美性猛交99久久久99| 久久五月天激情婷婷| 五月丁香六月综合激情| 九九伊人网| 九月婷婷色色| 五月丁香久久激情网| 99精品在线播放| 婷婷五月综合基地| 精品色情一区二区三区四区| 久久五月天激情| 成人综合网站| 九九超日本| 狠狠搞综合色| 操一区| 五月丁香综合网| 色视五月天婷婷| www色五月| 欧美123区免| 亚洲久久视频| 91天天操天天干天天射| 久久日婷婷| 亚洲射激情| 日本五月天网站| 亚洲AV无码电影| 国产夫妻操逼内射视频| 日日干夜夜干| 美女被肏网站在线看| 91精品电影18T| 色色色婷婷五月天| 九九激情| 久久99久久99精品免观看软件 | 色五月婷婷DVD| 婷婷六月色| 婷婷99狠狠躁天天| 久热99热| ww超碰在线| 六月婷婷狠狠| 亚洲熟妇AV乱码在线观看| 九热视频这里只有精品| 久久一操| 91婷婷色| 九色综合网| 色婷婷网| 97人人干人人操| 婷婷六月天精品| 五月丁香日本片| 亚洲综合五月天婷婷丁香| 99爱最新免费视频在线观看| 99人人爽| 九九精品亚洲| 日本高清久久| 欧美日韩成人| 亚洲激情精品| 婷婷五月,偷窥偷拍网| 超碰99在线观看| 成人羞羞啪啪 全 视频| 亚洲天堂婷婷| 亚洲色热| 婷婷在线观看五月天在线视频| 曰韩五月丁香色婷婷无码| 亚洲激情.com| 97色片| 99热这里只有精品99| Www,五月天| 色色五月天丁香婷婷| 影音先锋噜一噜| 六月婷婷狠狠色在线观看| 996热re视频在线观看视频| 五月激情网站| 色狠狠伊人久久五月丁香| 色婷婷五月丁香色| 99ri在线| 电影《战争与艾拉》免费观看| 99re久热| 婷婷五月天小说网| 久久久精久人妻| 亚洲小电影在线观看黄999| 婷婷亚洲色| 色五月婷婷亚洲最大| 丁香婷婷基地| 色网五月婷婷| 97精品自拍| 五月丁香激情综合| 国产乱码久久| 大香蕉手机视频| 丁香五月激情六月综合| 伊人免费视频9| 伊人五月天婷婷| 怡红院成人AV| 香蕉人在线香蕉人在线 | 亚洲一级色电影| 4399成人黄A片| 99热 这里只有精品 国产 日韩| 婷婷综合五月天| 99热欧| 97超级啪啪在线观看| 99色播| 五月丁香六月婷婷综合| 午夜成人AV在线| 99re最新地址视频| 亚洲精品字幕在线观看| 思思热性操| 成人va在线| 亚洲在线操| 丁香色五月直播| 久久色六月| 狠狠色综合精品视频在线| 97人人看| 97高清国语自产拍| 99久久精品视频女神1| 久热re在线视频| 国产成人高清| 五月天播播综合| 亚洲成人在线观看网址| 五月婷婷丁香| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 婷婷伊人久久| 久久久久久婷| 婷婷六月花| av激情在线| 开心五月天激情网| 六月婷婷久久大全| 日本久草福利| 免费黄色片子| 四色99久久| 狼人久草| 丁香五月综合狠狠| 97干欧美| 五月丁香AV、伊人业余、性色熟妇| 婷婷自拍| 婷婷伊人综合中文字幕| 99热99精品在线观看| www.五月婷婷.com|