編譯原理綜合性試驗報告-分析中間代碼生成程序_第1頁
編譯原理綜合性試驗報告-分析中間代碼生成程序_第2頁
編譯原理綜合性試驗報告-分析中間代碼生成程序_第3頁
編譯原理綜合性試驗報告-分析中間代碼生成程序_第4頁
編譯原理綜合性試驗報告-分析中間代碼生成程序_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、XXXXXX計算機系綜合性實驗實驗報告課程名稱編譯原理實驗學(xué)期 XXXX 至 XXXX 學(xué)年 第匕 學(xué)期學(xué)生所在系部計算機系年級 X 專業(yè)班級XXXXXX學(xué)生姓名XXX 學(xué)號 XXXXXXXXXXXX任課教師XXX實驗成績計算機系制編譯原理課程綜合性實驗報告開課實驗室:年 月日實驗題目I分析中間代碼生成程序一、實驗?zāi)繄畏治鯬L/0編譯程序的總體結(jié)構(gòu)、代碼生成的方法和過程;具體寫出一條語句的 中間代碼生成過程。二、設(shè)備與環(huán)境PC兼容機、Windows操作系統(tǒng)、Turbo Pascal軟件等。三、實驗內(nèi)容.分析PL/0程序的Block子程序,理清PL/0程序結(jié)構(gòu)和語句格式。畫出Block 子程序的

2、流程圖,寫出至少兩條 PL/0程序語句的語法格式。.分析PL/0程序的Block子程序和Gen子程序,了解代碼生成的方法和過程。 使用概要算法來描述語句的代碼生成過程。.自己編寫一個簡單的PL/0程序,能夠正確通過編譯,得到中間代碼。列出自 己編寫的源程序和編譯后得到的中間代碼。.從中選擇一個語句或表達式,寫出代碼生成的過程。要求從自己的源程序中 選擇一條語句,結(jié)合這條語句寫出語義分析和代碼生成過程。在描述這個過 程中,要說清楚每個功能有哪個子程序的哪條語句來完成,說清楚語句和參 數(shù)的含義和功能。四、實驗結(jié)果及分析(一)Block子程序分析.常量聲明的分析:常量聲明部分的語法結(jié)構(gòu)定義為如下形式

3、: - const ; - ;-id = C其中C可以是常量標(biāo)識符或字符串或整數(shù)(可帶符號)或?qū)崝?shù)(可帶符號)。常量聲明分析程序的主要任務(wù)是:.掃描整個常量聲明部分。.為被聲明的常量標(biāo)識符建立符號表項。.檢查重復(fù)的聲明。.變量聲明部分的分析:變量聲明部分的語法結(jié)構(gòu)定義為如下形式:- var- ;-:T-id,其中idList是被定義的變量標(biāo)識符序列,T是類型表達式。變量聲明分析程序的主要任務(wù)是:.掃描整個變量聲明部分,并進行語義錯誤檢查。(2),為被聲明的變量標(biāo)識符建立相應(yīng)符號表項。3.Block子程序流程圖:(二)代碼生成的方法和過程:Block子程序:首先置TX的初值,令DX=3,判讀嵌套

4、層數(shù)是否大于最允的嵌 套層數(shù),如果大于,則發(fā)出32號錯誤。小于然后讀入一個token,當(dāng)讀入的當(dāng)前token 是常量保留字,轉(zhuǎn)入常量聲明處理。如果 sym遇到逗號則反復(fù)聲明下一個常量,獲 取下一個token,聲明以當(dāng)前token為標(biāo)識符的常量。如果sym遇到分號,常量聲明 結(jié)束。獲取下一個token,當(dāng)讀入的是變量保留字,轉(zhuǎn)入變量聲明處理,過程與常量 聲明類似。當(dāng)讀入的當(dāng)前token是過程保留字時,把過程名和它所在的層次填入符號 表,遞歸調(diào)用block分析過程,當(dāng)前的層次加一。如果不是過程保留字,如果是一個 語句的開始,則進行語句處理,直至結(jié)束。Gen子程序:目標(biāo)代碼生成過程gen用于把生成的

5、目標(biāo)代碼寫入目標(biāo)代碼數(shù)組。 如果cxcxmax表示當(dāng)前生成的代碼行號大于允許的最大代碼行數(shù),輸出“program toolong”。然后,把代碼寫入目標(biāo)代碼數(shù)組的當(dāng)前 cx所指位置,移動cx指針指向下一 個空位。(三)編寫一個簡單的PL/0程序PL/0程序為:const a=10;var b,c;procedure p;beginc:=2*(1+b)end;beginif a=10 thenbeginb:=2;call p;endend.將其保存為txt格式文彳存于EB下運行后結(jié)果如下:心* Turbo Pascal7. 0pleaseinputsource progranfile name:

6、,txt0consta =10;1uar91proceduirep;1bein3c;=2*Cl*h7end8jmp1&1122int133lit124lit115lod13Gopr127opr148sto149opr101Idbegin11ifa =10then14begin15b:=2;17call 18end18end.Qjnp1101jnp122int133lit124lit115lod136opp12?opr148atu149opr1010int1511lit11012lit11013opr1814JPC11815lit1216st u1317cal1218opr10atari9t p

7、l/06enri pl/0(四)分析上述程序中c:=2*(l+w);的代碼生成過程在上述程序中,當(dāng)調(diào)用block子程序分析這段語句時,遇到 c,查符號表, 判斷是常量還是變量,入棧,遇到“:=”時,繼續(xù)讀下一字符,判斷如c,并依 次將2、1和b入棧。第一個截圖是過程p,句子就在這里,首先生成一個int的 目標(biāo)碼,分配一個3個單元的數(shù)據(jù)區(qū),然后又生成兩條lit代碼分別將2、1入棧, 再后有一條10d代碼,是將b入棧的。入棧后開始計算1+b (opr 1 2),此時棧頂 元素為1+b的結(jié)果,再計算乘2 (opr 1 4),次棧頂乘以棧頂然后退兩棧,結(jié)果入棧,此時數(shù)據(jù)區(qū)中就是 2* (1+b)的結(jié)果了,通過一條sto代碼將結(jié)果存入偏 移為4的單元中,就是co在土程序中也可以找到這一段,土程序中,先開辟了 5個數(shù)據(jù)區(qū),然后跳到10的位置,把a入棧,10入棧,判斷兩個值是否相等, 不等的話就繼續(xù)往下,程序結(jié)束,如果相等的話,給b賦值后,就ca

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論