【正文】
告 34 圖 95 DFA大于號狀態(tài)判斷 H11 1H 圖 96 DFA漢字狀態(tài)判斷 H | P | | D | b”1“1312 圖 97 DFA雙引號狀態(tài)判斷 H | P | | D | b回車1‘1514 圖 98 DFA單引號狀態(tài)判斷 DFA 狀態(tài)轉(zhuǎn)化表 A d ‘ “ p H D . b 1 2 3 14 12 5 6 9 11 2 2 2 3 3 4 4 4 6 8 7 9 10 11 11 12 12 12 13 12 12 12 12 12 12 14 14 14 14 14 14 14 15 14 14 表 91 DFA狀態(tài)轉(zhuǎn)化表 編譯原理綜合設(shè)計報告 35 成員屬性表 表 92 成員屬性表 Readword 流程圖 Re ad Wor d指針指向尾部 返回空True讀入一個字符雙引號雙引號讀入一個字符空格 指針后移返回查 DFA 表終態(tài) 圖 99 ReadWord 流程圖 名稱 屬性 作用 ReadWord 函數(shù) 將整個句子分解成單詞 LookNextWord 函數(shù) 察看下一個單詞 GiveType 判斷函數(shù) 判斷所取類型的值 Class_initialize 構(gòu)造函數(shù) 初始化數(shù)據(jù) 編譯原理綜合設(shè)計報告 36 10編輯器設(shè)計 Ru nit () Co mman d 1 _ Cli ck () Fo r m _ Key Down ( in KeyC od e : I nteg er , in Shif t : I nteg er ) Fo r m _ Lo ad () Fo r m _ Re s ize () Fo r m _ Unloa d ( in Can ce l : I nteg er ) mnu Deb ug _ Cli ck ()+ mnu Start _ Cli ck () tbTo olBa r _ Bu tt on Cli ck ( in Butt on : Bu tt on ) mnu HelpAb ou t _ Cli ck () mnu HelpC on tents _ Cli ck () mnu ViewOptions _ Cli ck () mnu ViewStatusBar _ Cli ck () mnu ViewTo olba r _ Cli ck () mnu FileEx it _ Cli ck () mnu FileSa ve As _ Cli ck () mnu FileSa ve _ Cli ck () mnu FileClose _ Cli ck () mnu FileOpe n _ Cli ck () mnu FileNew _ Cli ck () FileNew () FileSa ve () FileSa ve As () FileWr it e ( in name : Str ing )+ FileRe ad ( in name : Str ing ) Timer 1 _ Timer () Timer 2 _ Timer () txtHi de _ Ch an ge () txtSou r ce _ Ch an ge () s ho wLine () txtSou r ce _ Cli ck () txtSou r ce _ Key Press ( in KeyAscii : I nteg er ) Co de Fo r mat () txtSou r ce _ Mou s eDo wn ( in Butt on : I nteg er , in Shif t : I nteg er , in X : Sing le , in Y : Sing le ) txtSou r ce _ Mou s eUp ( in Butt on : I nteg er , in Shif t : I nteg er , in X : Sing le , in Y : Sing le )f rmMain 設(shè)計要求 1. 實現(xiàn) Windows 下單文檔應(yīng)用程序 (SDI)編輯器,能新建、打開、保存、另存 basic 源文件。 設(shè)計思想 1. 利用 VB 自帶的單文檔應(yīng)用程序向?qū)ё詣由纱绑w和菜單。 5. 當(dāng)拖動編輯框內(nèi)的文字的時候,不響應(yīng)代碼格式化的操作。 2. 當(dāng)調(diào)試的時候,到達斷點所在的行,自動暫停。 6. 程序進入死循環(huán)時能手動暫停程序執(zhí)行。 4. 設(shè)局全局暫停標志,一來可以在程序進入死循環(huán)時更改這個標志暫停程序,二來可以在程序起始時暫停用于單步調(diào)試。 不合法 Exit Function End If t = Vars(name) AddVarName name If 0 Then value, name Else (name) 編譯原理綜合設(shè)計報告 46 value, name End If End Function Public Function getVar(ByVal name As String) On Error Resume Next Dim v() As String v = Split(KEYWORD, ,) If inArray(v, name) Then 59, , Exit Function End If t = Vars(name) AddVarName name If 0 Then 0, name getVar = 0 Else getVar = t End If End Function Private Function AddVarName(ByVal name As String) For i = 1 To If VarNames(i) = name Then Exit Function Next name End Function 源代碼 Private s As New Collection Public Sub Push(ByVal Item As Variant) If = 0 Then Item Else Item, , 1 End If End Sub Public Function Pop() t = (1) 1 Pop = t End Function 編譯原理綜合設(shè)計報告 。變量賦值 On Error Resume Next Dim v() As String v = Split(KEYWORD, ,) If inArray(v, name) Then 59, , 變量名 amp。 編譯原理綜合設(shè)計報告 44 圖 111 調(diào)試窗口設(shè)計 2. 建立一個全局的斷點列表,然后在解釋每一行之前都檢查此行是否在斷點列表內(nèi)來決定是否暫停運行。 4. 暫停時能查看所有變量,以及變量的值。 7. 當(dāng)鼠標點擊或者鍵盤有鍵按下時,計算出當(dāng)前行數(shù)并顯示在狀態(tài)欄中。 3. 設(shè)置文檔修改標志,用于當(dāng)文件內(nèi) 容修改時提示是否保存。 3. 實現(xiàn)自動縮進動能,方便源代碼時格式自動整理。為后面的運算和運行服務(wù)。 FindBorder 函數(shù) 函數(shù):用于從一個字符串內(nèi)找出起始的逗號或者分號,忽略雙引號和括號內(nèi)的內(nèi)容。 類成員 名稱 屬性 作用 Class_Initialize 過程 設(shè)置運算符優(yōu)先級 logic 函數(shù) 邏輯運算 exp 函數(shù) 表達式初始化 logic_it 函數(shù) 生成逆波蘭式 Calculate 函數(shù) 對出棧內(nèi)容進行計算 myVar 函數(shù) 讀入表達式中變量的值 isKey 函數(shù) 判斷操 作符是否合法 表 32 clsExpPlus 類成員 編譯原理綜合設(shè)計報告 10 流程圖 生成逆波蘭式部分 開 始初 始 化 運 算 符 棧 s k o p初 始 化 逆 波 蘭 區(qū) s k e x p初 始 化 表 達 式 s將 表 達 式 送 入 s 中從 s 中 取 出 一 個 字 符“ ” ?操 作 數(shù) ?“ ( ” ?“ ) ” ?運 算 符 ?操 作 數(shù) 送s k e x p“ ( ” 入 棧棧 內(nèi) 運 算 符 = 棧 外運 算 符棧 外 運 算 符 入 棧棧 內(nèi) 元 素 送s k e x p結(jié) 束是否是否是否是是否是否棧 內(nèi) 運 算 符 送S k o p將 表 達 式 中 部 分 運 算符 進 行 替 換將 表 達 式 中 進 行 初 始化計 算 部 分 圖 31 逆波蘭式生成流程圖 編譯原理綜合設(shè)計報告 11 對表達式初始化部分 開 始將 表 達 式 以 “ = ”為 分 隔 符 分 開是 邏 輯 運 算 ?變 量 合 法 ?計 算 部 分提 示 出 錯結(jié) 束否是否是 圖 32 表達式初始化流程圖 計算部分 編譯原理綜合設(shè)計報告 12 開 始是 “ + ” ?是 “ ” ?是 “ * ” ?是 “ / ” ?是 乘 方 ?從 s k o p 讀 入 運 算 符是 絕 對 值 ?是 開 方 ?是 “ N O T ” ?從 s k e x p