




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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á)式的語法分析與中間代碼生成原理。二、 實(shí)驗(yàn)內(nèi)容(1)設(shè)計(jì)語法制導(dǎo)翻譯生成表達(dá)式的四元式的算法;(2)編寫代碼并上機(jī)調(diào)試運(yùn)行通過。輸入算術(shù)表達(dá)式;輸出語法分析結(jié)果;相應(yīng)的四元式序列。(3)設(shè)計(jì)LL(1)分析法或LR(0)分析法的屬性翻譯文法,并根據(jù)這些屬性翻譯文法,使用擴(kuò)展的語法分析器實(shí)現(xiàn)語法制導(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)表中的入口值壓入語義棧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è)計(jì) 使用遞歸的結(jié)構(gòu)進(jìn)行四元式的設(shè)計(jì),同時(shí),運(yùn)用堆棧結(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)鍵代碼分析(帶注釋)及運(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é)與分析我們知道,定義一種語言除了要求定義語法外,還要求定義語義,即對(duì)語言的各種語法單位賦予具體的意義。語義分析的任務(wù)是首先對(duì)每種語法單位進(jìn)行靜態(tài)的語義審查,然后分析其含義,并用另一種語言形式,即比源語言更加接近于目標(biāo)語言的一種中間代碼來進(jìn)行描述這種語言。因此,中間代碼就顯得十分重要,它關(guān)系著整個(gè)程序語言的正確編譯與否,同時(shí)也是進(jìn)行下一步編譯的重要先決
10、條件。七、 實(shí)驗(yàn)思考題(1)自頂向下法(推導(dǎo)法)從開始符號(hào)出發(fā),采用推導(dǎo)運(yùn)算,試圖自頂向下構(gòu)造語法樹。 自底向上法(歸約法) 從給定的符號(hào)串出發(fā),采用歸約運(yùn)算,試圖自底向上構(gòu)造語法樹。(2)遞歸下降子程序法:遞歸子程序法屬于自頂向下語法分析方法。故又名遞歸下降法。要求文法是LL(1)文法。 LL(1)分析法:LL(1)分析法是指從左到右掃描(第一個(gè) L) 、最左推導(dǎo)(第二個(gè) L)和只查看一個(gè)當(dāng)前符號(hào)(括號(hào)中的 1)之意;LL(1)分析法又稱預(yù)測(cè)分析法,屬于自頂向下確定性語法分析方法。要求文法是LL(1)文法。(3)相同點(diǎn):都要求文法是LL(1)文法;都是自頂向下的分析方法;都通過分析下個(gè)字符來判斷該進(jìn)入哪個(gè)狀態(tài)或者調(diào)用哪個(gè)函數(shù)。 不同點(diǎn):LL(1)分析法先建立起預(yù)測(cè)分析表,通過對(duì)分析棧的不斷操作(出棧,入棧)來進(jìn)行;遞歸下降子程序法是通過函數(shù)間的函數(shù)調(diào)用來實(shí)現(xiàn)不同狀態(tài)間的轉(zhuǎn)換,并簡(jiǎn)化了代碼。(4)語法制導(dǎo)翻譯是在語法分析過程中,隨著分析(推導(dǎo)或歸約)的逐步進(jìn)展,每識(shí)別出一個(gè)語法結(jié)構(gòu),根據(jù)文法的每個(gè)規(guī)則所對(duì)應(yīng)的語義子程序進(jìn)行翻譯的方法;核心技術(shù)是構(gòu)造屬性翻譯文法。(5)假定:SEM(m)- 語義棧(屬性傳遞、賦值場(chǎng)所);QTq 四元式區(qū);G(E):E -> T | E+TGEQ(+) | E-TGEQ(-) T ->
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高危兒健康教育
- 外科腫瘤護(hù)理評(píng)估
- 老年拐杖椅子設(shè)計(jì)
- 輸液治療的信息化管理
- 小學(xué)心理健康課程體系構(gòu)建
- 2025年涂膠紡織物、帶項(xiàng)目申請(qǐng)報(bào)告
- 2025年航天器及其運(yùn)載工具、零件項(xiàng)目提案報(bào)告
- 【白城】2025年吉林白城洮南市事業(yè)單位面向春季應(yīng)征入伍畢業(yè)生招聘11人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 【博爾塔拉】2025年新疆博爾塔拉職業(yè)技術(shù)學(xué)院招聘專任教師147人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 音素的教學(xué)課件
- 養(yǎng)老護(hù)理員四級(jí)理論試題及答案
- 脊柱內(nèi)鏡技術(shù)
- 采購(gòu)詢價(jià)單模板
- 心理測(cè)量課件-常見量表介紹與應(yīng)用
- 軍人申請(qǐng)病退評(píng)殘醫(yī)學(xué)鑒定審查表
- 隆鼻術(shù)后護(hù)理查房
- 關(guān)于進(jìn)境食用水生動(dòng)物指定監(jiān)管場(chǎng)地名單
- 新版譯林高中英語必修一單詞表默寫版(直接打印)
- 中式面點(diǎn)師培訓(xùn)課件
- 2023年主任醫(yī)師(正高)-中醫(yī)內(nèi)科學(xué)(正高)考試歷年真題集錦附答案
- 農(nóng)村分家協(xié)議書4篇
評(píng)論
0/150
提交評(píng)論