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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上編譯方法實驗報告姓 名學(xué) 號班 級指 導(dǎo) 教 師實驗名稱中間代碼生成器的設(shè)計開 設(shè) 學(xué) 期實 驗 時 間第周評 定 成 績評定人簽字評 定 日 期2011年10月專心-專注-專業(yè)一、 實驗?zāi)康氖煜に阈g(shù)表達式的語法分析與中間代碼生成原理。二、 實驗內(nèi)容(1)設(shè)計語法制導(dǎo)翻譯生成表達式的四元式的算法;(2)編寫代碼并上機調(diào)試運行通過。輸入算術(shù)表達式;輸出語法分析結(jié)果;相應(yīng)的四元式序列。(3)設(shè)計LL(1)分析法或LR(0)分析法的屬性翻譯文法,并根據(jù)這些屬性翻譯文法,使用擴展的語法分析器實現(xiàn)語法制導(dǎo)翻譯。三、 實驗原理及基本步驟算術(shù)表達式文法: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) 當前單詞w入算符棧SYN;push(SEM, entry(w) 當前w在符號表中的入口值壓入語義棧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 語義棧;四、 數(shù)據(jù)結(jié)構(gòu)設(shè)計 使用遞歸的結(jié)構(gòu)進行四元式的設(shè)計,同時,運用堆棧結(jié)構(gòu)將四元式的輸出序列打印出來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)鍵代碼分析(帶注釋)及運行結(jié)果#include <iostream>#include "string.h"#include "stdio.h"using namespace std;char syn10; /文法符號棧int i_syn;char sem10; /運算對象棧int i_sem;char exp50; /算術(shù)表達式區(qū)int i;char qt3015; /四元式區(qū)int j=0;char temp='q' /臨時變量,取值為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é)與分析我們知道,定義一種語言除了要求定義語法外,還要求定義語義,即對語言的各種語法單位賦予具體的意義。語義分析的任務(wù)是首先對每種語法單位進行靜態(tài)的語義審查,然后分析其含義,并用另一種語言形式,即比源語言更加接近于目標語言的一種中間代碼來進行描述這種語言。因此,中間代碼就顯得十分重要,它關(guān)系著整個程序語言的正確編譯與否,同時也是進行下一步編譯的重要先決

10、條件。七、 實驗思考題(1)自頂向下法(推導(dǎo)法)從開始符號出發(fā),采用推導(dǎo)運算,試圖自頂向下構(gòu)造語法樹。 自底向上法(歸約法) 從給定的符號串出發(fā),采用歸約運算,試圖自底向上構(gòu)造語法樹。(2)遞歸下降子程序法:遞歸子程序法屬于自頂向下語法分析方法。故又名遞歸下降法。要求文法是LL(1)文法。 LL(1)分析法:LL(1)分析法是指從左到右掃描(第一個 L) 、最左推導(dǎo)(第二個 L)和只查看一個當前符號(括號中的 1)之意;LL(1)分析法又稱預(yù)測分析法,屬于自頂向下確定性語法分析方法。要求文法是LL(1)文法。(3)相同點:都要求文法是LL(1)文法;都是自頂向下的分析方法;都通過分析下個字符來判斷該進入哪個狀態(tài)或者調(diào)用哪個函數(shù)。 不同點:LL(1)分析法先建立起預(yù)測分析表,通過對分析棧的不斷操作(出棧,入棧)來進行;遞歸下降子程序法是通過函數(shù)間的函數(shù)調(diào)用來實現(xiàn)不同狀態(tài)間的轉(zhuǎn)換,并簡化了代碼。(4)語法制導(dǎo)翻譯是在語法分析過程中,隨著分析(推導(dǎo)或歸約)的逐步進展,每識別出一個語法結(jié)構(gòu),根據(jù)文法的每個規(guī)則所對應(yīng)的語義子程序進行翻譯的方法;核心技術(shù)是構(gòu)造屬性翻譯文法。(5)假定:SEM(m)- 語義棧(屬性傳遞、賦值場所);QTq 四元式區(qū);G(E):E -> T | E+TGEQ(+) | E-TGEQ(-) T ->

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論