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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、目標代碼寫入目標代碼數(shù)組。 如果cxcxmax表示當前生成的代碼行號大于允許的最大代碼行數(shù),輸出“program toolong”。然后,把代碼寫入目標代碼數(shù)組的當前 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下運行后結果如下:心* 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);的代碼生成過程在上述程序中,當調用block子程序分析這段語句時,遇到 c,查符號表, 判斷是常量還是變量,入棧,遇到“:=”時,繼續(xù)讀下一字符,判斷如c,并依 次將2、1和b入棧。第一個截圖是過程p,句子就在這里,首先生成一個int的 目標碼,分配一個3個單元的數(shù)據(jù)區(qū),然后又生成兩條lit代碼分別將2、1入棧, 再后有一條10d代碼,是將b入棧的。入棧后開始計算1+b (opr 1 2),此時棧頂 元素為1+b的結果,再計算乘2 (opr 1 4),次棧頂乘以棧頂然后退兩棧,結果入棧,此時數(shù)據(jù)區(qū)中就是 2* (1+b)的結果了,通過一條sto代碼將結果存入偏 移為4的單元中,就是co在土程序中也可以找到這一段,土程序中,先開辟了 5個數(shù)據(jù)區(qū),然后跳到10的位置,把a入棧,10入棧,判斷兩個值是否相等, 不等的話就繼續(xù)往下,程序結束,如果相等的話,給b賦值后,就ca

溫馨提示

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

評論

0/150

提交評論