久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

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

編譯原理詞法分析:帶Tkinter界面的狀態(tài)機實現(xiàn)與避坑指南 簡介一份面向編譯原理學(xué)習(xí)者的詞法分析器Java源文件包包含完整可運行代碼與注釋并基于SWING實現(xiàn)了可視化界面可在MyEclipse中直接導(dǎo)入運行。資源共5個java文件壓縮包僅5KB涵蓋詞法規(guī)則定義、輸入讀取、分詞邏輯和錯誤處理等核心模塊便于逐文件對照學(xué)習(xí)。已有525人學(xué)習(xí)下載。通過研讀和運行該項目讀者既能掌握詞法分析從正則規(guī)則到有限狀態(tài)自動機的具體實現(xiàn)思路也能了解如何用Java和SWING構(gòu)建簡單編譯器前端工具對于課程設(shè)計、期末復(fù)習(xí)以及編譯器入門實踐均具有直接參考價值。1. 詞法分析帶界面源文件這道編譯原理實驗真正卡人的不是狀態(tài)機是你拿到的“完整可運行”能不能在自己電腦上睜開眼做編譯原理實驗的同學(xué)最崩潰的一刻往往不是寫識別程序而是下載了一份聲稱“完整運行含注釋”的詞法分析源碼雙擊之后要么黑框一閃要么控制臺里的中文注釋全部變成亂碼要么壓根沒界面。詞法分析本身是編譯前端的第一道關(guān)卡它把源代碼字符流切成Token流聽起來不難但加上界面、加上注釋、加上“能跑”就成了三件事。這篇文章就按“一份帶界面的詞法分析源文件該怎么組織、怎么跑通、怎么調(diào)、坑在哪”的順序展開目標(biāo)是讓你拿到任意一份這類工程能在半小時內(nèi)自己復(fù)現(xiàn)并改成自己的實驗報告。2. 先把理論立住DFA狀態(tài)機、界面層與“完整可運行”的真實含義2.1 詞法分析的實質(zhì)是狀態(tài)機不是正則表達(dá)式比賽詞法分析器要回答的問題只有一個給定一個字符流從哪里開始、到哪里結(jié)束算一個單詞這個單詞屬于標(biāo)識符、常數(shù)、運算符還是界符標(biāo)準(zhǔn)教材會告訴你用正則表達(dá)式描述單詞然后轉(zhuǎn)為NFA、再確定化為DFA。但落到工程代碼里絕大多數(shù)課堂項目不會真的去實現(xiàn)子集構(gòu)造算法而是直接用DFA的等價物——手寫狀態(tài)轉(zhuǎn)移函數(shù)或查表。我一般會先讓讀者區(qū)分三個層次。最底層是字符分類你要把輸入字符分成字母、數(shù)字、空白、運算符、界符中間層是狀態(tài)轉(zhuǎn)移當(dāng)前狀態(tài)加當(dāng)前字符決定下一個狀態(tài)最上層才是Token封裝把命中的子串連同類型、行號、列號打包。很多同學(xué)從網(wǎng)上找的源碼一上來就寫一堆if判斷那也能跑但狀態(tài)一多就變成黑匣子調(diào)一個錯誤半天找不到位置。真正適合課程實驗的寫法是表格驅(qū)動。把狀態(tài)轉(zhuǎn)移規(guī)則放進(jìn)一個二維數(shù)組行是狀態(tài)列是字符類別值是下一狀態(tài)。這樣詞法規(guī)則要擴(kuò)展時只需要改表格不用動控制流。下面第3章給的代碼就是這個思路的簡化版——沒有做完整的NFA轉(zhuǎn)DFA但對“標(biāo)識符/數(shù)字/運算符/界符/注釋/錯誤字符”這類課程級需求完全夠用而且每個分支都有注釋老師一看就知道你沒抄。2.2 界面層不是裝飾它承擔(dān)了調(diào)試窗口、結(jié)果核對和報告素材三件事有人會問詞法分析不是命令行輸出Token表就行了嗎為什么非要界面答案是命令行輸出是單向的你沒法在出錯時回看掃描位置界面能把輸入?yún)^(qū)和Token表并排放在一起鼠標(biāo)點一行Token輸入?yún)^(qū)同步高亮到對應(yīng)代碼行查錯效率完全不同。同時絕大多數(shù)編譯原理實驗要求提交“運行截圖”沒有界面的話一張黑底白字的終端截圖在報告里非常單薄。界面提供的結(jié)果表格序號、行號、類型、值可以直接裁剪進(jìn)報告也讓答辯老師一眼看出程序確實在“分析”而不是硬編碼。一個容易走偏的點是界面不等于美化。有人花大量時間調(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標(biāo)準(zhǔn)庫高中文編碼、Tk縮放Java Swing中等好需JDK版本要匹配中JDK模塊化限制C# WinForms中等僅Windows需.NET運行時中老項目框架版本不一致C Qt慢好裝Qt庫體積大中信號槽編譯報錯難查另外提醒一句網(wǎng)上不少標(biāo)題帶“界面”的資源實際只是個極簡輸入框加一個“分析”按鈕沒有Token表格、沒有錯誤行跳轉(zhuǎn)。拿這種源碼交實驗老師一眼就看得出來。要復(fù)現(xiàn)就復(fù)現(xiàn)一個能講清楚“掃描過程”的工程而不是只有樣子的殼。3. 從零搭一份可運行工程文件結(jié)構(gòu)、核心狀態(tài)機與界面代碼3.1 工程文件結(jié)構(gòu)四個文件各干一件事我習(xí)慣把詞法分析界面工程拆成四個文件入口文件、詞法核心、規(guī)則常量、示例輸入。這樣做的直接好處是詞法規(guī)則改了不需要碰界面代碼界面調(diào)整了也不需要動狀態(tài)機。下面是文件組織方式你照著建目錄即可。token_ui/ ├── main.py # Tkinter 界面負(fù)責(zé)采集輸入和展示結(jié)果 ├── lexer_core.py # Token定義 狀態(tài)機掃描器 ├── rules.py # 關(guān)鍵字集合、運算符集合、界符集合 └── sample.txt # 一份用于測試的迷你源代碼main.py里不要寫任何詞法判斷邏輯它只做四件事讀輸入、調(diào)用Lexer、把Token列表填進(jìn)表格、把錯誤信息顯示在狀態(tài)欄。lexer_core.py只接收字符串吐出Token列表和錯誤列表。rules.py純粹是常量表方便你改成C語言風(fēng)格或者Java風(fēng)格的關(guān)鍵字。這種分層還有一個現(xiàn)實原因課程實驗經(jīng)常要求同時交“核心代碼”和“界面代碼”分開后你可以直接說明邊界答辯時也不會被問得手忙腳亂。3.2 核心狀態(tài)機代碼一個能直接跑的Token識別類下面這份lexer_core.py是完整可運行的核心代碼量不大但覆蓋了標(biāo)識符、整數(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_ # 類別標(biāo)識符/關(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): # 遇到 /* 時進(jìn)入直到找到 */沒找到則報告錯誤 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): 讀標(biāo)識符或關(guān)鍵字標(biāo)識符長度可設(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(標(biāo)識符, 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)包含了所有非法前綴字符的兜底分支但要注意像“!”這種雙字符運算符如果直接匹配失敗代碼會走到單字符分支把“!”當(dāng)作運算符輸出這會導(dǎo)致源代碼里寫“!”卻被切成了兩個Token。因此MULTI_OPS的匹配順序必須放在單字符之前上面代碼的順序是對的。另一個參數(shù)是max_id_len默認(rèn)32字節(jié)。它對應(yīng)部分教材要求的“標(biāo)識符長度上限”超過上限我直接把整個詞標(biāo)記為錯誤Token而不是截斷。截斷會改變程序語義標(biāo)記錯誤更容易在界面里看出來。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能讓你在粘貼大段代碼后還能撤銷誤操作這個細(xì)節(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。界面代碼風(fēng)格像卡片式界面輸入?yún)^(qū)、表格區(qū)、按鈕區(qū)各自獨立擴(kuò)展時互不干擾。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里直接點運行默認(rèn)工作目錄是當(dāng)前項目文件夾沒有問題的在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標(biāo)識符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語言習(xí)慣配置雙字符運算符 ! || -- - * /必須優(yōu)先于單字符匹配單字符運算符/界符 - * / ! | % ( ) { } [ ] , ; :按實際需要增刪改表時最常犯的錯是把“/*”和“//”也放進(jìn)運算符表里。這樣會導(dǎo)致注釋識別失效因為狀態(tài)機會先匹配到運算符“/”后面的星號被當(dāng)成非法字符。正確的做法是像核心代碼那樣在run()開頭就攔截注釋起點注釋處理優(yōu)先于運算符處理。還有一個細(xì)節(jié)關(guān)鍵字表不應(yīng)該包含printf、scanf這類庫函數(shù)名它們是標(biāo)識符而不是關(guān)鍵字。我看到不少網(wǎng)上源碼把printf放進(jìn)關(guān)鍵字表答辯被老師一問就露餡了。標(biāo)準(zhǔn)是語言規(guī)范保留字才叫關(guān)鍵字。4.3 三個隱藏參數(shù)最大標(biāo)識符長度、錯誤恢復(fù)策略、滾動閾值第一個隱藏參數(shù)是max_id_len默認(rèn)32。很多C語言教材說標(biāo)識符前32位有效但實際編譯器早就放寬了限制。這個參數(shù)存在的意義是讓你演示“超長標(biāo)識符報錯”。如果實驗指導(dǎo)書沒要求建議直接設(shè)成64或128避免把自己寫的正常運行代碼誤報錯。第二個隱藏參數(shù)是錯誤恢復(fù)策略。上面的實現(xiàn)遇到非法字符時跳過該字符繼續(xù)掃描這是最簡單的“恐慌模式”。另一種策略是跳過整個非法單詞對于中文注釋、特殊符號混入的場景后者更容易把后續(xù)Token切錯所以我不建議用。第三個參數(shù)是表格的最大顯示行數(shù)。Treeview的height限制只影響初始高度超出后滾動條接管沒有實際問題但預(yù)覽時如果不想讓窗口過高把它和顯示器的分辨率匹配起來就好。這里真正要調(diào)試的其實是“行號對齊”輸入?yún)^(qū)Text組件默認(rèn)沒有行號欄老師問起“第3行第5列怎么定位”時你可以直接回答狀態(tài)欄和表格里有行列字段界面按卡片式界面布局排查錯誤時先看行列再看值。5. 避坑五個高頻問題每一個都能讓“完整可運行”當(dāng)場翻車5.1 中文注釋在界面上變成亂碼但程序不報錯現(xiàn)象復(fù)制一段帶中文注釋的代碼進(jìn)輸入?yún)^(qū)點擊分析表格里Token值正常但輸入?yún)^(qū)里的中文注釋在Windows下顯示成“錕斤拷”或方框。原因Tkinter在Windows上內(nèi)部使用Unicode問題通常出在源文件的編碼。如果你的.py文件不是UTF-8保存Python 3默認(rèn)按UTF-8讀取文件里的中文字符串字面量自然解碼錯。還有一種情況是你從網(wǎng)頁或PDF里復(fù)制代碼復(fù)制進(jìn)來的文本本身帶不可見字符顯示出來像亂碼但長度卻占位。解決用VSCode或任意編輯器把所有.py文件重新保存為UTF-8編碼不要用Windows記事本默認(rèn)的ANSI。另外在界面輸入?yún)^(qū)里粘貼代碼后先隨便刪一個字符再撤銷回來可以觸發(fā)Tk的刷新比手動關(guān)掉重開省時間。這在VSCode里被說成“注釋亂碼”其實是編碼保存問題不是Tkinter的錯。5.2 數(shù)字后面緊跟字母被切成了兩個Token現(xiàn)象輸入123abc正確行為應(yīng)該報一個非法Token或整個作為錯誤但程序可能輸出常數(shù)123 標(biāo)識符abc。原因狀態(tài)機在read_number()結(jié)束條件是“遇到非數(shù)字”它沒有檢查當(dāng)前字符是不是字母。如果數(shù)字后面直接跟字母說明這本身就不是合法數(shù)字詞素第二種處理才符合詞法規(guī)則。解決在read_number()退出循環(huán)后加一個檢查如果當(dāng)前位置的字符是字母就把整個串收回并標(biāo)記為錯誤。代碼寫法是在while循環(huán)結(jié)束后判斷self.is_letter(self.text[self.pos])為真則繼續(xù)讀完整個標(biāo)識符然后用add_token(..., is_errorTrue)登記。很多網(wǎng)上的源文件沒有這一步但這一步是實驗報告里最容易加分的小細(xì)節(jié)。5.3 超長標(biāo)識符讓狀態(tài)機“卡死”或界面無響應(yīng)現(xiàn)象粘貼幾千行壓縮過的代碼點擊“開始分析”界面卡了好幾秒然后風(fēng)扇狂轉(zhuǎn)。原因可能的瓶頸有兩個。一是字符串切片過長二是Treeview一次性插入成千上萬個節(jié)點GUI線程被占滿。詞法分析本身是O(n)掃描但如果你的代碼在每次前進(jìn)時都做self.text[start:self.pos]切片長標(biāo)識符會造成重復(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ū)里舊代碼還在導(dǎo)致Token表混入上一份代碼的結(jié)果。原因這是UI設(shè)計問題不是詞法分析問題。很多入門源碼只寫了“開始分析”沒寫“清空輸入?yún)^(qū)”按鈕。解決在analyze()開頭強制清空上一次的Token表并讓“清空結(jié)果”按鈕同時清空輸入?yún)^(qū)、表格和狀態(tài)欄三處。按鈕復(fù)用時不要只delete表格行而留下Text內(nèi)容。實際操作里我一般會把“打開樣例”和“清空全部”放成兩個獨立按鈕前者把sample.txt讀進(jìn)輸入?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默認(rèn)按UTF-8無BOM顯示于是“看著正常、diff亂掉”。這跟git commit提交注釋是兩回事但很多人都會誤以為是自己寫提交信息時打錯了字。解決倉庫根目錄放一個.gitattributes文件強制所有.py文件按UTF-8處理并在編輯器里統(tǒng)一“UTF-8無BOM”編碼。另外提交前用git diff --stat檢查改動文件數(shù)量發(fā)現(xiàn)整個文件被識別為重寫多半就是編碼被改動過回退后重新保存即可。6. 進(jìn)階把狀態(tài)機變成可回放的調(diào)試器而不是一次性黑匣子到這里你的詞法分析界面已經(jīng)能跑、能看、能報錯了。但拿高分或者讓后續(xù)語法分析省力還需要一個核心技巧給狀態(tài)機增加“單步掃描”能力。做法是給Lexer加一個step()方法一次只前進(jìn)一個有效字符每走一步把當(dāng)前狀態(tài)、當(dāng)前字符、當(dāng)前已累積的單詞、當(dāng)前Token列表長度四樣信息保存下來。界面上的“單步”按鈕每次調(diào)用step()并把這四樣信息追加到一個只讀日志區(qū)。這個日志區(qū)產(chǎn)生的效果是你可以從第一個字符開始看著狀態(tài)機如何把一個詞逐步拼出來還能在報告里截一串狀態(tài)轉(zhuǎn)移記錄。常見做法是不改原有的run()而是寫一個TraceLexer子類把run()拆成step()然后界面用一個after循環(huán)每300毫秒自動走一步形成自動播放效果。這個回放過程對答辯特別有用因為老師問“你怎么處理標(biāo)識符和關(guān)鍵字的區(qū)別”時你直接播放到某個標(biāo)識符位置日志區(qū)顯示“累積單詞:count狀態(tài):關(guān)鍵字檢查”比口頭解釋清楚得多。另一個我反復(fù)用的習(xí)慣是把Token結(jié)果導(dǎo)出成CSV用git diff對比兩次修改前后的差異。第一次導(dǎo)出token_baseline.csv改動詞法規(guī)則后再次導(dǎo)出token_new.csv這時git diff會精確顯示哪幾行Token變了。這個習(xí)慣幫我抓到過好幾次“改了運算符優(yōu)先級但沒改規(guī)則表”的低級錯誤也能讓課程報告的驗證部分站得住腳。CSV導(dǎo)出可以用兩行Python代碼實現(xiàn)核心是csv.writer和tree的遍歷不需要額外引庫。最后落到一句我的血淚經(jīng)驗上詞法分析界面項目最重要的不是代碼寫得有多花哨而是你清楚“當(dāng)前指針在哪、當(dāng)前Token是什么、出錯了停在哪一行”。把這三點做進(jìn)界面里你的實驗就跑在了大多數(shù)同學(xué)前面。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月激情综合网| 日韩不卡a级视频专区| 天天色图| 诱惑人妻欧美一区在线播放| 黄色一区二区秘书性感| 国产自制av蜜乳| 青娱乐福利99| 色综合色色| 激情婷婷丁香网| 色牛牛AV| 亚州色综合| 老司机久久| 天天射天天操天天干天天吃2018| 久久嫩草国产成人一区| 丁香六月激情| 人人性爱视频免费| 国产精品乱码久久| 欧美激情欧美精品| 伦理片秋霞免费影院| 淫荡网址| 99久久9| 久热大香蕉| 久久久久亚洲Av无码专区老牛影视| 久久草视频污视频| 黑操B| 人妻人人操| 日韩视频中文字幕| 久久精品国产97欧美精品亚洲| 亚州AV无码国产精品| 不卡二三区人妻少妇| 人妻碰碰碰碰碰碰| 欧美啪啪女女| 女欧美一区二三区| 激情婷婷丁香| 久久噜| 久久婷婷五月天| 人人摸人人叼| 一区二区你上我| 福利伊人玖玖国产| 69视频入口| 蜜臀网址在线| 国产 日韩 欧美一区| 欧美黑人168页欧美黑人167| 好屌色综合| 极品极品色影院| 国产区性爱在线视频秋霞豆 | 亚洲视频精选| 丰满人妻一区二区三区免费| 久久精品国产97欧美精品亚洲| 丰满精品人妻少妇久久字幕| 久久视网78| www.一本大99| www.男人天堂| 成人三级片一区二区三区视频| 97内射偷拍| 熟妇艹鸡八| 超碰97在线色男人??| 超碰午夜在线| 精品国产国产AV| 国产精品午夜福利视频| 日韩在线观看AV| 先锋女优在线观看视频| 中文操逼字幕| 欧美人妻精品一区二区| 婷婷久久网| 91丨国产丨白浆| 97 国产一区| 天天干少妇| 丰满人妻大屁一区二区| 插入综合网| 99热婷婷| 国产偷仑| 狠狠爱夜夜| 亚洲色欧美| 久久精品日韩| 亚洲中文日韩欧美大香蕉视频| 国产超碰人人操| 亚洲 综合 欧美| 啊啊啊啊在线观看网址| 精品传媒在线一区| 国产精品岛国片在线观看| 男人的天堂网免费| 久久久久久久久一区二区三区| 免费岛国一级片| 18禁网站在线播放| 亚洲免费人妻在| 夜夜爽妓女| 岛国AV一区二区电影| 人人摸人人干| 九区国产| 免费a级毛片av无码久久精品中文字幕| 一级AV性爱| 国产精品老师| 婷婷另类小说| 无码二级三级| 亚洲av综合伊人久久| 毛片电影一区二区三区| 9精品久久久久| 九九九九九精品| 一级黄色视频网| 色爱国产| 国产精彩女在线观看视频| 中国AAAAAA黄色片| 农村妇女一级二级三级视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 97操| 丁香六月婷婷久久综合| 72av视频| 东北黄色电影| 麻豆天美在线喷水AV| 97在线视频免费观看| 黄色AAAAA欧美| 日本操BAV| 国产白领连续中出在线观看| 久夜视频| 超碰精品| 久久午夜鲁丝片| 欧美嗯啊……在线观看视频免费| 天天视频黄| 亚洲.欧美.丝袜.中文.综合| 乱人乱色一区二区三区免费| av资源在线播放天堂| 亚洲在钱| 韩国成人精品久久久免费看| 嗯嗯啊啊好疼| 日韩一级特黄av毛片| 欧亚日韩三区| 91人妻素女| 99久久无色码| 一区二区影视| julia高潮后不停追击中出| 黑白配性爱AV成| 国产精品免费美女视频| 亚洲AV在线资源| 郑州宾馆老熟女露脸啪啪| 色 亚洲 91| 三级色综合| 欧美亚洲厕所精品偷拍91| 免费一级精品啪啪视频| 第二页中文字幕| 色婷婷国产精品一区在线观看| a网站免费观看| 97视频网站| 嗯嗯啊啊操死我| 成人av性爱电影在线观看| 国产AV人人 夜夜人人澡| 久久受www免费人成| 久久久艹艹艹| 91人妻尻屄视频| 91精品导航| 极品色社| 国产精品无码av在线| 制服诱惑亚洲一区二区三区在线观看| 国产精品久久久久久 百度| 本道在线| 自拍偷拍2025在线观看| 丝袜 中出 制服 人妻 美腿 中文字幕| 亚洲另类综合欧美| 国产乱伦视频污| 国产AV人人 夜夜人人澡| 中日亚韩免费视频| 91女色| 精品久久久av| 午夜黄色免费在线观看| 日日日日做夜夜夜夜无码| 久久9999| 97精品国产手机| A V少妇特黄三级| 无码高清少妇久久| 欧美人人天天网| 天堂种子在线www网资源| www国产精品| 精品性爱久久视频| 九九精品美女高溯喷水| 日韩丝袜二区| 国产毛片久久久久久久| www.男人的天堂| 女生自91网站| 大鸡吧尹人在线| 熟女色综合久久| 国产精品美女视频诱惑| 97色操| 日本一天色道久久久精品视频| 国产人妻天天干精品| 高清无码久操视频| 97爱爱爱| 日本Suv精品一区二区| 伊人天堂在线| 性爱av在线免费观看| 欧美色图综合网| 狠狠干妹子| 欧美日韩理论一区| 亚洲91极品| 国产视频不卡在线观看| 日本国产高清色www视频在线| 日本成a人v网站在线观看| 亚洲情色无码一区二区三区| 九一屌逼| 少妇国产不卡| 欧美|91色综合| 午夜国产成人福利视频| 啪啪AV导航| 久久久久久网址| 国产精品成人午夜福利| 久久久久久久久久9| 激情另类激情| 亚洲动态色图| 欧美高清色| 熟女少妇一区二区三区| 嗯嗯不要 视频| 国产精品69久久久久孕妇欧美| 蘋果手機免費看成人Av| 成年人免费观看网站| 91天美传媒在线| 神马午夜久久久| 午夜精品久久久久| 亚洲国产青青| 日韩欧美中文字幕搭讪巨乳美人妻视频| 九九av| 91国产美女丝袜足交精品视频 | 青青草成人视频在线观看二区| 9久久美女首页| 欧美人妻色| 操曰本熟女| 人妻大香蕉| 青青草中出视频| BBBBB97COM| 欧美激情久操网| CCYY草草影院地址入口| 国模私拍一区二区三区神乳| 国产1769在线| 九九英色视频| KK色在线影院| 亚洲性网| 在线观看AV片| 国产欧美美女免费观看视频| 伊人aaa| 色欲久久99精品久久| 精品国产乱码久久久| 色五月AV| 欧美成人一级免费电影| 国产精品女同| 91高清日| 夜夜天天噜狠狠爱2021| 亚洲人妻av| 97精品国产97久久久久久| 久久e6只有精品| 免费亚洲国产精品久久一区| 外国91| 亚洲无码国产精品久久| 欧美性爱精品一区二区| 亚洲综合影片| 男啪女色黄无遮挡免费观看| 精品亚洲国产成人av网站| 丁香五月天激情| 91丝袜美腿网站| 亚洲偷拍欧美激情| 凹凸精品熟女在线观看| 亚洲最新中文字幕免费| 神马福利久草| 欧美日韩淫加| 东北女人性交| 成人国产视频在线观看| 国产强奸超碰AV| 免费视频在线观看啊啊啊啊啊| 牛牛久久国产精品视频一二三| 国产人妻久久精品一区二区三区| 国产精品亚洲天堂网址| 伊人成人情色综合| 久久国产精品m码| 操逼片国产| 国产丝袜美女诱惑| 好色综合| 日日夜夜天天| 中日韩久久久免费看| 精品无码久久久久久久杏吧| 90后性网国产欧美| av东京热男人的天堂| 日韩啪啪视频| 国产自偷自拍一区| 日韩熟女视频二区| 尤物黄色在线观看网站| 欧美亚洲一区二区久久久婷精品大包诱| 五月天婷婷社区| 亚洲中文国际强奸字幕| 久久亚洲天天做| 天天干18禁| 亚欧性爱在线无码| 后入综合久久| 这里只有精品视频| 玖玖无码超碰| 99免费在线视频| 很狠操| 色欲蜜臀AV| 性生活无遮挡纯毛片在线看| 亚洲黄片免费在线播放| 精品久久久av| 天天谢天天干| 伊人一区二区三区| 亚洲中文国际强奸字幕| 深爱伊人影院| av中文在线| 大乔未久88一区| 强被迫伦姧在线观看无码网站| 9 9精品一区二区三区| 97精品视频在线| 自拍偷拍2025在线观看| 超碰 欧美| 麻豆这里只有精品| 国产日韩精品suv| 国产久久久9999| 天天躁日日躁狠狠躁| 北条麻妃99精品青青久久| 亚洲欧美小说| 亚洲日韩乱码中文无码蜜桃臀网站| 久久精品国产99精品亚洲蜜... | 97在线观看| 1024亚洲中文字幕久在线看片你懂的 | 国产精品诱惑| 裸模AV女优| 污污汅18禁网站在线永久免费观看 | 操死我了嗯嗯嗯| 郑州宾馆老熟女露脸啪啪| 国产欧洲精品亚洲午夜拍精品| 免费作爱一级视频| 天美传媒AV在线播放| 91 丝袜在线| 日本网色| 精品无码一区二区三区色欲| 久久蜜色情在线视频xxx免费观看| 大香蕉视频一二三区| 欧洲与亚洲欧美精品中文字幕| 黄色电影在线播放综合网站 | 国产树林里野战在线看| 91欧美亚洲| 色爱欲亚洲| 色色色天美视频| 中文字幕乱码在线观看| 天天天天天超碰| 狼人久草| 日韩簧片免费看| 亚洲,欧美,综合网| 欧美午夜色妇色鬼| 99色视频| 久久久亚洲高清不打码| 懂色aV一区二区天美传媒| 日本男人插女人的逼黄色| 97天堂| 中文字幕一区二区在线日韩精品| 老妇女91| 亚洲大色鬼| 国产在线不卡导航| 激情五月天视频| 粉嫩av久久一区二区三区| 干美女人妻| 久久综合女优| 97在线国产精品| 精品国产片亚洲一区| gogogo免费高清看中国国语| 天美麻豆一区二区三区| 精品一区二区久久| 久久AV色| 欧美中文字幕一区| 亚洲。日韩。欧美| 欧美拳交在线播放| 91精品黄在线观看| 色婷婷九月天天综合| 国产精品高清2021在线| 婷婷综合伊人一区| 久夜视频| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 久久久久密臀一区二区| 日韩人妻精品久久久久| 五月婷网站| 91中出在线| 久久精品人体| 探花激情视频| 激情综合五月| 日本在线激情一区二区三区| 国产女乱淫真高清免费视频| 高清无码一区二区三区| 中文字幕日韩电影人妻| 日本性感人妻91| 欧美亚洲情色| 搡老熟女免费视频| 17c嫩草51久久91嫩草| 97久久超碰亚洲| 日韩特一级久久| 久草线上视频免费看| 91强在线播放| 99这里只有精品| 欧美色91| 日韩15p| 大色综合| 久久无码一区二区二三区性色| 日本人妻最新在线中| 精品免费视频国产一区| 午夜操逼不卡| 亚洲AV无码国产精品久久久久| 亚洲AV无码AV吞精久久久久| 日韩av不卡在线观看| 亚洲国产欧美中文永久| 九九av| 九九九九88| 91艹逼精品| 日韩精品大香蕉伊人在线| 色色色色色色色色综合| 伊人在线大香蕉视频久久| 一级免费精品| 亚洲国产综合图区中文字幕| 秋霞一级鲁丝片A片| 啪啪啪精品| 亚欧无码在线| 久久五月份| 歐美一級亂黃99在綫精品| 欧美精品 - 91爱爱| 日本熟妇色熟妇在线视频播放| 青青草一区二区三区四| 色激情综合网站| 不卡av在线中文字幕| 中文字幕av亚洲在线| 亚洲,欧美,春色,另类| 91天堂视频| 亚洲日本大香蕉1| 上特色A在线| 秋霞成人一级在线观看| 五月婷婷综合在线| 女生自91网站| 亚州性色| 国产日韩欧美三级片| 尻女朋友一夜| 黄站在线免费观看| 草草影院最新网址| 天天舔天天| 成熟熟女国产精品一区二区| 97在线观看| 新版天堂中文资源8在线| 亚洲日本男人天堂网| 91 国产丝袜在线播放-百度| 国产白丝精品在线观看| 操婷婷逼| 狠狠躁天天躁日日躁| 极品色综合| 亚洲黄色a级片| 一个人在线看的黄色电影网站| 人妻喷水| 欧美日韩香蕉| 啊操爽品善一区二区三区| 密臀在线一区尤物| 日韩性爱网址| 天天爱综合网| 国产欧美精选激情视频| 欧美一级欧美三级在线观看| www欧美91| 欧美日韩国内不卡| 操淫穴亚洲五月丁香 | 1区2区3区中文字幕日韩| 99热销国产这里有精品| 热99这里只有精品| 91美女视频电影| 亚洲一区二区三区播放在线| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 激情综合网亚洲| 日韩午夜啪啪视频| 97综合久第一页| 午夜影美女日鸡鸡天天视频国产| 动漫av中文| 粉嫩av久久一区二区三区| 无码人妻一区二区一牛影视| 精品一区二区三区丰满熟女-亚洲欧美一区| 国模无码一区二区三区在线| 亚洲人久久久网| 在线色导航| 日韩钢筋无码高清啾啾啾| A级国产欧美激情在线| 亚洲色图久久成人| 成年无码动漫av片无尽在线 | 国产第二页| 国产精品999zyz| 国产青青美女玩逼视频| 乱伦Av网| AV女优男人的天堂| 欧美精品另类人妖xxxx| 天天日天天操天天射河南省| 亚洲AO在线| 韩国手机不卡无码三级视频| 亚洲老司机123专区| 伊人久久大香线蕉无码| 亚洲交换| 日韩AV电影网站| 一级做受视频免费是看美女| 久久久18禁| 国产精品无码在线| 青娱乐妇女性生活| 中文字幕乱碼在线| 国产网站在线播放| 伊人麻豆传媒| 色狠人在线99| 多乙久久久久久| 欧美写真视频一区| 丝袜天堂| 久久久久久久久久8888| dy888午夜老子影视达达兔| 美女大乳久久久久久久女人18| 国产中文大片资源中文字幕| 91亚洲黄色网| 久久国产精品,久久国产| 这里只有精品视频在线观看麻豆| 亚洲丨在线| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 乱伦AVxx| 丁香婷婷五月| 熟妇高潮二区三区| 人人妻人人操人人乐| 伊人久久综合精品欧美| 91亚洲人| 操逼无毒无码免费视频| 老熟女91av| av日韩手机在线影视| 天天澡天天狠天天天做| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 天天躁日日躁成人字幕aⅴ| 在线小说视频一区| 熟女中出视频| 亚洲.欧美.丝袜.中文.综合| 温婉少妇玩3p| 人妻9117c| 国产麻豆91欧美一区二区久久婷婷国产精品| 男人的天堂.com| 99ri在线视频| 国产一级作爱毛片| 日韩字幕一区| 在线视频97| 成人青青草原伊人| 欧美在线色| 大香蕉伊人在线成人AV在线观看 | 99最新日韩偷拍视频| 超碰97男人| 性欧美另类高清| 欧美性爱系列| 无码国产精品久久久久| 黄色片,com| 操国产逼| 偷拍 欧美 日韩| 日逼97| 日本幼女18+| 色香91| 国产第二页| 欧美猛交黑寡妇中文字幕| 久久综合日韩亚洲欧美| 色999人与兽| 男人兔费天堂| 91N欧美| 98一区二区精品| 色情婷婷| 极品白嫩福利在线| 九九精品美女高溯喷水| 嗯嗯嗯啊啊啊在线免费观看| 婷婷色一区| 久久麻豆一区二区| 玖玖97综合| 殴美牲| 91超碰人人| 欧美综合97www| 久久9精品视频| 99爱久久视频频| 蜜臀在线免费观看在线免费观看| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 美女天天干| 人人操人人摸avav| 国产女人与拘做受视频免费| 欧美精品日韩久久久九| 91三级理论片播放器| 亚洲综合中文字幕有码| 国产三级电影免费观看| 五月天开心网| 韩日男人的天堂| 97超碰资源网| 欧美图片校园春色| 精品久| 日韩熟女操逼| 强奸乱伦αv片| www.婷婷| 国产又大又粗又长视频在线| 久久草视频污视频| AV天堂因数| 绯色一区二区三区不卡少妇| 国产对白刺激视频| 立川理惠无码一区二区| 六月婷激情福利天堂69| 人妻人人澡人人爽人人| 国产AV线| 日韩视频中文字幕| 东京热男人的天堂精品| www.狠狠| 极品内射| 欧美自拍网| 日韩强奸av| 白嫩国模丰满一二三区| 国产精品小视频一区二区三区| 97人人爱人人做人人乐| 综合自拍| av绯色| 国产精品一区人妻精品阁在线| 99re95| 男人天堂新| 欧洲亚洲国产综合在线| 五月丁香影视| 欧美日韩人妻婷婷一区| 91老女人| 亚洲欧洲网站免费观看| 97玖玖超碰| 躁躁躁日日躁2020| 极品美女福利在线观看| 一道本东京热加勒比一区二区三区| 日韩中文9| 男啪女色黄无遮挡免费观看| 国产原创剧情在线丝袜| 极品后入免费视频| 男人天堂2017| 超碰在线国产| 97欧美久久久久久久| 中文?日韩?免费?精品| 99人人干| 久热99999| 国产精品日韩在线一区| 国产精品老熟女一区二区| 九九综合网| 色色网91| 天天影视激情欧美| 亚洲另类春色| 久久麻豆一区二区| 大香蕉中文网| 天天色综亚洲91污| 二三四区精品| 超碰国产精品久| 伊人一区二区三区| 岛国1区2区3区在线观看| 大香蕉碰碰| 国产精品一区二区三| 深田咏美亚洲精品福利社| 亚洲欧洲无码一区夜| 国产精品原创巨作?v网站| 蜜臀精品1区2区| 欧美色人| 福利风月五月天影院| 东北女人无套内谢视频| 黑操B| 97精品免费| 色香色香欲天天天影视综合网| 91美女在线| 免费观看的av| 欧美日韩中文视频播放| 久久久久久久九九九九九九| 毛片一区二区| 中文字幕加勒比海高清无码免费视频| 天天干人人看综合| 激情亚洲天堂| 岛国片国产成人亚洲播放| 久久99草| 黄色毛片A片| 91热热色| 久久日韩毛| 国产主播福利| 91色色综合| 97任你吞精| 97久久久久| 国产欧美日韩女同性恋ww喷水精品| 中文乱码字幕观看| 男人干美女| 亚洲AV性爱电影| 蜜臀久久99精品久久久久电影| 丁香五月天激情| 亚洲欧美人妻| 日韩欧美偷拍美女视频| 爱av免费| 99久久99久久免费精品蜜臀| 亚欧中文字幕在线视频| 欧美黄片欧美黄片xxx| 欧美日韩人妻精品系列一区二区三区| 亚洲色人妻综合| 亚洲国产91精品一区二区久久| 96久久久精品| 婷婷色综合| 国产精品第一区第一页| 黄久在线| 一本一道人妻久久一区二区三区 | 蜜臀AV网站| 97亚洲欧美| a片亚洲一本通视频| 国产女人成人精品视频| 看日韩黄片| 情色五月天就去干| 亚洲美欧999| 国产成人在线观看综合| 亚洲精品一二牛牛| 亚洲 欧美 日本 国内 首页| 欧美最婬乱婬爆婬性视频 | 99综合自拍| 九久9精品| 成人日韩3| 亚州综合在线| 91少妇通奸网站| 久久久久久久久久久97| 色色色色电影网| 国产精品久久久无码aV去| 婷婷激情丁香| 欧美综合777| 成人女人国产| 久久草草欧美精品| 人人考人人摸人人干| 黄色香蕉视频网站一区| 熟女少妇视频| 中文字幕欧美日本乱码一线二线| 美女的肌被草喷水视频| 亚洲无码99| 久久久久成人亚洲国产| 精品国产91内射久久| 碰碰97| 91制服丝袜| 久久 久久国内精品亚洲| 日韩二级| 久久9精品视频| 成功精品影院| 婷婷五月天AV| 99久久综合网| 日本午夜福利影院| 乱伦av.com| 中文字幕亚洲永久精品| 午夜激情成人在线观看| 天天看精品动漫视频一区| 熟女人妻精品一区二区视频| 变态综合色| 欧美色图片色哟哟| 国产三级中文字幕粉嫩| 国产精品第一页国产大屁股视频免费区i| 亚洲五区熟女| 国产精品久久久蜜臀| 天天操av懂色| 国产精品情侣啪啪| 亚洲最大黄网| 亚洲中文字幕乱码无码一区二区| 在线啊啊啊啊| 熟女一区二区| 人人超碰在线观看黄| 中文字幕少妇色| 色综合加勒比四四季| 欧洲精品在线播放| 超碰这里只有精品| 激情婷婷丁香| 激情另类激情| 亚洲资源站| 天天看夜夜看日日干| 69视频入口| 8x福利精品第一福利视频导航| 国产亚洲深夜激情| 亚洲欧洲综合成人av一区| 久久av一级av少妇av高潮| 日韩亚洲中文字幕在线| 中文字幕精品区先锋资源| 国产无马av| 920日本午夜免费| 精品久久在线区一区| 久久AV无码1区2区3区| 91在线/欧洲| 伊人9| 男人久久天堂| 国产在线激情视频| 夜色AV无码手机在线影院| 色小视频蜜乳| 一区二区三区 丝袜 高跟 美腿| 熟妇亚洲一区二区三区| 亚洲性少妇| 少妇贴图| 日韩熟女操逼| 爆操无码| 久操高青| 日本道日本道中文字幕日本道最新日本道在线观看| 久久久一二三四区| 伊人影院日本| 国产午夜激片Av毛片不卡| 五月婷色| 天美精品一区二区三区四区在线观看| 99热国产精品| 日本在线观看网址| 色综合久久88色综合久久天天| 色婷婷综合网| 欧美激情久| 2017天天插| 精品国产无码中文| 色婷婷激情| 蜜臀亚洲综合一二三四区| 春色91| 欧美性生活免费网| 蜜臀久久一区二区| 风月影院男女十八禁| 色悠久| 嫖老熟女A片一二三区| 一区二区久久天天干狠狠| 大屁股熟女一区二区三区| 欧美狠狠干| 免费一级毛片在线视频观看| 超碰在线974| 精品国产乱码久久久A| 欧美成人四级在线播放| 黄页18禁| 亚洲资源吧| 中文字幕丝袜国产第一页不卡| 七久久久| 亚洲狠狠入| 加勒比久久综合网高清| 熟女中出视频| 国产97在线视频| 91chinese在线| 91视频综合在线| 亚洲好看强奸乱伦| 亚洲熟妇无码一区二区三区| 2020中文字幕在线观看| 视频分类 国内精品| 一本一首道人妻少妇免费久久| 亚洲日韩电影| 天天干,夜夜爽| 少妇熟女视频一二三区| 大香网站| 在线情色电影 91大 | 成人久久久| 国模精品娜娜一二三区| 肉丝无码中文高清| 97人妻免费中文字幕| 97视频7| 天天视频网站黄| 啊嗯好大视频在线观看| 欧美性第一页| 另类图片五月| 91精片| 久久熟女人| 国产传媒日韩| 97亚洲一区| 草草电影院| 国产青一二三| 2024年最新色情网站在线观看| 亚洲天堂人妻一区二区| 亚洲丝袜诱惑| 啊啊啊 在线观看| 婷婷超| 精品久久久久黄少妇| 日韩欧美性吧婷婷乱伦大香蕉| 91蜜臀在线久久久久| 乱伦熟女论坛| 抽插爽| 午夜影美女日鸡鸡天天视频国产| 欧美亚洲成人在线一区二区三区| 99久久婷婷丁香| 亚洲色图第四色| 亚洲精品亚洲人成人网| 男人天堂2030| 精品一区96| 老外又粗又长一晚做五次| 欧洲精品在线播放| 美國A片| 这里只有97精品| 亚码激情| 亚洲日韩视频二区| 青娱乐手机日韩在线视频| 精品在线观看视频在线| 91美女视频。| 日韩成人色图| 自拍视频一区在线观看| 男人的天堂三级| 夜夜爽77777| 操人人| 热热色国产一二区AV| 久操操| 一级AV性爱| 少妇精品久久久八区九区| 久久乐| 黄色av网站在线播放| 久久久久96| 天天日日舔舔| 太久视频| 亚洲图片另类| 欧美日韩人妻婷婷一区| 日韩精品99999| 天天躁日日躁xxxxx| 哈哈操 大香蕉| 97内射偷拍| 日本亚洲熟女视频| 人人操人人干xxx| 综合情欲网| 亚洲网自拍| 六月激情网| 狠狠中文字幕| 亚洲色宗合| 久久偷偷色综合蜜桃| 91美女视屏| 被体育老师抱着c到高潮| 亚洲欧美另类激情小说| 国产精品一区二区麻豆| 伊人国产av| 99自拍视频在线| 日韩欧美成人午夜福利| 欧美日韩中文字幕人妻| 国产精品久久久久999| 亚洲熟女国产综合另类| 色婷视频| 日本成人电影资源网| 美女裸体无遮挡永久免费观看网站| 99国产精品自在自在| caopeng97人妻| 25国产精品免费观看| 人人操人人大香蕉| 岛国片在线播放| 日韩无码极品| 神马麻豆福利院| 亚洲综人| 97天天在线| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 黑人精品成人一区二区三区| 亚洲综合有码| 精品亚州18| 蜜臀精品1区2区| 99色综合| 久久老子无码午夜伦不卡| 国产精品亚洲一级av第二区| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 婷婷五月天补不补| 91狠狠色丁香婷婷综合久久精品| 亚洲αv一区二区三区| 免费的黄片有限公司| 午夜性生活av免费在线看| 97久久久久| 婷婷激情丁香| 超碰色美女| 好一吊区二区| 桑老女人九区| 综合亚州欧美| 加勒比色99999| 国内外激情在线| 天天日天天干天天摸天天操| 中文字幕av一区二区三区人妻少妇| 激情小说亚洲图片| 亚州欧美总和| 91视频综合在线| 伊人9| 伊人欧美大香蕉视频| 久久久女人| 欧美亚洲特P| 伊人骚琪琪亚洲天堂网站| 日本媚薬中文字幕在线| 天天综合网~91| 麻豆天美91| 亚洲乱码精品一区二区| 乱性AV| 国产又黄又爽又刺激久久久久久| 成年人三级黄色片视频| 啪啪免费| 在线观看日韩av不卡| 五月天婷婷色色| A V少妇特黄三级| 四虎影库国产精品免费| 99国产在线绯色一区| 欧美五区| 亚洲精品人伦一区二区| 在线洲亚线| 91丨人妻丨国产丨丝袜| 一区二区三区免费视频入口| 亚洲色图尤物视频| 精品一区二区人妖| 熟女精品一区二区三区| 夜夜夜久久| 欧美亚洲se91| 综合五月天| 国内偷拍精品一区二区| 夜夜天天噜狠狠爱2021| 色综合九九| 国产人伦精品一区二区三区| 天天舔天天日天天射| 免费视频观看60秒| A片A5445444| 亚欧性爱在线无码| 人人操天天爽| 色阁阁AV综合网| 亚州一区二区| 免费伦费视频在线观看| 日本三级久| 欧美影音在线| 亚洲欧美色图片| 日韩欧美tv一区二区在线观看| 婷婷伊人綜合中文字幕小说| 啊好爽受不了无码| 91色射| 丰满美女一级毛片在线播放| 久久精视频美日韩在线视频| 久久手机好看网站| 97久久精品不卡| 日语五十路和六十路亚洲国产精品| av无码精品久久久久| 久久久久久亚洲精品不卡人乳| 精品久久九| 久久国产成人精品国产成人亚洲| 人人插人人摸人人| 嗯……啊…嗯嗯…啊…好舒服| 伊人网一本| 国产亚洲性生活视频播放| 99在线精品观看99| 嗯嗯啊啊好大好爽| 日韩福利电影网| 欧美色五月| 曰韩香蕉97| 精品亚洲一区在线观看| 成功精品影院| 亚洲AV色图一区| 91亚洲色人| 内射日韩大臀美女| 亚洲小说视频| 热99这里只有精品| 天天澡天天爽日日av| 人妻少妇久久中文字幕一区二区 麻豆 | 亚洲人人夜夜澡人人爽| 欧美一区二区一级岛国大片| 国产刺激视频| 亚洲成人帖图| 亚洲欧综合另类无码一区| 欧美婷婷久久| 岛国免费视频在线| AV色天香在线| 校园春色五月天| 亚洲欧洲另类| 97欧美日韩精品| 人人插人人搞人人操| 日韩色女精品| 人妻 中文 日韩| 伊人aaa| 在线a v| 情侣操 逼视频99| 久久久久久人妻一区精品色欧美| 高清不卡一二三区视频......| 少妇久久久久| 色穴精品| 一二三区操逼国产91| 91九久| 亚洲阿v天堂在线| 91 丝袜在线| 亚洲电影中字一区二区| 欧美一级欧美三级在线观看| 懂色Av| 在线 亚洲 网爆 自拍| 欧美日韩国产成人高清| 亚洲AV资源| 久久精品久久久久久久久| 久久久久久久78| 91影库| 久久久少妇诱惑精品视频| 97任你吞精| 91欧美情色| 日韩亚洲美女一区久久| 国产强奸乱伦无码视频| 91色五月俺来也| 亚洲伊人a线观看视频| 久久精品国产久精国产| 精品一区二区人妖| 天天摸天天操视频| 婷婷久草一区二区三区| 91精品国产91久久青草| 91撸色网 玖玖网 欧美| 国产女人与拘做受视频免费| 美女91av| 色综合天天| 亚洲日韩人妻中文字幕一区| 久婷婷一区| 精品一二三区久久AAA片| 亚洲高清91| 97干色天堂| hd成人一区二区在线| 亚洲综合伊人无码久久| 一道本东京热加勒比一区二区三区| 大学生口爆吞精| 天天干人妻视频| 国产原创精品| 人妻 中文 日韩| 夜夜爽夜夜操| 好舒服视频| 日韩三级一区| 日本成人A片网站| 91亚洲黄色网| 国产a级精品| 中文字幕日本久久| 人人爱人人乐人人操| 嗯嗯啊啊好大好爽| 在线观看一卡二卡| 2020中文在线一区二区三区| 欲色综合| 欧美国产有色电影| 小少妇| 1769一区二区| 亚洲精品国产精品成人| 日韩人人精品| 色狠人在线99| 激情五月婷| 逼逼逼逼操操操操操操操操操午夜剧场 | 亚洲。天堂。日本在线观看| 人人天天欧洲| AV无码久久久精品| 精品无码欧美三级| 超碰 欧美| 97爱b| 91女人的网站| 一区二区三区机械有限公司| 久久精品福利影院| 九九热九九| 国产熟女自拍| 四季AV一区二区凹凸精品小说| renqi久久久久久久久久久久| 特级毛片特黄久久免费看 | 1024久久高清视频| 人人摸人人摸人人干| 精品蜜乳AV免费观看| 9久久久久久| 精品制服美女中文一区二区三区| 日韩中文字幕av在线播放| 超碰人人乐97| 亚洲另类在线观看| 久久久久国产精品片区无码直播| 亚洲综合另类小说色区亚洲成av人片在www | 无码久久亚洲高清,| 亚洲资源一区| 96精品久久久| 亚洲一二三四区在线免费看视频| 熟女欧美日韩综合婷婷| 日本不卡高清免v欧美日韩在线观看| 久久香蕉网| av资源在线播放天堂| 亚洲欧美日韩精品久久久一区二区| 成人a级高清视频在线观看| 国产精品人妻无码久久久老鸭窝| 97狠狠| 啊啊啊啊好多水| 亚91网| 欲色综合| 黄色成年| 91性网| 久久久久久久久一区二区三区| 一卡二卡三卡| 日本 情色 1区| AV女优男人的天堂| 蜜臀久久99精品久久久久久酒店| 竹菊一区二区三区AV线| 午夜福利合集| 岛国在线国产| 久久久久久亚洲精品不卡人乳| 色999五月色| 五月天婷婷色色| 首页亚洲国产高跟丝袜诱惑视频| 久热大香蕉| 熟女精品一区二区三区| 屌色在线97视频| 国产农村妇女一区二区| 97色五月天完| 欧洲Au麻豆| 国产美女口爆吞精|