



版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編譯原理實(shí)驗(yàn)報(bào)告總結(jié)學(xué)年第學(xué)期編譯原理實(shí)驗(yàn)報(bào)告學(xué)院(系):計(jì)算機(jī)科學(xué)與工程學(xué)院班級(jí):11303070a學(xué)號(hào):11303070*姓名:無(wú)名氏指導(dǎo)教師:保密式時(shí)間:2016 年7 月 目錄 1實(shí)驗(yàn)?zāi)康?(1)2實(shí)驗(yàn)內(nèi)容及要求 (1)3實(shí)驗(yàn)方案設(shè)計(jì) (1)3.1 編譯系統(tǒng)原理介紹 (1)3.1.1 編譯程序介紹 (2)3.1.2 對(duì)所寫(xiě)編譯程序的源語(yǔ)言的描述 (2)3.2 詞法分析程序的設(shè)計(jì) (3)3.3 語(yǔ)法分析程序設(shè)計(jì) (4)3.4 語(yǔ)義分析和中間代碼生成程序的設(shè)計(jì) (4)4. 結(jié)果及測(cè)試分析 (4)4.1軟件運(yùn)行環(huán)境及限制 (4)4.2測(cè)試數(shù)據(jù)說(shuō)明 (5)4.3運(yùn)行結(jié)果及功能說(shuō)明 (5)5總結(jié)
2、及心得體會(huì) (7) 1實(shí)驗(yàn)?zāi)康?根據(jù)sample語(yǔ)言或者自定義的某種語(yǔ)言,設(shè)計(jì)該語(yǔ)言的編譯前端。包括詞法分析,語(yǔ)法分析、語(yǔ)義分析及中間代碼生成部分。2實(shí)驗(yàn)內(nèi)容及要求(1)詞法分析器輸入源程序,輸出對(duì)應(yīng)的token表,符號(hào)表和詞法錯(cuò)誤信息。按規(guī)則拼單詞,并轉(zhuǎn)換成二元形式;濾掉空白符,跳過(guò)注釋、換行符及一些無(wú)用的符號(hào);進(jìn)行行列計(jì)數(shù),用于指出出錯(cuò)的行列號(hào),并復(fù)制出錯(cuò)部分;列表打印源程序;發(fā)現(xiàn)并定位詞法錯(cuò)誤;(2)語(yǔ)法分析器輸入token串,通過(guò)語(yǔ)法分析,尋找其中的語(yǔ)法錯(cuò)誤。要求能實(shí)現(xiàn)sample 語(yǔ)言或自定義語(yǔ)言中幾種最常見(jiàn)的、基本的語(yǔ)法單位的分析:算術(shù)表達(dá)式、布爾表達(dá)式、賦值語(yǔ)句、if語(yǔ)句、for
3、語(yǔ)句、while語(yǔ)句、do while語(yǔ)句等。(3)語(yǔ)義分析和中間代碼生成輸入token串,進(jìn)行語(yǔ)義分析,修改符號(hào)表,尋找其中的語(yǔ)義錯(cuò)誤,并生成中間代碼。要求能實(shí)現(xiàn)sample語(yǔ)言或自定義語(yǔ)言中幾種最常見(jiàn)的、基本的語(yǔ)法單位的分析:算術(shù)表達(dá)式、布爾表達(dá)式、賦值語(yǔ)句、if語(yǔ)句、for語(yǔ)句、while 語(yǔ)句、do while語(yǔ)句等。實(shí)驗(yàn)要求:功能相對(duì)完善,有輸入、輸出描述,有測(cè)試數(shù)據(jù),并介紹不足。3實(shí)驗(yàn)方案設(shè)計(jì)3.1 編譯系統(tǒng)原理介紹編譯器逐行掃描高級(jí)語(yǔ)言程序源程序,編譯的過(guò)程如下:(1).詞法分析識(shí)別關(guān)鍵字、字面量、標(biāo)識(shí)符(變量名、數(shù)據(jù)名)、運(yùn)算符、注釋行(給人看的,一般不處理)、特殊符號(hào)(續(xù)行、
4、語(yǔ)句結(jié)束、數(shù)組)等六類符號(hào),分別歸類等待處理。(2).語(yǔ)法分析一個(gè)語(yǔ)句看作一串記號(hào)(token)流,由語(yǔ)法分析器進(jìn)行處理。按照語(yǔ)言的文法檢查判定是否是合乎語(yǔ)法的句子。如果是合法句子就以內(nèi)部格式保存,否則報(bào)錯(cuò)。直至檢查完整個(gè)程序。(3).語(yǔ)義分析語(yǔ)義分析器對(duì)各句子的語(yǔ)法做檢查:運(yùn)算符兩邊類型是否相兼容;該做哪些類型轉(zhuǎn)換(例如,實(shí)數(shù)向整數(shù)賦值要取整);控制轉(zhuǎn)移是否到不該去的地方;是 否有重名或者使語(yǔ)義含糊的記號(hào),等等。如果有錯(cuò)誤,則轉(zhuǎn)出錯(cuò)處理,否則可以生成執(zhí)行代碼。 (4).中間代碼生成中間代碼是向目標(biāo)碼過(guò)渡的一種編碼,其形式盡可能和機(jī)器的匯編語(yǔ)言相似,以便下一步的代碼生成。但中間碼不涉及具體機(jī)器
5、的操作碼和地址碼。采用中間碼的好處是可以在中間碼上做優(yōu)化。(5).優(yōu)化對(duì)中間碼程序做局部?jī)?yōu)化和全局(整個(gè)程序)優(yōu)化,目的是使運(yùn)行更快,占用空間最小。局部?jī)?yōu)化是合并冗余操作,簡(jiǎn)化計(jì)算,例如x:=0可用一條清零指令替換。全局優(yōu)化包括改進(jìn)循環(huán)、減少調(diào)用次數(shù)和快速地址算法等。(6).代碼生成由代碼生成器生成目標(biāo)機(jī)器的目標(biāo)碼(或匯編)程序,其中包括數(shù)據(jù)分段、選定寄存器等工作,然后生成機(jī)器可執(zhí)行的代碼。3.1.1 編譯程序介紹編譯程序是指把用高級(jí)程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的源程序,翻譯成等價(jià)的機(jī)器語(yǔ)言格式目標(biāo)程序的翻譯程序。編譯程序?qū)儆诓捎蒙尚詫?shí)現(xiàn)途徑實(shí)現(xiàn)的翻譯程序。它以高級(jí)程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的源程序作為輸入,而以
6、匯編語(yǔ)言或機(jī)器語(yǔ)言表示的目標(biāo)程序作為輸出。編譯出的目標(biāo)程序通常還要經(jīng)歷運(yùn)行階段,以便在運(yùn)行程序的支持下運(yùn)行,加工初始數(shù)據(jù),算出所需的計(jì)算結(jié)果。3.1.2 對(duì)所寫(xiě)編譯程序的源語(yǔ)言的描述sample語(yǔ)言是一種類pascal語(yǔ)言,他以賦值語(yǔ)句為基礎(chǔ),包括順序、條件和循環(huán)三種結(jié)構(gòu)。有變量說(shuō)明和常量說(shuō)明,有多種數(shù)據(jù)類型、如整型、實(shí)型、字符型等。它包括如下一些語(yǔ)法成分:(1).數(shù)據(jù)類型:整型、布爾型、實(shí)型和字符類型。(2).表達(dá)式:可進(jìn)行算術(shù)、布爾表達(dá)式的運(yùn)算。(3).說(shuō)明語(yǔ)句:常量說(shuō)明(用const定義)、變量說(shuō)明(用var定義)。(4).賦值語(yǔ)句。(5).控制語(yǔ)句:if語(yǔ)句、while語(yǔ)句,repea
7、t語(yǔ)句和for循環(huán)語(yǔ)句。(6).begin end復(fù)合語(yǔ)句。(7).程序(program)語(yǔ)句和結(jié)束(end.)語(yǔ)句。 圖 1 詞法分析總流程詞法分析將源程序讀入一個(gè)個(gè)的字符,根據(jù)一定的構(gòu)詞規(guī)則,識(shí)別出各類有用的單詞。當(dāng)輸入字母時(shí),開(kāi)始識(shí)別標(biāo)識(shí)符或關(guān)鍵宇,邊拼寫(xiě)邊從緩沖區(qū)讀入下一符號(hào),當(dāng)讀入一非字母數(shù)字符號(hào)時(shí),標(biāo)識(shí)符識(shí)別完成,但已多讀入一個(gè)符號(hào),所以列記數(shù)回退。然后查關(guān)鍵字表,判斷拼出的符號(hào)串是否為關(guān)鍵字。若是關(guān)鍵字,輸出其種別碼。否則識(shí)別的單詞就是標(biāo)識(shí)符,同時(shí)輸出標(biāo)識(shí)符及其種別碼。當(dāng)輸入數(shù)字時(shí),開(kāi)始識(shí)別整數(shù)或?qū)崝?shù)。邊拼寫(xiě)邊讀入下一符號(hào),當(dāng)遇到“.”時(shí),還要繼續(xù)拼寫(xiě)該常數(shù)(實(shí)數(shù)情況)。如果遇到
8、e,要識(shí)別帶指數(shù)的常數(shù),當(dāng)遇到其它非數(shù)字符號(hào)時(shí),數(shù)字常數(shù)拼寫(xiě)完畢,列計(jì)數(shù)也要退1。輸出常數(shù)及其種別碼。當(dāng)輸入“/”時(shí),開(kāi)始識(shí)別注解或除號(hào),若是注解時(shí),最后兩個(gè)連續(xù)讀出的符號(hào)是“*/”,不需再讀下一符號(hào),列計(jì)數(shù)不變。當(dāng)判定是除號(hào)“/”時(shí),已多讀入一字符,列計(jì)數(shù)1,輸出“/”的種別碼。 圖 2 語(yǔ)法分析總流程不斷地讀入token文件中的單詞,根據(jù)不同的語(yǔ)句,使用不同的方法進(jìn)行分析,直到token文件的結(jié)束。程序頭部以program開(kāi)頭,變量說(shuō)明以var開(kāi)頭,常量說(shuō)明是以const開(kāi)頭的,從begin開(kāi)始就是可執(zhí)行語(yǔ)句,可執(zhí)行語(yǔ)句分為五種:for語(yǔ)句(以for語(yǔ)句開(kāi)頭),while語(yǔ)句(以while
9、開(kāi)頭),if語(yǔ)句(以if開(kāi)頭),repeat 語(yǔ)句(以repeat開(kāi)頭),賦值語(yǔ)句(以標(biāo)識(shí)符開(kāi)頭) 。每當(dāng)讀到前導(dǎo)詞,表明一個(gè)新的語(yǔ)法結(jié)構(gòu)的開(kāi)始,以此識(shí)別該語(yǔ)法單位是否符合定義。3.4 語(yǔ)義分析和中間代碼生成程序的設(shè)計(jì)4. 結(jié)果及測(cè)試分析4.1軟件運(yùn)行環(huán)境及限制程序是使用c#語(yǔ)言編寫(xiě)的,開(kāi)發(fā)軟件是vs2013。vs是一個(gè)基本完整的開(kāi)發(fā)工具集,它包括了整個(gè)軟件生命周期中所需要的大部分工具,如uml工具、代碼管控工具、集成開(kāi)發(fā)環(huán)境(ide)等等。所寫(xiě)的目標(biāo)代碼適用于微軟支持的所有平臺(tái)。使用vs調(diào)試程序會(huì)很方便,可以實(shí)時(shí)觀察程序的運(yùn)行狀態(tài)。用vs制作界面會(huì)顯得非常地簡(jiǎn)單,但是也存在一定的缺點(diǎn)。vs的
10、集成度比較高,所以要修改封裝好的一些函數(shù)不會(huì)太簡(jiǎn)單。 4.2測(cè)試數(shù)據(jù)說(shuō)明 輸入數(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語(yǔ)言的一個(gè)比較簡(jiǎn)單的測(cè)試程序,它有著sample語(yǔ)言最基本的格式,如函數(shù)頭部、常量說(shuō)明、變量說(shuō)明、執(zhí)行語(yǔ)句、條件語(yǔ)句,循環(huán)語(yǔ)句等等。用這個(gè)測(cè)試程序來(lái)觀察
11、程序的效果。4.3運(yùn)行結(jié)果及功能說(shuō)明圖 3 詞法分析結(jié)果圖3是正常詞法分析的結(jié)果,可以看出,程序會(huì)將每個(gè)單詞顯示到token文件顯示區(qū),同時(shí)顯示單詞在源文件的位置。并且會(huì)將標(biāo)識(shí)符和常量添加到符號(hào)表 并顯示到符號(hào)表顯示區(qū)。下面的圖4是當(dāng)測(cè)試程序有錯(cuò)誤時(shí)的情況。 圖 4 詞法分析有錯(cuò)誤的程序可以看到當(dāng)我在b:=12;后面加上一個(gè)“”后,會(huì)出現(xiàn)報(bào)錯(cuò)。并且if語(yǔ)句位置上少了個(gè)“)”也會(huì)出現(xiàn)報(bào)錯(cuò),實(shí)現(xiàn)了詞法分析的相關(guān)功能。圖 5語(yǔ)法分析結(jié)果 從圖5看到,語(yǔ)法分析能夠正確地處理token串,并分析出各類語(yǔ)句,直到程序的結(jié)束。輸出結(jié)果的顯示層次感不強(qiáng),沒(méi)有按照一級(jí)級(jí)地縮進(jìn),這里是語(yǔ)法分析的一點(diǎn)問(wèn)題。下面的圖
12、6是語(yǔ)法分析處理錯(cuò)誤的功能演示。 圖 6 語(yǔ)法分析錯(cuò)誤處理我修改了程序的部分地方,通過(guò)語(yǔ)法分析就能夠檢測(cè)到錯(cuò)誤的地方,并顯示出錯(cuò)誤可能的原因,并且能夠在錯(cuò)誤的前提下繼續(xù)執(zhí)行后面的程序,直到語(yǔ)法分析結(jié)束。5總結(jié)及心得體會(huì)通過(guò)編譯原理實(shí)驗(yàn)課,我掌握了什么是編譯程序,編譯程序工作的基本過(guò)程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過(guò)程、構(gòu)造工具及其相關(guān)的技術(shù)對(duì)課本上的知識(shí)有了更深的理解,課本上的知識(shí)是機(jī)械的,表面的。通過(guò)把該算法的內(nèi)容,算法的執(zhí)行順序在計(jì)算機(jī)上實(shí)現(xiàn),把原來(lái)以為很深?yuàn)W的書(shū)本知識(shí)變的更為簡(jiǎn)單,對(duì)實(shí)驗(yàn)原理有更深的理解。然而,我認(rèn)為自己在實(shí)驗(yàn)課上做的并不夠好。首先,在總體實(shí)驗(yàn)內(nèi)容來(lái)說(shuō),我沒(méi)能夠完成所有的內(nèi)容,只完成了詞法分析和語(yǔ)法分析的程序;其次,就完成的兩個(gè)實(shí)驗(yàn)來(lái)說(shuō),功能上還是不夠完善,有一些bug。最后,運(yùn)行界面上過(guò)于簡(jiǎn)陋,不夠美觀。由于時(shí)間的有限性,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年仙居縣人民醫(yī)院招聘工作人員考試真題
- 中標(biāo)后催業(yè)主簽合同范例
- 2024年新疆昌吉學(xué)院(團(tuán)隊(duì))引進(jìn)筆試真題
- 鄉(xiāng)村承包開(kāi)發(fā)合同范本
- 人員反聘合同范本
- 云梯租賃合同范本
- app開(kāi)發(fā)服務(wù)合同范本
- 勞務(wù)合同范例放牧
- 《五、標(biāo)明引用內(nèi)容的出處》教學(xué)設(shè)計(jì)教學(xué)反思-2023-2024學(xué)年初中信息技術(shù)人教版七年級(jí)上冊(cè)
- 農(nóng)村電器購(gòu)銷合同范本
- 礦山機(jī)械傷害安全培訓(xùn)
- 2025貴州省黔東南州直屬事業(yè)單位招聘202人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 鄭州2025年河南鄭州市公安機(jī)關(guān)招聘輔警1200人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年語(yǔ)文高考復(fù)習(xí)計(jì)劃解析
- 新生兒腸道病毒感染
- 2025年度專業(yè)酒店裝修承攬合同
- 2024-2024年上海市高考英語(yǔ)試題及答案
- 《從零到卓越- 創(chuàng)新與創(chuàng)業(yè)導(dǎo)論》教案
- IEC 62368-1標(biāo)準(zhǔn)解讀-中文
- 15J403-1-樓梯欄桿欄板(一)
- 《數(shù)學(xué)課程標(biāo)準(zhǔn)》義務(wù)教育2022年修訂版(原版)
評(píng)論
0/150
提交評(píng)論