版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)年第學(xué)期編譯原理》實(shí)驗(yàn)報(bào)告學(xué)院(系):計(jì)算機(jī)科學(xué)與工程學(xué)院班級(jí):11303070A學(xué)號(hào):*x**x*姓名:無名氏指導(dǎo)教師:保密式目錄TOC\o"1-5"\h\z\o"CurrentDocument"1.實(shí)驗(yàn)?zāi)康?1\o"CurrentDocument"2.實(shí)驗(yàn)內(nèi)容及要求 1\o"CurrentDocument"3.實(shí)驗(yàn)方案設(shè)計(jì) 1編譯系統(tǒng)原理介紹 1編譯程序介紹 2對(duì)所寫編譯程序的源語言的描述 2詞法分析程序的設(shè)計(jì) 3語法分析程序設(shè)計(jì) 4語義分析和中間代碼生成程序的設(shè)計(jì) 4\o"CurrentDocument"4.結(jié)果及測(cè)試分析 44.1軟件運(yùn)行環(huán)境及限制 44.2測(cè)試數(shù)據(jù)說明 54.3運(yùn)行結(jié)果及功能說明 5\o"CurrentDocument"5.總結(jié)及心得體會(huì) 71.實(shí)驗(yàn)?zāi)康母鶕?jù)Sample語言或者自定義的某種語言,設(shè)計(jì)該語言的編譯前端。包括詞法分析,語法分析、語義分析及中間代碼生成部分。2.實(shí)驗(yàn)內(nèi)容及要求(1)詞法分析器輸入源程序,輸出對(duì)應(yīng)的token表,符號(hào)表和詞法錯(cuò)誤信息。按規(guī)則拼單詞,并轉(zhuǎn)換成二元形式;濾掉空白符,跳過注釋、換行符及一些無用的符號(hào);進(jìn)行行列計(jì)數(shù),用于指出出錯(cuò)的行列號(hào),并復(fù)制出錯(cuò)部分;列表打印源程序;發(fā)現(xiàn)并定位詞法錯(cuò)誤;(2) 語法分析器輸入token串,通過語法分析,尋找其中的語法錯(cuò)誤。要求能實(shí)現(xiàn)Sample語言或自定義語言中幾種最常見的、基本的語法單位的分析:算術(shù)表達(dá)式、布爾表達(dá)式、賦值語句、f語句、for語句、while語句、dowhile語句等。(3) 語義分析和中間代碼生成輸入token串,進(jìn)行語義分析,修改符號(hào)表,尋找其中的語義錯(cuò)誤,并生成中間代碼。要求能實(shí)現(xiàn)Sample語言或自定義語言中幾種最常見的、基本的語法單位的分析:算術(shù)表達(dá)式、布爾表達(dá)式、賦值語句、訐語句、for語句、while語句、dowhile語句等。實(shí)驗(yàn)要求:功能相對(duì)完善,有輸入、輸出描述,有測(cè)試數(shù)據(jù),并介紹不足。3.實(shí)驗(yàn)方案設(shè)計(jì)編譯系統(tǒng)原理介紹編譯器逐行掃描高級(jí)語言程序源程序,編譯的過程如下:(1) .詞法分析識(shí)別關(guān)鍵字、字面量、標(biāo)識(shí)符(變量名、數(shù)據(jù)名)、運(yùn)算符、注釋行(給人看的,一般不處理)、特殊符號(hào)(續(xù)行、語句結(jié)束、數(shù)組)等六類符號(hào),分別歸類等待處理。(2) .語法分析一個(gè)語句看作一串記號(hào)(Token)流,由語法分析器進(jìn)行處理。按照語言的文法檢查判定是否是合乎語法的句子。如果是合法句子就以內(nèi)部格式保存,否則報(bào)錯(cuò)。直至檢查完整個(gè)程序。(3) .語義分析語義分析器對(duì)各句子的語法做檢查:運(yùn)算符兩邊類型是否相兼容;該做哪些類型轉(zhuǎn)換(例如,實(shí)數(shù)向整數(shù)賦值要"取整");控制轉(zhuǎn)移是否到不該去的地方;是否有重名或者使語義含糊的記號(hào),等等。如果有錯(cuò)誤,則轉(zhuǎn)出錯(cuò)處理,否則可以生成執(zhí)行代碼。(4).中間代碼生成中間代碼是向目標(biāo)碼過渡的一種編碼,其形式盡可能和機(jī)器的匯編語言相似,以便下一步的代碼生成。但中間碼不涉及具體機(jī)器的操作碼和地址碼。采用中間碼的好處是可以在中間碼上做優(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í)行的代碼。編譯程序介紹編譯程序是指把用高級(jí)程序設(shè)計(jì)語言書寫的源程序,翻譯成等價(jià)的機(jī)器語言格式目標(biāo)程序的翻譯程序。編譯程序?qū)儆诓捎蒙尚詫?shí)現(xiàn)途徑實(shí)現(xiàn)的翻譯程序。它以高級(jí)程序設(shè)計(jì)語言書寫的源程序作為輸入,而以匯編語言或機(jī)器語言表示的目標(biāo)程序作為輸出。編譯出的目標(biāo)程序通常還要經(jīng)歷運(yùn)行階段,以便在運(yùn)行程序的支持下運(yùn)行,加工初始數(shù)據(jù),算出所需的計(jì)算結(jié)果。對(duì)所寫編譯程序的源語言的描述Sample語言是一種類PASCAL語言,他以賦值語句為基礎(chǔ),包括順序、條件和循環(huán)三種結(jié)構(gòu)。有變量說明和常量說明,有多種數(shù)據(jù)類型、如整型、實(shí)型、字符型等。它包括如下一些語法成分:.數(shù)據(jù)類型:整型、布爾型、實(shí)型和字符類型。.表達(dá)式:可進(jìn)行算術(shù)、布爾表達(dá)式的運(yùn)算。.說明語句:常量說明(用const定義)、變量說明(用var定義)。.賦值語句。.控制語句:if語句、while語句,repeat語句和for循環(huán)語句。.Begin…end復(fù)合語句。.程序(program)語句和結(jié)束(end.)語句。
詞法分析程序的設(shè)計(jì)圖1詞法分析總流程詞法分析將源程序讀入一個(gè)個(gè)的字符,根據(jù)一定的構(gòu)詞規(guī)則,識(shí)別出各類有用的單詞。當(dāng)輸入字母時(shí),開始識(shí)別標(biāo)識(shí)符或關(guān)鍵宇,邊拼寫邊從緩沖區(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í),開始識(shí)別整數(shù)或?qū)崝?shù)。邊拼寫邊讀入下一符號(hào),當(dāng)遇到“.”時(shí),還要繼續(xù)拼寫該常數(shù)(實(shí)數(shù)情況)。如果遇到E,要識(shí)別帶指數(shù)的常數(shù),當(dāng)遇到其它非數(shù)字符號(hào)時(shí),數(shù)字常數(shù)拼寫完畢,列計(jì)數(shù)也要退1。輸出常數(shù)及其種別碼。當(dāng)輸入“/”時(shí),開始識(shí)別注解或除號(hào),若是注解時(shí),最后兩個(gè)連續(xù)讀出的符號(hào)是“*/”,不需再讀下一符號(hào),列計(jì)數(shù)不變。當(dāng)判定是除號(hào)“/”時(shí),已多讀入一字符,列計(jì)數(shù)—1,輸出“/”的種別碼。
語法分析程序設(shè)計(jì)Pro;ram.標(biāo)識(shí)符.處理賦值語.句處理程序頭.部const處理常量說
、明.beginvarFor處理for語句endvarbegin處理程序結(jié)
.Pro;ram.標(biāo)識(shí)符.處理賦值語.句處理程序頭.部const處理常量說
、明.beginvarFor處理for語句endvarbegin處理程序結(jié)
.束部分.處理變量說.明begin■根據(jù)讀取的'前導(dǎo)字對(duì)語句進(jìn)行分類if處理if語句輸出文件while處理while語、句,■‘其他圖2語法分析總流程不斷地讀入token文件中的單詞,根據(jù)不同的語句,使用不同的方法進(jìn)行分析,直到token文件的結(jié)束。程序頭部以program開頭,變量說明以var開頭,常量說明是以const開頭的,從begin開始就是可執(zhí)行語句,可執(zhí)行語句分為五種:for語句(以for語句開頭),while語句(以while開頭),if語句(以訐開頭),repeat語句(以repeat開頭),賦值語句(以標(biāo)識(shí)符開頭)。每當(dāng)讀到前導(dǎo)詞,表明一個(gè)新的語法結(jié)構(gòu)的開始,以此識(shí)別該語法單位是否符合定義。語義分析和中間代碼生成程序的設(shè)計(jì)4.結(jié)果及測(cè)試分析4.1軟件運(yùn)行環(huán)境及限制程序是使用C#語言編寫的,開發(fā)軟件是VS2013。VS是一個(gè)基本完整的開發(fā)工具集,它包括了整個(gè)軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等等。所寫的目標(biāo)代碼適用于微軟支持的所有平臺(tái)。使用VS調(diào)試程序會(huì)很方便,可以實(shí)時(shí)觀察程序的運(yùn)行狀態(tài)。用VS制作界面會(huì)顯得非常地簡(jiǎn)單,但是也存在一定的缺點(diǎn)。VS的集成度比較高,所以要修改封裝好的一些函數(shù)不會(huì)太簡(jiǎn)單。
4.2測(cè)試數(shù)據(jù)說明輸入數(shù)據(jù):programexamplel;consta:=1;b:=3;c:='fasdf;vara,b,c:integer;x:char;begina:=3;b:=12;if(a+3*c>b)thenc:=3;whilea>bdoc:=5;repeata:=10;untila+3>b;forx:=1+2to3dob:=100;end.這是sample語言的一個(gè)比較簡(jiǎn)單的測(cè)試程序,它有著sample語言最基本的格式,如函數(shù)頭部、常量說明、變量說明、執(zhí)行語句、條件語句,循環(huán)語句等等。用這個(gè)測(cè)試程序來觀察程序的效果。4.3運(yùn)行結(jié)果及功能說明希I序漓示裁 -r-4蜩問洲忻器亙老諄去術(shù)器荀單鯉荀單鯉簡(jiǎn)甲器任*卞0I.pro產(chǎn)&jtdT-atr1荀單鯉荀單鯉簡(jiǎn)甲器任*卞0I.pro產(chǎn)&jtdT-atr1:4躺?3433舲3433骷34:j4]朝4]購2344D344£134Doaizt3.T;t:T;i;;*fasif,T:ar益lbc:intc>g*T:朮:ckar;丘或IIa=3:L:=12;1E(443*?jtken■?:=3;vihilEa)tdoc:=5,rereata=10:initiL時(shí)3汕:forsc:=1+2七o3doI:=LDj;edJ-“蚪我松樹対光松理付號(hào)丟信息祕(mì)蚪我粒蚪如*:1leiitkB卄34h134L13GI1343135■:134E34言:9行】L列圖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ò)。并且訐語句位置上少了個(gè)“)”也會(huì)出現(xiàn)報(bào)錯(cuò),實(shí)現(xiàn)了詞法分析的相關(guān)功能。圖5語法分析結(jié)果
從圖5看到,語法分析能夠正確地處理token串,并分析出各類語句,直到程序的結(jié)束。輸出結(jié)果的顯示層次感不強(qiáng),沒有按照一級(jí)級(jí)地縮進(jìn),這里是語法分析的一點(diǎn)問題。下面的圖6是語法分析處理錯(cuò)誤的功能演示。圖6語法分析錯(cuò)誤處理我修改了程序的部分地方,通過語法分析就能夠檢測(cè)到錯(cuò)誤的地方,并顯示出錯(cuò)誤可能的原因,并且能夠在錯(cuò)誤的前提下繼續(xù)執(zhí)行后面的程序,直到語法分析結(jié)束。5?總結(jié)及心得體會(huì)通過編譯原理實(shí)驗(yàn)課,我掌握了什么是編譯程序,編譯程序工作的基本過程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程、構(gòu)造工具及其相關(guān)的技術(shù)對(duì)課本上的知識(shí)有了更深的理解,課本上的知識(shí)是機(jī)械的,表面的。通過把該算法的內(nèi)容,算法的執(zhí)行順序在計(jì)算機(jī)上實(shí)現(xiàn),把原來以為很深?yuàn)W的書本知識(shí)變的更為簡(jiǎn)單,對(duì)實(shí)驗(yàn)原理有更深的理解。然而,我認(rèn)為自己在實(shí)驗(yàn)課上做的并不夠好。首先,在總體實(shí)驗(yàn)內(nèi)容來說,我沒能夠完成所有的內(nèi)容,只完成了詞法分析和語法分析的程序;其次,就完成的兩個(gè)實(shí)驗(yàn)來說,功能上還
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度消防檢查表
- 租房期間乙方加裝電梯合同(2篇)
- 咨詢服務(wù)合同(2篇)
- 西昌學(xué)院《測(cè)量學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 保安合同續(xù)簽條款
- 白糖預(yù)拌粉買賣合同
- 22文言文二則 伯牙鼓琴 說課稿-2024-2025學(xué)年語文六年級(jí)上冊(cè)統(tǒng)編版
- 18《文言文二則》第1課時(shí)(說課稿)-2023-2024學(xué)年統(tǒng)編版語文四年級(jí)下冊(cè)
- 2《立在地球邊上放號(hào)》《紅燭》《峨日朵雪峰之側(cè)》《致云雀》群文閱讀 說課稿 2024-2025學(xué)年統(tǒng)編版高中語文必修上冊(cè)
- 川教版(2019)小學(xué)信息技三年級(jí)上冊(cè) 第二單元第1節(jié)《輕點(diǎn)鼠標(biāo)》說課稿及反思
- 防水工程施工報(bào)價(jià)表
- 反擊式破碎機(jī)說明書
- 共青團(tuán)中山市12355青少年綜合服務(wù)平臺(tái)建設(shè)方案
- 索道年度自檢報(bào)告
- 二年級(jí)數(shù)學(xué)小故事(課堂PPT)
- 項(xiàng)目安全管理工作流程圖
- 國(guó)家開放大學(xué)《生產(chǎn)與運(yùn)作管理》形考作業(yè)1-4參考答案
- 中國(guó)壓力容器標(biāo)準(zhǔn)與美國(guó)ASME規(guī)范的比較(DOC 8頁)
- 起重機(jī)軌道修理施工方案(共18頁)
- 交警大隊(duì)協(xié)勤人員管理制度-規(guī)章制度文書
- 內(nèi)部控制評(píng)價(jià)的內(nèi)容內(nèi)部控制評(píng)價(jià)制度
評(píng)論
0/150
提交評(píng)論