編譯方法實(shí)驗(yàn)報(bào)告(中間代碼生成器的設(shè)計(jì))_第1頁(yè)
編譯方法實(shí)驗(yàn)報(bào)告(中間代碼生成器的設(shè)計(jì))_第2頁(yè)
編譯方法實(shí)驗(yàn)報(bào)告(中間代碼生成器的設(shè)計(jì))_第3頁(yè)
編譯方法實(shí)驗(yàn)報(bào)告(中間代碼生成器的設(shè)計(jì))_第4頁(yè)
編譯方法實(shí)驗(yàn)報(bào)告(中間代碼生成器的設(shè)計(jì))_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論