freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于c語言子系統(tǒng)的詞法分析器計與實現畢業(yè)論文-在線瀏覽

2025-05-01 09:17本頁面
  

【正文】 得的文法開始符號,則表明對輸入串的分析已經成功。通常將上述過程稱為“移進 歸約”分析,它是最基本的自底向上分析過程。 7 語義分析 在完成了上述過程后編譯程序將源程序變成一種內部表示形 式,這種內部表示形式就叫做中間代碼或中間語言,它是一種結構簡單、含義明確的記號系統(tǒng)。但是,想對于詞法分析和語法分析都已有相當成熟的理論和算法,中間代碼目前還沒有一種公認的形式系統(tǒng),比較接近形式化的方法是語法制導翻譯。不同的程序語言對于名字性質的定義各有不同。有些程序語言,如 ADL沒有說明語句也沒有隱含約定,因此,符號表的性質須到目標程序運行時才能確定下來。 對于變量名、數組名和過程名而言,它們的信息欄中一般要求有下列信息: 變量 類型(整、實、雙實、布爾、字符、復、標號或指針等); 種屬(簡單變量、數組或記錄結構等); 長度(所需的存儲單元數); 相對數(存儲單元相對地址); 若為數組,則記錄其內情向量; 若為記錄結構,則把它與其分量按某種形式聯(lián)系起來; 形式參數標志; 若在 COMMON或 EQUVALENCE語句中( FORTRAN語言),把它和有關名字連接在一起;它的說明是否已處理過(即標志位“定義否”); 是否對這個變量進行過賦值(包括出現在輸人名表中)的標志位。 對于那些只使用單一符號表的簡單語言,對符號表填入新項的工作可由詞法分析程序來完成。但在某些語言中,甚至在同一過程段里允許用同一標識符標識各種不同對象。在這種情況下,使用單一符號表或由詞法分析程序負責查填符號表都是非常不 方便的。對于詞法分析程序來說,只要求它凡碰到標識符就直接送出此標識符自身即可。 類型檢查 為了進行類型檢查,編譯器需要給源程序的每一個組成成分賦予一個類型表達式。這些規(guī)則被稱為源語言的類型系統(tǒng)。原則上,如果目標代碼在保存元素值的同時保存了元素類型的信息, 任何檢查都可以動態(tài)地進行。如果編譯器可以保證它接受的程序在運行時刻不會發(fā)生類型錯誤,那么該語言的這個實現就被稱為強類型的。詞法規(guī)則與語法分析階段依據的語法規(guī)則一同構成了一個語言的語法 ,而語法則是從 形 的角度衡量一個程序是否合法。詞法分析器所處理的對象即詞法分析程序的輸入數據 ,實際上是源程序經過編譯預處理 ,去掉多余的符號后而形成的代碼 ,這樣給詞法分析帶來方便。最后概括出要實現的幾個功能流程圖如下: 輸入文件 開始 詞法分析 語法分析 類型檢查 9 詞法分析模塊設計 詞法分析程序需要完成的任務如下 : 1) 識別出源程序的各個語法單位 。 3) 過濾掉源程序中的注釋 。 我們將編譯程序的重點放在中間代碼生成階段。這部分程序主要包括兩個類: 包括兩個類: Class CTokenizer: 從一個字符串中(這個把一個文件看作是一個字符串, MFC 中 CFileCString)分離出一個一個 token,配上簡單的類型通過 NextToken()返回: define TT_EOL 39。 define TT_EOF 1 define TT_INTEGER 2 define TT_REAL 3 define TT_WORD 4 define TT_STRING 39。 define TT_CHAR 39。39。amp。 CScaner 通過一個 CMapCString, LPCSTR, enum TokenType, enum TokenType m_KeyIndex 把 CString的關鍵字和 TokenType 對應,便于查找和反向查找。一個字符串形式的源程序經過詞法分析,即被轉換為一串單詞符號。 語法分析程序以單詞形式的源程序作為輸入或分析的對象。其分析結果是識別出無語法錯誤的語法成分。 語法分析模塊的核心部分設計如下: Class CParser: 定義 CTreeNode,和 Tiny 例程類似: define MAX_CHILDREN 3 class CTreeNode { public: CTreeNode* child[ MAX_CHILDREN ]。 // point to father node CTreeNode* sibling。 NodeKind nodekind。 ExpKind exp。 enum TokenType type。 CString szScope。 // is this an array declaration int iArraySize。 通過文法及相應規(guī)則建立語法樹。` | type_specifier ID `[` NUM `]`(, ...)`。` `write` `(` expression `)` `。` expression_stmtexpression `。` expressionvar `=` expression | logic1_expression logic1_expressionlogic1_expression `||` logic2_expression | logic2_expression logic2_expression logic2_expression `amp。` simple_expression | simple_expression simple_expressionadditive_expression relop additive_expression | additive_expression relop `=` | `` | `` | `=` | `==` | `!=` additive_expression additive_expression addop term | term addop `+` | `` termterm mulop logic3_expression | logic3_expression mulop `*` | `/` | `%` logic3_expression `!` logic3_expression | factor factor`(` expression `)` | var | call | NUM varID | ID `[` expression `]` callID `(` args `)` argsargs_list | empty 13 args_listargs_list `,` expression | expression sub_poundstmtID `:` | call `。` expression `。` break_stmt`break` `。` return_stmt`return` `。` 基本樹形結構: if語句: while語句: for循環(huán)語句: 復合語句 : if 語句 表達式 語 句 語句 while 語句 表達式 語句 表達式 語句 表達式 for 語句 表達式 語句 復合語句 語句 語句 聲明 14 支持的語句及運算: 1) 數據類型: int, char void, PCode里支持 float,在 80x86 ASM里不支持 2) 語句:賦值( =), if, while, for, return, break, continue 3) 數學運算: +,-, *, / 4) 關系運算: = =, , , =, =, != 5) 邏輯運算: amp。 ||, ! 6) 支持函數的定義、調用 7) 支持復合語句 8) 注釋語句: C類型的 /* */ 和 C++類型的 // 語義分析模塊設計 語義分析的任務是根據語 義規(guī)則對識別出的各種語法成分分析其含義,進行初步翻譯。 確定類型。 語義檢查。 識別含義。 語義分析程序是在詞法分析和語義分析之后,可以由語法分析程序直接調用相應 的語義子程序進行語義處理,也可以先生成語法樹的某種表示方法,再進行語義處理。發(fā)現錯誤后如果立即停止編譯,往往會降低調式程序的效率,所以應對出現的錯誤做適當的處理,從而使編譯能繼續(xù)進行。語法分析能夠發(fā)現程序語句中的各種語法錯誤,如括號不匹配等。任何時刻發(fā)現錯誤,都應該報告錯誤信息,包括錯誤出現的位置和錯誤性質等,為程序 員調試程序提供方便。 建立符號表: 輔助類: Class LineListRec: 主要成員是 lineno,記錄某個 Token(變量或函數名)聲明或使用時的行數。 // variable name CString scope。 int memloc。 // for array checking LineListRec* lineno。 記錄每一個變量或函數名的具體情況。 函數 PrintSynbalTable( LPCTSTR lpszPathName) ,輸入文件名,通過一個遞歸函數輸出符號表到文件 lpszPathName。 類型檢測: Class CAnalyzer: 包括兩個部分: 類型匹配 : 函數或變量聲明時檢測是否已聲明,如已聲明則拋出錯誤;函數調用或變量使用時檢測是否已聲明,如未聲明則拋出錯誤。 16 界面設計考量 界 面設計需要遵循一個基本理論,其核心內容是以已有的界面設計規(guī)范為指導原則,在不破壞已有的界面交互習慣的基礎上修改創(chuàng)新。 重要的是,用戶交互界面在多年來透過操作系統(tǒng)和通用軟件已經漸漸被使用者熟悉。另一方面,通用的界面規(guī)范不一定能夠滿足程序語言分析軟件的功能要求,因為畢竟客戶是軟件開發(fā)者而不是普通的應用性使用者,因此,需要在界面設計上有一些修改與創(chuàng)新,讓編譯結果對于客戶一目了然。 測試方法: 對軟件進行測試主要方法包括: l)人工測試:個人復查、走審和會審: 2)機器測試: 黑盒測試:也稱功能測試,將軟件看作黑盒子,在完全不考慮程序內部結構和特性的情況下,測試軟件的外部特性。 白盒測試:也稱結構測試,將軟件看作一個透明的白盒子,按照程序的內部結構和處理邏輯來選定測試用例,對軟件的邏輯路徑及過程進行測試,檢查它與設計是否相符。 首先進行的是單元測試,它是對程序中的一個模塊或子系統(tǒng)進行測試,其目的是為了保證每個模塊作為一個獨立單元能夠正確運行,一般采用白盒測試,根據詳細設計的描述,從模塊內部結構出發(fā)設計測試用例。 經過組裝測試,軟件已配備完畢,而接下來的確認測試是要進一步檢查軟件是否符合軟件需求規(guī)格說明書的全部要求,因此也稱為合格性測試或驗收測試,采用的是黑盒測試方法,由于是面向用戶的,所以需要用戶的參與。它是將系統(tǒng)的所有組成部分包括軟件、 硬件、用戶以及環(huán)境現場,在用戶的直接參與下進行。 應用程序的調試是對已經編寫好的腳本語句進行查錯操作,調試程序是設計過程不可缺少的環(huán)節(jié),如果在程序編寫的過程中,發(fā)現程序運行有錯誤,可以利用程序調試工具將錯誤找出來。由于使用方便、簡單宜用,節(jié)省了設計時間和復雜的差錯工作,為開發(fā)軟件提供了有利的保障。編譯程序只能識別 ANSI C的語法,其他語法一律按照編譯錯誤執(zhí)行。第 5 章 結束語 本次開發(fā)設計是對 C語言課程、數據結構、編譯原理等一系列的課程的回顧學習。一個好的系統(tǒng)分析、設計工作,會使以后的系統(tǒng)實施順利高效的進行,從而達到事半功倍的效果,這也是我的一點心得體會吧。 對于系統(tǒng)的可擴展性,在設計前也做了充分的考慮,在設計時預留了一些余地,以便本系統(tǒng)在 C語言語法不變的情況下一直都能使用,而不需要再重新開發(fā)。 同時系統(tǒng)也存在的問題與改進方向 ,由于本人第一次開發(fā)編程語言編譯程序,經驗不足,所以存在著許多不足之處。 參考文獻 [1] 陳火旺 .程序設計語言 — 編譯原理 [M].北京:國防工業(yè)出版社 .2021. [2] 馮博琴 .編譯原理及實踐 [M].北京:機械工業(yè)出版社 .2021. [3] alfred v. [M].北京:機械工業(yè)出版社 .2021. 18 [4] andrew . 現代編譯原理 c語言描述 [M].北京:人民郵電出版社 . [5] 張素琴,呂映芝,蔣維杜,戴桂蘭 .編譯原理 .北京:清華大學出版社, 2021. [6] 孔祥芝,王昌金.基于 ALEX 的 ATLAS 詞法分析器設計與實現 [J].微計算機信息,2021(20): 6769. [7] 胡慧 ,張海 ,余瑪俐 . 類 C語言詞法分析器的設計與實現 [J]. 軟件導刊 , 2021, (21) :114116. [8] 徐明君 ,吳慶曦 ,宋方敏 . NDQJava語言詞法分析程序 [J]. 南京大學學報 (自然科學版 ), 2021, (02): 8083. [9] 梁里寧,蔡成滇 . 用 UNIXLEX/ YACC生成 PL/ 0編譯器 [J]. 暨南大學學報 (自然科學與醫(yī)學版 ), 1994, (03):4749. [10]何炎祥 .編譯原理 .2版 .華中科技大學出版社, 9JWKf wvGt YM*Jgamp。 QA9wkxFyeQ^! djsXuyUP2kNXpRWXm Aamp。849Gx^Gj qv^$UE9wEwZQcUE%amp。 gTXRm 6X4NGpP$vSTTamp。MuWFA5uxY7JnD6
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1