




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 學年 第 學期編譯原理實驗報告 學院(系): 計算機科學與工程學院 班 級: 11303070A 學 號: 11303070* 姓 名: 無名氏 指導教師: 保密式 時 間: 2016 年 7 月目錄1實驗目的12實驗內容及要求13實驗方案設計13.1 編譯系統原理介紹13.1.1 編譯程序介紹23.1.2 對所寫編譯程序的源語言的描述23.2 詞法分析程序的設計33.3 語法分析程序設計43.4 語義分析和中間代碼生成程序的設計44. 結果及測試分析44.1軟件運行環境及限制44.2測試數據說明54.3運行結果及功能說明55總結及心得體會71實驗目的根據Sample語言或者自定義的某種語言
2、,設計該語言的編譯前端。包括詞法分析,語法分析、語義分析及中間代碼生成部分。2實驗內容及要求(1)詞法分析器輸入源程序,輸出對應的token表,符號表和詞法錯誤信息。按規則拼單詞,并轉換成二元形式;濾掉空白符,跳過注釋、換行符及一些無用的符號;進行行列計數,用于指出出錯的行列號,并復制出錯部分;列表打印源程序;發現并定位詞法錯誤; (2)語法分析器輸入token串,通過語法分析,尋找其中的語法錯誤。要求能實現Sample語言或自定義語言中幾種最常見的、基本的語法單位的分析:算術表達式、布爾表達式、賦值語句、if語句、for語句、while語句、do while語句等。(3)語義分析和中間代碼生
3、成輸入token串,進行語義分析,修改符號表,尋找其中的語義錯誤,并生成中間代碼。要求能實現Sample語言或自定義語言中幾種最常見的、基本的語法單位的分析:算術表達式、布爾表達式、賦值語句、if語句、for語句、while語句、do while語句等。實驗要求:功能相對完善,有輸入、輸出描述,有測試數據,并介紹不足。3實驗方案設計3.1 編譯系統原理介紹編譯器逐行掃描高級語言程序源程序,編譯的過程如下: (1). 詞法分析識別關鍵字、字面量、標識符 (變量名、數據名)、運算符、注釋行(給人看的,一般不處理)、特殊符號(續行、語句結束、數組)等六類符號,分別歸類等待處理。(2). 語法分析一個
4、語句看作一串記號 (Token)流,由語法分析器進行處理。按照語言的文法檢查判定是否是合乎語法的句子。如果是合法句子就以內部格式保存,否則報錯。直至檢查完整個程序。(3). 語義分析語義分析器對各句子的語法做檢查:運算符兩邊類型是否相兼容;該做哪些類型轉換 (例如,實數向整數賦值要"取整");控制轉移是否到不該去的地方;是否有重名或者使語義含糊的記號,等等。如果有錯誤,則轉出錯處理,否則可以生成執行代碼。(4). 中間代碼生成中間代碼是向目標碼過渡的一種編碼,其形式盡可能和機器的匯編語言相似,以便下一步的代碼生成。但中間碼不涉及具體機器的操作碼和地址碼。采用中間碼的好處是可
5、以在中間碼上做優化。(5). 優化對中間碼程序做局部優化和全局 (整個程序)優化,目的是使運行更快,占用空間最小。局部優化是合并冗余操作,簡化計算,例如x:=0可用一條"清零"指令替換。全局優化包括改進循環、減少調用次數和快速地址算法等。(6). 代碼生成由代碼生成器生成目標機器的目標碼 (或匯編)程序,其中包括數據分段、選定寄存器等工作,然后生成機器可執行的代碼。3.1.1 編譯程序介紹編譯程序是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬于采用生成性實現途徑實現的翻譯程序。它以高級程序設計語言書寫的源程序作為輸入,而以匯編語
6、言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。3.1.2 對所寫編譯程序的源語言的描述 Sample語言是一種類PASCAL語言,他以賦值語句為基礎,包括順序、條件和循環三種結構。有變量說明和常量說明,有多種數據類型、如整型、實型、字符型等。它包括如下一些語法成分:(1). 數據類型:整型、布爾型、實型和字符類型。(2). 表達式:可進行算術、布爾表達式的運算。(3). 說明語句:常量說明(用const定義)、變量說明(用var定義)。(4). 賦值語句。(5). 控制語句:if語句、while語句,re
7、peat語句和for循環語句。(6). Begin end復合語句。(7). 程序(program)語句和結束(end.)語句。3.2 詞法分析程序的設計圖 1 詞法分析總流程詞法分析將源程序讀入一個個的字符,根據一定的構詞規則,識別出各類有用的單詞。當輸入字母時,開始識別標識符或關鍵宇,邊拼寫邊從緩沖區讀入下一符號,當讀入一非字母數字符號時,標識符識別完成,但已多讀入一個符號,所以列記數回退。然后查關鍵字表,判斷拼出的符號串是否為關鍵字。若是關鍵字,輸出其種別碼。否則識別的單詞就是標識符,同時輸出標識符及其種別碼。當輸入數字時,開始識別整數或實數。邊拼寫邊讀入下一符號,當遇到“.”時,還要繼
8、續拼寫該常數(實數情況)。如果遇到E,要識別帶指數的常數,當遇到其它非數字符號時,數字常數拼寫完畢,列計數也要退1。輸出常數及其種別碼。當輸入“/”時,開始識別注解或除號,若是注解時,最后兩個連續讀出的符號是“*/”,不需再讀下一符號,列計數不變。當判定是除號“/”時,已多讀入一字符,列計數1,輸出“/”的種別碼。3.3 語法分析程序設計圖 2 語法分析總流程不斷地讀入token文件中的單詞,根據不同的語句,使用不同的方法進行分析,直到token文件的結束。程序頭部以program開頭,變量說明以var開頭,常量說明是以const開頭的,從begin開始就是可執行語句,可執行語句分為五種:fo
9、r語句(以for語句開頭),while語句(以while開頭),if語句(以if開頭),repeat語句(以repeat開頭),賦值語句(以標識符開頭) 。每當讀到前導詞,表明一個新的語法結構的開始,以此識別該語法單位是否符合定義。3.4 語義分析和中間代碼生成程序的設計4. 結果及測試分析4.1軟件運行環境及限制程序是使用C#語言編寫的,開發軟件是VS2013。VS是一個基本完整的開發工具集,它包括了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。所寫的目標代碼適用于微軟支持的所有平臺。使用VS調試程序會很方便,可以實時觀察程序的運行狀態。用VS
10、制作界面會顯得非常地簡單,但是也存在一定的缺點。VS的集成度比較高,所以要修改封裝好的一些函數不會太簡單。4.2測試數據說明輸入數據:program example1;const a:=1;b:=3;c:='fasdf'var a,b,c:integer; x:char;begin a:=3; b:=12; if(a+3*c>b) then c:=3; while a>b do c:=5; repeat a:=10; until a+3>b; for x:=1+2 to 3 do b:=100;end.這是sample語言的一個比較簡單的測試程序,它有著sam
11、ple語言最基本的格式,如函數頭部、常量說明、變量說明、執行語句、條件語句,循環語句等等。用這個測試程序來觀察程序的效果。4.3運行結果及功能說明圖 3 詞法分析結果圖3是正常詞法分析的結果,可以看出,程序會將每個單詞顯示到token文件顯示區,同時顯示單詞在源文件的位置。并且會將標識符和常量添加到符號表并顯示到符號表顯示區。下面的圖4是當測試程序有錯誤時的情況。圖 4 詞法分析有錯誤的程序可以看到當我在b:=12;后面加上一個 “”后,會出現報錯。并且if語句位置上少了個“)”也會出現報錯,實現了詞法分析的相關功能。圖 5語法分析結果從圖5看到,語法分析能夠正確地處理token串,并分析出各
12、類語句,直到程序的結束。輸出結果的顯示層次感不強,沒有按照一級級地縮進,這里是語法分析的一點問題。下面的圖6是語法分析處理錯誤的功能演示。圖 6 語法分析錯誤處理我修改了程序的部分地方,通過語法分析就能夠檢測到錯誤的地方,并顯示出錯誤可能的原因,并且能夠在錯誤的前提下繼續執行后面的程序,直到語法分析結束。5總結及心得體會通過編譯原理實驗課,我掌握了什么是編譯程序,編譯程序工作的基本過程及其各階段的基本任務,熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程、構造工具及其相關的技術對課本上的知識有了更深的理解,課本上的知識是機械的,表面的。通過把該算法的內容,算法的執行順序在計算機上實現,把原來以為很深奧的書本知識變的更為簡單,對實驗原理有更深的理解。然而,我認為自己在實驗課上做的并不夠好。首先,在總體實驗內容來說,我沒能夠完成所有的內容,只完成了詞法分析和語法分析的程序;其次,就完成的兩個實驗來說,功能上還是不夠完善,有一些bug。最后,運行界面上過于簡陋,不夠美觀。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 食品營養學知識考點集
- 自行成交手房買賣協議
- 快遞配送智能調度系統合作協議
- (完整版)Excel-VBA實例教程
- 青島市房屋買賣居間合同
- 顧客忠誠度培養新零售市場營銷的關鍵
- 顧客體驗重構新零售的未來趨勢
- 顧客體驗設計在商業中心新零售中的應用
- 顧客旅程映射在新零售體驗設計中的應用
- 青少年職業規劃與價值觀塑造的關聯性研究
- 課題開題報告:心理健康教育與中小學學科教學融合的研究
- 2025年高考作文素材積累之現實批判:“異化”
- 四川省綿陽市名校2025屆中考生物五模試卷含解析
- 勞務公司派遣員工合同范本
- 2025年心理衛生協會心理咨詢師資格認證考試指導題庫(含答案)
- 科技公司研發部的安全操作規范
- 食品生產企業食品安全信用檔案管理制度
- 人口老齡化背景下居民養老金融資產配置影響因素研究
- 出版社編輯聘用合同模板
- 冀少版(2024新版)七年級下冊生物期末復習知識點提綱詳細版
- 2025年臨床醫師定期考核必考復習題庫及答案(900題)
評論
0/150
提交評論