版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
云南大學(xué)編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:學(xué)實(shí)驗(yàn)題目:學(xué)院:專業(yè):學(xué)號(hào):姓名:信息學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)20091060064劉繼遠(yuǎn)目錄TOC\o"1-5"\h\z\o"CurrentDocument"一、實(shí)驗(yàn)?zāi)康?1\o"CurrentDocument"二、實(shí)驗(yàn)內(nèi)容 1\o"CurrentDocument"三、源程序分析 21、 程序采用的BNF 22、 根據(jù)語義要求得到對(duì)應(yīng)的翻譯模式 33、 實(shí)現(xiàn)原理 44、 文法的屬性分析 45、 過程設(shè)計(jì) 56、 子程序說明 6四、 設(shè)計(jì)的基本思想(包括修改之后的屬性文法、屬性類型\o"CurrentDocument"分析、翻譯模式) 61、增加除法運(yùn)算 62、禁止同名重復(fù)聲明 8\o"CurrentDocument"五、 結(jié)果及分析 8、實(shí)驗(yàn)?zāi)康倪M(jìn)一步理解遞歸下降分析原理和實(shí)現(xiàn)方法,理解語義分析的基本機(jī)制,掌握語義子程序的構(gòu)造方法。二、實(shí)驗(yàn)內(nèi)容將帶變量聲明的表達(dá)式翻譯為四元式序列,其中包括以下要求:?非終結(jié)符號(hào)D實(shí)現(xiàn)定義兩種類型int,real變量的聲明;非終結(jié)符號(hào)S實(shí)現(xiàn)變量之間的*,+,:=(賦值運(yùn)算)兩個(gè)關(guān)鍵字int和real變量之間的*,+,:=(賦值)運(yùn)算只能使用聲明過的變量,所以要檢查使用的變量是否聲明過。對(duì)每個(gè)*,+,:=(賦值)運(yùn)算生成一條四元式如(*,A,B,T1),其中T1是臨時(shí)變量*優(yōu)先級(jí)別高于+,*滿足左結(jié)合規(guī)則三、源程序分析這是一個(gè)簡單的包含詞法、語法、語義分析的程序:語義分析。h和語義分析.cpp。實(shí)現(xiàn)的基本原理是自頂向下分析,單遍掃描,以語法分析為核心,調(diào)用詞法分析,并實(shí)現(xiàn)語義分析。1、程序采用的BNFPfDS.D—B;DDf£B—intLIrealLLfid|L,idS—V:=EHHf;S|£E—E+T|TTfT*FIFFf(E)FfidVfid消除左遞歸之后的等價(jià)文法startfDS。DfB;DDf£BfintL|realLLfidAAf,idAAf£SfV:=EHHf;SI£EfTRRf+TRRf£TfFPPf*FPPf£Ff(E)FfidVfid2、根據(jù)語義要求得到對(duì)應(yīng)的翻譯模式startfDS.DfB;DDf£BfintL{L.type:=int}IrealL{L.type:=real}Lfid{A.Type:=L。typeenter(v。entry,L。type)}AAf,idA {A1。Type:=A。typeenter(v.entry,A。type)}Af£SfV:=:E{gen(":=",E.place,0,V.place) }HHf;SI£EfT{R.i:=T。place} R{E.place:=R.s}Rf+T{R1。i:=newtemp;gen(”+”,R.i,T.place,Rl。i)} R{R.s:=R1。s;}Rf£{Rs=R。i}TfF{P.i:=F.place} P{T。place:=P。s}Pf*F{pl。i:=newtemp;gen("*", P。i,F.place,T)} P {P.s:=pl.s;}{P.s=P.i}F-(E){F。place:=E。place}Ffid{F.place:=position(id)}Vfid{V。place:=position(id)}3、實(shí)現(xiàn)原理基于翻譯模式的自上而下語義處理(翻譯)對(duì)每個(gè)非終結(jié)符A,構(gòu)造一個(gè)函數(shù),以A的每個(gè)繼承屬性為形參,以A的綜合屬性為返回值(若有多個(gè)綜合屬性,可返回記錄類型的值)。如同預(yù)測分析程序的構(gòu)造,該函數(shù)代碼的流程是根據(jù)當(dāng)前的輸入符號(hào)來決定調(diào)用哪個(gè)產(chǎn)生式。與每個(gè)產(chǎn)生式相關(guān)的代碼根據(jù)產(chǎn)生式右端的終結(jié)符,非終結(jié)符,和語義規(guī)則集(語義動(dòng)作),依從左到右的次序完成下列工作:對(duì)終結(jié)符X,保存其綜合屬性x的值至專為X.x而聲明的變量;然后調(diào)用匹配終結(jié)符(match_token)和取下一輸入符號(hào)(next_token)的函數(shù);對(duì)非終結(jié)符B,利用相應(yīng)于B的函數(shù)調(diào)用產(chǎn)生賦值語句c:=B(b1,b2,…,bk),其中變量bl,b2,…,bk對(duì)應(yīng)B的各繼承屬性,變量c對(duì)應(yīng)B的綜合屬性對(duì)語義規(guī)則集,直接copy其中每一語義規(guī)則(動(dòng)作)來產(chǎn)生代碼,只是將對(duì)屬性的訪問替換為對(duì)相應(yīng)變量的訪問。4、文法的屬性分析文法符號(hào)屬性綜合或繼承含義start無D無B無LL。type繼承類型AA。type繼承類型S無EE.place綜合指向變量或臨時(shí)變量的指針(用整數(shù)實(shí)現(xiàn))RR。i繼承同上R.s綜合同上TT.place繼承同上PP。i繼承同上P。s綜合同上FF。place綜合同上VV.place綜合同上5、過程設(shè)計(jì)intgetsym(); //讀一個(gè)單詞voidenter(enumsymboltype);//登記符號(hào)表voidinit();intposition(char*idt);//查詢符號(hào)表用函數(shù),返回在符號(hào)表中位置intgen(enumsymbolop,intarg1,intagr2,intresult);//生成四元式voidnewtemp()//申請(qǐng)臨時(shí)變量voidstart();voidD();voidB();voidL(enumsymboltype);voidA(enumsymboltype);voidS();voidH();intE();intR(intRi);intT();intP(intpi);intF();intV();6、子程序說明init():初始化函數(shù),主要是用于把單字符(例如:+、-、*、/)賦值一個(gè)symbol.getsym():把文件中的一個(gè)字符或者一個(gè)字符串分類成各種類型,用sym表示。enter():把聲明過的變量保存到table[tx]這個(gè)結(jié)構(gòu)體數(shù)組中.position():查找名字的位置,找到則返回在名字表中的位置,否則返回0。gen(): 生成中間代碼,通過傳來的參數(shù)生產(chǎn)四元式。start():開始對(duì)整個(gè)文件的語法語義經(jīng)行分析。D()、B()、L()、A():實(shí)現(xiàn)變量的聲明,并把變量的類型和名字保存到table[tx]這個(gè)結(jié)構(gòu)體數(shù)組中.S()、H()、E()、T()、P()、R()、F()、V():實(shí)現(xiàn)后面程序運(yùn)算語句的檢查,并生成中間代碼;其中:S()是檢驗(yàn)賦值運(yùn)算;H()是執(zhí)行下一條運(yùn)算語句;E()分析賦值號(hào)后面的運(yùn)算;R()是實(shí)檢驗(yàn)+運(yùn)算;P()是檢驗(yàn)*、/運(yùn)算;F()是實(shí)現(xiàn)*、/運(yùn)算的優(yōu)先級(jí)高于+運(yùn)算,并獲得當(dāng)前位置的ID;V()獲得當(dāng)前位置的ID.四、設(shè)計(jì)的基本思想(包括修改之后的屬性文法、屬性類型分析、翻譯模式)按照擴(kuò)展要求分析:1、增加除法運(yùn)算*,/優(yōu)先級(jí)別高于+,*和/滿足左結(jié)合規(guī)則對(duì)包含除法運(yùn)算的表達(dá)式生成對(duì)應(yīng)的四元式、可以在翻譯模式中非終結(jié)符P增加一個(gè)產(chǎn)生式:P一>/F {p1.i:=newtemp;gen(”/”,P。i,F(xiàn).place,T)}P{P。s:=pl.s;},這樣就在翻譯模式中增加了‘/'運(yùn)算;、在程序中的P()函數(shù)里面模仿‘*'運(yùn)算,增加相應(yīng)的分析語句:if(sym==divid) {getsym();Fplace=F();tv=tv+1;gen(divid,pi,F(xiàn)place,tv);Ps=P(tv);}、在gen()函數(shù)里模仿*運(yùn)算,增加相應(yīng)的四元式輸出語句:if(op==divid) ///運(yùn)算{fprintf(fout,”(/,%s,%s,%s)",temp1,temp2,temp3);printf("(/,%s,%s,%s)",temp1,temp2,temp3);}這樣就在程序中增加了‘/'運(yùn)算的分析要求。2、禁止同名重復(fù)聲明所以登記符號(hào)之前要檢查有沒有同名變量聲明過。因?yàn)閠able[tx]數(shù)組就是存放聲明變量名和類型的結(jié)構(gòu)體數(shù)組,可以在enter()這個(gè)存放聲明變量的函數(shù)中,增加相應(yīng)檢驗(yàn)變量名重復(fù)的函數(shù):for(inti=l;ivtxmax;i++){ /*檢查變量是否重名*/if(strcmp(id,table[i]。name)==0){printf(”錯(cuò)誤4:變量名重復(fù).\n");exit(0);}}每次要把一個(gè)變量加入到table[tx]數(shù)組中都要檢驗(yàn)變量名是否跟table[tx]數(shù)組中已有的變量名重復(fù),重復(fù)就報(bào)錯(cuò),并跳出程序。這樣就在程序中增加了檢查重復(fù)變量名的功能。五、結(jié)果及分析1、運(yùn)行的文件a.txt內(nèi)容為:reala,b;intc,d;c:=c+d*b;d:=b*a.運(yùn)行結(jié)果為:c:\'C:\DociLB.en.tsand.Setting:s\A(i?inistrator\^?\StarterFiles\情輸人分析的丈件電亠5情輸入保存分析給杲的文件名:b-txt<*,d,h,T101^<+,c,T101,T102><:=,T102?c5<*,b,a,T1035<:=,T103,,d5恒法正確 ^Press tocontinue2、運(yùn)行文件a.txt的內(nèi)容為:reala,b;intc,d,a;c:=c+d*b;d:=b*a.運(yùn)行結(jié)果為:a"C:XDocuaenteandSetting£\Adsini£tratorX桌面YStarter斎物入分析的文住名山丄泌卓輸入的文件名=bl-txtPressanykeyt
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貸款政策居間合同范本
- 健身房裝修保修服務(wù)協(xié)議
- 快遞行業(yè)配送合同標(biāo)準(zhǔn)模板
- 2025年庭院園藝植物病蟲害防治與施工合同3篇
- 深圳2025年廣東深圳博物館勞務(wù)派遣工作人員招聘6人筆試歷年參考題庫附帶答案詳解
- 2025年度進(jìn)出口貿(mào)易合規(guī)審查合同3篇
- 安徽2025年安徽商貿(mào)職業(yè)技術(shù)學(xué)院高層次人才引進(jìn)25人筆試歷年參考題庫附帶答案詳解
- 2024年度專用藝術(shù)品買賣合同
- 廈門2025年福建廈門市公安文職人員服務(wù)中心招聘17人筆試歷年參考題庫附帶答案詳解
- 2024年起道機(jī)(齒條式千斤頂)項(xiàng)目可行性研究報(bào)告
- 房地產(chǎn)營銷策劃 -佛山龍灣壹號(hào)學(xué)區(qū)房項(xiàng)目推廣策略提案方案
- 產(chǎn)品共同研發(fā)合作協(xié)議范本5篇
- 風(fēng)水學(xué)的基礎(chǔ)知識(shí)培訓(xùn)
- 吸入療法在呼吸康復(fù)應(yīng)用中的中國專家共識(shí)2022版
- 1-35kV電纜技術(shù)參數(shù)表
- 信息科技課程標(biāo)準(zhǔn)測(2022版)考試題庫及答案
- 施工組織設(shè)計(jì)方案針對(duì)性、完整性
- 2002版干部履歷表(貴州省)
- DL∕T 1909-2018 -48V電力通信直流電源系統(tǒng)技術(shù)規(guī)范
- 2024年服裝制版師(高級(jí))職業(yè)鑒定考試復(fù)習(xí)題庫(含答案)
評(píng)論
0/150
提交評(píng)論