編譯原理實驗報告分析_1_第1頁
編譯原理實驗報告分析_1_第2頁
編譯原理實驗報告分析_1_第3頁
編譯原理實驗報告分析_1_第4頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、編譯原理實驗報告分析學(xué)年第學(xué)期編譯原理實驗報告學(xué)院(系):計算機科學(xué)與工程學(xué)院班級:11303070a學(xué)號:11303070*姓名:無名氏指導(dǎo)教師:保密式時間:2016 年7 月目錄 1實驗?zāi)康?(1) 2實驗內(nèi)容及要求 (1)3實驗方案設(shè)計 (1)3.1 編譯系統(tǒng)原理介紹 (1)3.1.1 編譯程序介紹 (2)3.1.2 對所寫編譯程序的源語言的描述 (2)3.2 詞法分析程序的設(shè)計 (3)3.3 語法分析程序設(shè)計 (4)3.4 語義分析和中間代碼生成程序的設(shè)計 (4)4. 結(jié)果及測試分析 .44.1軟件運行環(huán)境及限制 (4)4.2測試數(shù)據(jù)說明 (5)4.3運行結(jié)果及功能說明 (5)5總結(jié)及

2、心得體會 (7)1實驗?zāi)康母鶕?jù)sample語言或者自定義的某種語言,設(shè)計該語言的編譯前端。包括詞法分 析,語法分析、語義分析及中間代碼生成部分。 2實驗內(nèi)容及要求(1)詞法分析器輸入源程序,輸出對應(yīng)的token表,符號表和詞法錯誤信息。按規(guī)則拼單詞,并轉(zhuǎn)換成二元形式;濾掉空白符,跳過注釋、換行符及一些無用的符號;進行行列計數(shù),用于指出出錯的行列號,并復(fù)制出錯部分;列表打印源程序;發(fā)現(xiàn)并定位詞法錯誤;(2)語法分析器輸入token串,通過語法分析,尋找其中的語法錯誤。要求能實現(xiàn)sample語言或自定義語言中幾種最常見的、基本的語法單位的分析:算術(shù)表達式、布爾表達式、賦值語句、if語句、for語句

3、、while語句、do while語句等。(3)語義分析和中間代碼生成輸入token串,進行語義分析,修改符號表,尋找其中的語義錯誤,并生成中間代碼。要求能實現(xiàn)sample語言或自定義語言中幾種最常見的、基本的語法單位的分析:算術(shù)表達式、布爾表達式、賦值語句、if語句、for語句、while 語句、do while語句等。實驗要求:功能相對完善,有輸入、輸出描述,有測試數(shù)據(jù),并介紹不足。3實驗方案設(shè)計3.1 編譯系統(tǒng)原理介紹編譯器逐行掃描高級語言程序源程序,編譯的過程如下:(1).詞法分析識別關(guān)鍵字、字面量、標識符(變量名、數(shù)據(jù)名)、運算符、注釋行(給人看的,一般不處理)、特殊符號(續(xù)行、語句

4、結(jié)束、數(shù)組)等六類符號,分別歸類等待處理。(2).語法分析一個語句看作一串記號(token)流,由語法分析器進行處理。按照語言的文法檢查判定是否是合乎語法的句子。如果是合法句子就以內(nèi)部格式保存,否則報錯。直至檢查完整個程序。(3).語義分析語義分析器對各句子的語法做檢查:運算符兩邊類型是否相兼容;該做哪些類型轉(zhuǎn)換(例如,實數(shù)向整數(shù)賦值要取整);控制轉(zhuǎn)移是否到不該去的地方;是 1否有重名或者使語義含糊的記號,等等。如果有錯誤,則轉(zhuǎn)出錯處理,否則可以生成執(zhí)行代碼。(4).中間代碼生成中間代碼是向目標碼過渡的一種編碼,其形式盡可能和機器的匯編語言相似,以便下一步的代碼生成。但中間碼不涉及具體機器的操

5、作碼和地址碼。采用中間碼的好處是可以在中間碼上做優(yōu)化。(5).優(yōu)化對中間碼程序做局部優(yōu)化和全局(整個程序)優(yōu)化,目的是使運行更快,占用空間最小。局部優(yōu)化是合并冗余操作,簡化計算,例如x:=0可用一條清零指令替 換。全局優(yōu)化包括改進循環(huán)、減少調(diào)用次數(shù)和快速地址算法等。 (6).代碼生成由代碼生成器生成目標機器的目標碼(或匯編)程序,其中包括數(shù)據(jù)分段、選定寄存器等工作,然后生成機器可執(zhí)行的代碼。3.1.1 編譯程序介紹編譯程序是指把用高級程序設(shè)計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序?qū)儆诓捎蒙尚詫崿F(xiàn)途徑實現(xiàn)的翻譯程序。它以高級程序設(shè)計語言書寫的源程序作為輸入,而以

6、匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經(jīng)歷運行階段,以便在運行程序的支持下運行,加工初始數(shù)據(jù),算出所需的計算結(jié)果。3.1.2 對所寫編譯程序的源語言的描述sample語言是一種類pascal語言,他以賦值語句為基礎(chǔ),包括順序、條件和循環(huán)三種結(jié)構(gòu)。有變量說明和常量說明,有多種數(shù)據(jù)類型、如整型、實型、字符型等。它包括如下一些語法成分:(1).數(shù)據(jù)類型:整型、布爾型、實型和字符類型。(2).表達式:可進行算術(shù)、布爾表達式的運算。(3).說明語句:常量說明(用const定義)、變量說明(用var定義)。(4).賦值語句。(5).控制語句:if語句、while語句,repea

7、t語句和for循環(huán)語句。(6).begin end復(fù)合語句。(7).程序(program)語句和結(jié)束(end.)語句。23.2 詞法分析程序的設(shè)計初始化打開源文件源程序結(jié)束一行一行地處理用stri存儲讀到的每個單詞根據(jù)第一個字符結(jié)束進行分類字母識別數(shù)值常數(shù)識別運算符識別標識符 /處理注釋和除識別界符isbound(stri)isoperator(stri)isdigit(stri)關(guān)鍵字是關(guān)鍵字在界符表中在符號注釋中出錯處erro插入到符號中詞法分析總流程圖 1詞法分析將源程序讀入一個個的字符,根據(jù)一定的構(gòu)詞規(guī)則,識別出各類有用的單詞。當輸入字母時,開始識別標識符或關(guān)鍵宇,邊拼寫邊從緩沖區(qū)讀入

8、下一符號,當讀入一非字母數(shù)字符號時,標識符識別完成,但已多讀入一個符號,所以列記數(shù)回退。然后查關(guān)鍵字表,判斷拼出的符號串是否為關(guān)鍵字。若是關(guān)鍵字,輸出其種別碼。否則識別的單詞就是標識符,同時輸出標識符及其種別碼。當輸入數(shù)字時,開始識別整數(shù)或?qū)崝?shù)。邊拼寫邊讀入下一符號,當遇到“.”時,還要繼續(xù)拼寫該常數(shù)(實數(shù)情況)。如果遇到e,要識別帶指數(shù)的常數(shù),當遇到其它非數(shù)字符號時,數(shù)字常數(shù)拼寫完畢,列計數(shù)也要退1。輸出常數(shù)及其種別碼。當輸入“/”時,開始識別注解或除號,若是注解時,最后兩個連續(xù)讀出的符號是“*/”,不需再讀下一符號,列計數(shù)不變。當判定是除號“/”時,已多讀入一字符,列計數(shù)1,輸出“/”的種

9、別碼。33.3 語法分析程序設(shè)計 token文件program處理賦值語標識符句處理程序頭處理常量說const部明endfor處理程序結(jié)varbegin處理for語句束部分varbegin根據(jù)讀取的處理變量說if前導(dǎo)字對語begin處理if語句明輸出文件句進行分類while處理while語其他語法分析總流程 2 圖不斷地讀入token文件中的單詞,根據(jù)不同的語句,使用不同的方法進行分析,直到token文件的結(jié)束。程序頭部以program開頭,變量說明以var開頭,常量說明是以const開頭的,從begin開始就是可執(zhí)行語句,可執(zhí)行語句分為五種:for語句(以for語句開頭),while語句(以

10、while開頭),if語句(以if開頭),repeat語句(以repeat開頭),賦值語句(以標識符開頭) 。每當讀到前導(dǎo)詞,表明一個新的語法結(jié)構(gòu)的開始,以此識別該語法單位是否符合定義。 3.4 語義分析和中間代碼生成程序的設(shè)計4. 結(jié)果及測試分析4.1軟件運行環(huán)境及限制程序是使用c#語言編寫的,開發(fā)軟件是vs2013。vs是一個基本完整的開發(fā)工具集,它包括了整個軟件生命周期中所需要的大部分工具,如uml工具、代碼管控工具、集成開發(fā)環(huán)境(ide)等等。所寫的目標代碼適用于微軟支持的所有平臺。使用vs調(diào)試程序會很方便,可以實時觀察程序的運行狀態(tài)。用vs制作界面會顯得非常地簡單,但是也存在一定的缺

11、點。vs的集成度比較高,所以要修改封裝好的一些函數(shù)不會太簡單。44.2測試數(shù)據(jù)說明輸入數(shù)據(jù):program example1;consta:=1;b:=3;c:=fasdf;vara,b,c:integer;x:char;begina:=3;b:=12;if(a+3*cb) then c:=3;while ab do c:=5;repeat a:=10; until a+3b;for x:=1+2 to 3 do b:=100;end.這是sample語言的一個比較簡單的測試程序,它有著sample語言最基本的格式,如函數(shù)頭部、常量說明、變量說明、執(zhí)行語句、條件語句,循環(huán)語句等等。用這個測試程

12、序來觀察程序的效果。4.3運行結(jié)果及功能說明 圖 3 詞法分析結(jié)果 圖3是正常詞法分析的結(jié)果,可以看出,程序會將每個單詞顯示到token文件顯示區(qū),同時顯示單詞在源文件的位置。并且會將標識符和常量添加到符號表 5并顯示到符號表顯示區(qū)。下面的圖4是當測試程序有錯誤時的情況。圖 4 詞法分析有錯誤的程序可以看到當我在b:=12;后面加上一個“”后,會出現(xiàn)報錯。并且if語句位置上少了個“)”也會出現(xiàn)報錯,實現(xiàn)了詞法分析的相關(guān)功能。語法分析結(jié)果圖 5 6從圖5看到,語法分析能夠正確地處理token串,并分析出各類語句,直到程序的結(jié)束。輸出結(jié)果的顯示層次感不強,沒有按照一級級地縮進,這里是語法分析的一點

13、問題。下面的圖6是語法分析處理錯誤的功能演示。 圖 6 語法分析錯誤處理 我修改了程序的部分地方,通過語法分析就能夠檢測到錯誤的地方,并顯示出錯誤可能的原因,并且能夠在錯誤的前提下繼續(xù)執(zhí)行后面的程序,直到語法分析結(jié)束。5總結(jié)及心得體會通過編譯原理實驗課,我掌握了什么是編譯程序,編譯程序工作的基本過程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程、構(gòu)造工具及其相關(guān)的技術(shù)對課本上的知識有了更深的理解,課本上的知識是機械的,表面的。通過把該算法的內(nèi)容,算法的執(zhí)行順序在計算機上實現(xiàn),把原來以為很深奧的書本知識變的更為簡單,對實驗原理有更深的理解。然而,我認為自己在實驗課上做的并不夠好。首先,在總體實驗內(nèi)容來說,我沒能夠完成所有的內(nèi)容,只完成了詞法分析和語法分析的程序;其次,就完成的兩個實驗來說,功能上還是不夠完善,有一些bug。最后,運行界面上過于簡陋

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論