




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上編譯方法實(shí)驗(yàn)報(bào)告姓 名學(xué) 號(hào)班 級(jí)指 導(dǎo) 教 師實(shí)驗(yàn)名稱中間代碼生成器的設(shè)計(jì)開 設(shè) 學(xué) 期實(shí) 驗(yàn) 時(shí) 間第周評(píng) 定 成 績(jī)?cè)u(píng)定人簽字評(píng) 定 日 期2011年10月專心-專注-專業(yè)一、 實(shí)驗(yàn)?zāi)康氖煜に阈g(shù)表達(dá)式的語(yǔ)法分析與中間代碼生成原理。二、 實(shí)驗(yàn)內(nèi)容(1)設(shè)計(jì)語(yǔ)法制導(dǎo)翻譯生成表達(dá)式的四元式的算法;(2)編寫代碼并上機(jī)調(diào)試運(yùn)行通過。輸入算術(shù)表達(dá)式;輸出語(yǔ)法分析結(jié)果;相應(yīng)的四元式序列。(3)設(shè)計(jì)LL(1)分析法或LR(0)分析法的屬性翻譯文法,并根據(jù)這些屬性翻譯文法,使用擴(kuò)展的語(yǔ)法分析器實(shí)現(xiàn)語(yǔ)法制導(dǎo)翻譯。三、 實(shí)驗(yàn)原理及基本步驟算術(shù)表達(dá)式文法:G(E): E à
2、 E 0 T | T T à T 1 F | FF à i | (E)文法變換:G(E) E à T 0 T T à F 1 FF à i | (E)屬性翻譯文法:E à T 0 “push(SYN, w)” T “QUAT” T à F 1 “push(SYN, w)” F “QUAT”F à i “push(SEM, entry(w)” | (E)其中:push(SYN, w) 當(dāng)前單詞w入算符棧SYN;push(SEM, entry(w) 當(dāng)前w在符號(hào)表中的入口值壓入語(yǔ)義棧SEM; QUAT 生成四元式函數(shù)
3、iT = newtemp; iiQTj =( SYNk, SEMs-1, SEMs, T); j+; iiipop( SYN, _ ); pop( SEM, _ ); pop( SEM, _ ); push( SEM, T );遞歸下降子程序:數(shù)據(jù)結(jié)構(gòu):SYN 算符棧;SEM 語(yǔ)義棧;四、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 使用遞歸的結(jié)構(gòu)進(jìn)行四元式的設(shè)計(jì),同時(shí),運(yùn)用堆棧結(jié)構(gòu)將四元式的輸出序列打印出來(lái)while ( expi='+' | expi='-')syn+i_syn=expi; /push(SYN,w)i+; /read(w)T();quat();while ( expi=&
4、#39;*' | expi='/')syn+i_syn=expi; /push(SYN,w)i+; /read(w)F();quat();void quat()strcpy(qtj,"(, , , )"); /QTj:=(SYNk,SEMs-1,SEMs,temp);qtj1=syni_syn;qtj3=semi_sem-1;qtj5=semi_sem;qtj7=temp;j+;i_syn-; /pop(SYN);i_sem-; /pop(SEM);i_sem-; /pop(SEM);sem+i_sem=temp; /push(SEM,temp);
5、temp+;五、 關(guān)鍵代碼分析(帶注釋)及運(yùn)行結(jié)果#include <iostream>#include "string.h"#include "stdio.h"using namespace std;char syn10; /文法符號(hào)棧int i_syn;char sem10; /運(yùn)算對(duì)象棧int i_sem;char exp50; /算術(shù)表達(dá)式區(qū)int i;char qt3015; /四元式區(qū)int j=0;char temp='q' /臨時(shí)變量,取值為r-zint E();int T();int F();void qua
6、t(); /生成四元式函數(shù)int main(int argc, char* argv)printf("please input your expression:"); scanf("%s",exp); /輸入四元式i=0; /read(w) E();if (expi='0')for (i=0;i<j;i+) /輸出四元式序列printf("%sn",qti);elseprintf("err");return 0;int E()T();while ( expi='+' | exp
7、i='-')syn+i_syn=expi; /push(SYN,w)i+; /read(w)T();quat();return 1;int T()F();while ( expi='*' | expi='/')syn+i_syn=expi; /push(SYN,w)i+; /read(w)F();quat();return 1;int F()if ( expi='(')i+; /read(w)E();if ( expi!=')')printf("err");return 0;else if (e
8、xpi>='a' && expi<='p')|(expi>='0' && expi<='9')sem+i_sem=expi; /push(SEM,w)elseprintf("err");return 0;i+; /read(w)return 1;void quat()strcpy(qtj,"( , , , )"); /QTj:=(SYNk,SEMs-1,SEMs,temp);qtj1=syni_syn;qtj3=semi_sem-1;q
9、tj5=semi_sem;qtj7=temp;j+;i_syn-; /pop(SYN);i_sem-; /pop(SEM);i_sem-; /pop(SEM);sem+i_sem=temp; /push(SEM,temp); temp+;六、 總結(jié)與分析我們知道,定義一種語(yǔ)言除了要求定義語(yǔ)法外,還要求定義語(yǔ)義,即對(duì)語(yǔ)言的各種語(yǔ)法單位賦予具體的意義。語(yǔ)義分析的任務(wù)是首先對(duì)每種語(yǔ)法單位進(jìn)行靜態(tài)的語(yǔ)義審查,然后分析其含義,并用另一種語(yǔ)言形式,即比源語(yǔ)言更加接近于目標(biāo)語(yǔ)言的一種中間代碼來(lái)進(jìn)行描述這種語(yǔ)言。因此,中間代碼就顯得十分重要,它關(guān)系著整個(gè)程序語(yǔ)言的正確編譯與否,同時(shí)也是進(jìn)行下一步編譯的重要先決
10、條件。七、 實(shí)驗(yàn)思考題(1)自頂向下法(推導(dǎo)法)從開始符號(hào)出發(fā),采用推導(dǎo)運(yùn)算,試圖自頂向下構(gòu)造語(yǔ)法樹。 自底向上法(歸約法) 從給定的符號(hào)串出發(fā),采用歸約運(yùn)算,試圖自底向上構(gòu)造語(yǔ)法樹。(2)遞歸下降子程序法:遞歸子程序法屬于自頂向下語(yǔ)法分析方法。故又名遞歸下降法。要求文法是LL(1)文法。 LL(1)分析法:LL(1)分析法是指從左到右掃描(第一個(gè) L) 、最左推導(dǎo)(第二個(gè) L)和只查看一個(gè)當(dāng)前符號(hào)(括號(hào)中的 1)之意;LL(1)分析法又稱預(yù)測(cè)分析法,屬于自頂向下確定性語(yǔ)法分析方法。要求文法是LL(1)文法。(3)相同點(diǎn):都要求文法是LL(1)文法;都是自頂向下的分析方法;都通過分析下個(gè)字符來(lái)判斷該進(jìn)入哪個(gè)狀態(tài)或者調(diào)用哪個(gè)函數(shù)。 不同點(diǎn):LL(1)分析法先建立起預(yù)測(cè)分析表,通過對(duì)分析棧的不斷操作(出棧,入棧)來(lái)進(jìn)行;遞歸下降子程序法是通過函數(shù)間的函數(shù)調(diào)用來(lái)實(shí)現(xiàn)不同狀態(tài)間的轉(zhuǎn)換,并簡(jiǎn)化了代碼。(4)語(yǔ)法制導(dǎo)翻譯是在語(yǔ)法分析過程中,隨著分析(推導(dǎo)或歸約)的逐步進(jìn)展,每識(shí)別出一個(gè)語(yǔ)法結(jié)構(gòu),根據(jù)文法的每個(gè)規(guī)則所對(duì)應(yīng)的語(yǔ)義子程序進(jìn)行翻譯的方法;核心技術(shù)是構(gòu)造屬性翻譯文法。(5)假定:SEM(m)- 語(yǔ)義棧(屬性傳遞、賦值場(chǎng)所);QTq 四元式區(qū);G(E):E -> T | E+TGEQ(+) | E-TGEQ(-) T ->
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園后勤從業(yè)人員培訓(xùn)
- 幼兒園常見病:齲齒與近視防控培訓(xùn)
- 2025至2030信貸風(fēng)險(xiǎn)行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030產(chǎn)權(quán)式酒店行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 新入職員工廉潔從業(yè)培訓(xùn)
- 商洛鎮(zhèn)安縣公立醫(yī)療衛(wèi)生機(jī)構(gòu)招聘筆試真題2024
- 客服培訓(xùn)手冊(cè)
- 區(qū)域培訓(xùn)總結(jié)
- 咸陽(yáng)市實(shí)驗(yàn)中學(xué)招聘筆試真題2024
- 木工機(jī)械培訓(xùn)
- 低空具身智能頻譜管控的研究
- 《尼爾斯騎鵝旅行記》讀書分享課件
- 2025年天津市專業(yè)人員繼續(xù)教育試題及答案3
- 北京八中分班數(shù)學(xué)試卷
- 化工生產(chǎn)班組管理
- 臨床膽汁酸檢測(cè)
- 工傷保險(xiǎn)待遇申請(qǐng)表
- 《酒店禮儀知識(shí)培訓(xùn)》課件
- 腦挫傷病因介紹
- 2024-2030年中國(guó)連鎖藥店行業(yè)市場(chǎng)發(fā)展?fàn)顩r及投資前景規(guī)劃研究報(bào)告
- 災(zāi)難事故避險(xiǎn)自救-終結(jié)性考核-國(guó)開(SC)-參考資料
評(píng)論
0/150
提交評(píng)論