第二章PL0編譯程序的實現(xiàn)_第1頁
第二章PL0編譯程序的實現(xiàn)_第2頁
第二章PL0編譯程序的實現(xiàn)_第3頁
第二章PL0編譯程序的實現(xiàn)_第4頁
第二章PL0編譯程序的實現(xiàn)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PL/0語言的編譯程序是用高級語言PASCAL語言編寫的。程序由嵌套、過程和函數(shù)構成,采用一趟掃描方法。采用自頂向下的遞歸子程序法。所產(chǎn)生的目標程序為假想棧式計算機的匯編語言。

PL/0語言編譯程序是適合教學用的,它的數(shù)據(jù)類型只有整形數(shù),數(shù)據(jù)運算只有四則運算。語句有賦值語句、條件語句、WHILE循環(huán)語句、輸出、輸入語句和不帶參數(shù)允許遞歸調(diào)用的過程語句及復合語句。第二章PL/0編譯程序的實現(xiàn)

2.1.1PL/0語言的語法描述圖下面借用語法圖來描述語法規(guī)則。其中:英文表示終結符,中文表示非終結符。終結符:構成語言文法的單詞,是語法成分 的最小單位。非終結符:是個語法成分,還沒有進行分析。

程序2.1PL/0語言描述

分程序

語句條件:

表達式

因子:2.12PL/0語言文法的EBNF表示EBNF:擴充的巴科斯-瑙爾范式,是對文法的一種描述形式。其符號說明如下:<>:括號的中文表示語法成分,為非終結符

=:表示定義為

|:表示“或”關系

{}:括號內(nèi)的語法成分可以重復

[]:括號內(nèi)的成分為任選項

():括號內(nèi)的成分優(yōu)先2.2PL/0編譯程序的結構編譯過程采用一遍掃描方式。以語法分析程序為核心。詞法分析程序語法分析程序代碼生成程序表格管理程序出錯處理程序

源程序

目標程序PL/0編譯程序的過程或函數(shù)的功能表見表2.1過程或函數(shù)的嵌套定義層次結構如圖2.3所示語法分析程序圖2.4PL/0編譯程序總體流程圖詞法分析程序是為語法分析提供單詞用的,是語法分析的基礎。它把輸入的字符串形式的源程序分割成一個個單詞符號。編譯器為此設置了3個全程量的公用單元為:SYM:存放每個單詞的類別ID:存放用戶所定義的標識符的值NUM:存放用戶定義的數(shù)2.3PL/0編譯程序的詞法分析單詞的種類有五種:1.

基本字:也稱保留字,如END、IF等2.

運算符:如+、—、*、/、>=、#等等3.

標識符:用戶定義的變量名、常數(shù)名、 過程名4.

常數(shù):如100等整數(shù)5.

界符:如‘,’、‘.’、‘(’‘;’等詞法分析程序完成下列任務:1.濾空格:語法分析時沒用2.識別保留字:對應的類別放在SYM中,若查不到,認為是用戶定義的標識符3.識別標識符:對用戶定義的標識符放在SMY中,標識符本身的值放在ID中4.拼數(shù):所取單詞是數(shù)字時,將數(shù)的類別放在SYM中,數(shù)值本身的值存放在NUM中5.拼復合詞:對兩個字符組成的算符進行識別(<=)6.輸出源程序:邊讀入字符邊輸出取字符過程

GETCH所用單元說明:CH:存放當前讀取的字符,初字為空LINE:一維數(shù)組,數(shù)組元素是字符,界對為1:80.用于輸入一行字符的緩沖區(qū)LL和CC為計數(shù)器,初值為02.4PL/0語言的語法語義分析語法分析的任務,是識別由詞法分析給出的單詞符號序列在結構上是否符合給定的文法規(guī)則。語法分析從讀入第一個單詞由非終極符“程序”即開始符出發(fā),沿語法描述圖箭頭所指出的方向進行分析。如果一個PL/0語言的單詞系列在整個語法分析中,每個單詞都能逐個得到匹配,直到程序結束符“.”,這時就說所輸入的程序是正確的,對于正確的語法分析做相應的語義翻譯,最終得出目標程序。程序→分

→·表2.2TABLE表中信息2.5PL/0編譯程序目標代碼結構和代碼生成代碼指令有8條:LIT:將常量值取到運行棧頂LOD:將變量放到棧頂STO:將棧頂內(nèi)容送入變量單元CAL:調(diào)用過程的指令INT:為被調(diào)用的過程在運行棧中開辟數(shù)據(jù)區(qū)JMP:無條件轉移指令JPC:條件轉移指令OPR:關系運算和算術運算指令指令格式如下:f:功能碼l:層次差a:針對不同指令flaPL/0源程序與目標程序例:2.6語法錯誤處理:

PL/0編譯程序對語法錯誤的處理采用兩種方法:1.對于有些易于校正的錯誤如丟了逗號、分號等,則指出出錯位置,并加以校正。校正的方式就是補上逗號或分號。2.有些錯誤編譯程序難于確定校正的措施。為了使當前的錯誤不致影響整個程序的崩潰,把錯誤盡量局限在一個局部的語法單位中。這樣就需要跳過一些后面輸入的單詞符號,直到讀入一個能使編譯程序恢復正常語法分析工作的單詞為止。

2.7PL/0語言目標程序解釋執(zhí)行時的存儲分配當源程序經(jīng)過語法分析,如果未發(fā)現(xiàn)錯誤時,由編譯程序調(diào)用解釋程序,對存放在CODE中的目標程序代碼進行解釋執(zhí)行。當編譯結束后,記錄源程序中標識符的TABLE表已退出內(nèi)存。因此存儲區(qū)只剩以數(shù)組CODE存放的只讀目標程序和運行時的數(shù)據(jù)區(qū)S。S是由解釋程序定義的一維整形數(shù)組。PL/0語言的目標程序是一種假想的棧式計算機的匯編語言,解釋執(zhí)行時的數(shù)據(jù)空間S為棧式計算機的存儲空間,遵循后進先出規(guī)則。對每個過程當被調(diào)用,才分配數(shù)據(jù)空間,退出過程時,所分配的數(shù)據(jù)空間被釋放。

2.7PL/0語言目標程序解釋執(zhí)行時的存儲分配解釋程序定義了四個寄存器:I:指令寄存器,存放當前正在解釋的一條目標指令P:程序地址寄存器,指向下一條要執(zhí)行的目標程序的地址T:棧頂寄存器,每個過程被運行時,給它分配的數(shù)據(jù)區(qū)空間分為靜態(tài)和動態(tài)兩個部分,棧頂寄存器指出了當前棧中最新分

溫馨提示

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

評論

0/150

提交評論