pl-0編譯程序?qū)崿F(xiàn)中科大_第1頁
pl-0編譯程序?qū)崿F(xiàn)中科大_第2頁
pl-0編譯程序?qū)崿F(xiàn)中科大_第3頁
pl-0編譯程序?qū)崿F(xiàn)中科大_第4頁
pl-0編譯程序?qū)崿F(xiàn)中科大_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章PL/0編譯2.1PL/0語言描2.2PL/0編譯程序的結(jié)2.3PL/0編譯程序的詞法分2.4PL/0編譯程序的語法分2.5PL/0編譯程序的目標代碼結(jié)構(gòu)和代碼生2.6PL/0編譯程序的語法錯誤2.7PL/0編譯程序的目標代碼解釋執(zhí)行時的存何為PL/0何為PL/0語言PL/0語言:PASCAL語言的子集,功能簡單結(jié)構(gòu)清晰,可讀性強,具備了言的必備部PL/0PL/0程序示CONSTA=10; PROCEDUREP;VARD;PROCEDUREQ;VARX;WHILEX#0DOCALLP;CALLQ;CALLP;目標碼,注意與傳統(tǒng)pcode的區(qū)pcode解釋程PL/0pcode代PL/0源程PL/0PL/0PL/0PL/0語言的PL/0瑙爾范式(EBNF)表-PL/0語言的非形式描數(shù)最多為14while...doreadwrite,call合語句begin...end,說明語句:const...,var...,procedure…13個保留字:ifthenwhile,doread,write,call,begin,end,const,var,procedure,oddPL/0PL/0語言的語法描述PL/0PL/0EBNFBNF與EBNFBNF(BACKUS-NAURFORM)是根 JohnW.Backus與丹麥的PeterNaur來命名的,它從語法上描述程序設(shè)計語言的元語言。采用BNF就可說明哪些符號序列是對于某給定語言在語法上有效的程序。BNFBNF引入的符號 |用左右尖括號括起來的字表示語法構(gòu)造成分‘或EBNF引入{}表示花括號內(nèi)的語法成分[]表示方括號內(nèi)的語法成分為任選()表示圓括號內(nèi)的成分優(yōu)一個用EBNF描述的例子<整數(shù)>∷=[+|<數(shù)字<整數(shù)>∷=[+|<非零數(shù)<數(shù)字PL/0語言文法的EBNF〈程序〉∷=〈分程序〉〈分程序〉∷=[〈常量說明部分〉][〈變量說明部分〉][〈過程說明部分〉]〈語句〉〈常量說明部分〉∷=CONST〈常量定義部分〉{,〈常量定〈無符號整數(shù)〉∷=〈數(shù)字〉{〈數(shù)字〈變量說明部分〉∷=VAR〈標識符〉{,〈標識符〉〈標識符〉∷=〈字母〉{〈字母〉|〈數(shù)字PL/0編譯其編譯過程采用一趟掃描方以語法分析標識符的說明與之間的信息聯(lián)系。PL/0編譯程PL/0編譯程序的結(jié)構(gòu)PL/0程序目標程代碼生成程語法語義分詞法分析出錯處理程表格管理程22PL/0編譯程所需識別的運算符:如+、-、*、/、:=、#、>=、<=等標識符:用戶定義的變量名、常數(shù)名、過程名 如‘,’、‘.’、‘;’、‘(’、詞法分析過程GETSYM詞法分析過程GETSYM–濾空–識別保留–識別標識–拼–拼復合–輸出源程SYMbeginsymident,ID:存放用戶所定義的標NUM:存放用戶定分程分程序0圖條件表達式 因子程序啟啟置初調(diào)用GETSYM取單調(diào)用BLOCK過當前單YN出源程序是否有錯誤Y打印錯N結(jié)圖–置。標識符的屬性不同時,所需填入的信息也不同。登錄信息由ENTER過程完成。表格管表表格CONSTVARC,D,E;PROCEDUREVAR名類層次/地空 目目標目標代碼pcode是一種假想棧式編語言指令格f功能層次根據(jù)不同的指令有flaLIT0將常量值取到運行棧LODl將變量值放到棧STOl將棧頂內(nèi)容送入某變量單元CALl調(diào)用過INT0在運行棧中為被調(diào)用的過程開辟a個單元的數(shù)據(jù)JMP0無條件跳轉(zhuǎn)至a地JPC0條件跳轉(zhuǎn),當棧頂布爾值非真則跳轉(zhuǎn)至a地址,否則序執(zhí)OPR0函數(shù)調(diào)用結(jié)束后的返OPR0棧頂元素取OPR0次棧頂與棧頂相加,退兩個棧元素,相加值進OPR0次棧頂減支棧OPR0次棧頂乘以棧OPR0次棧頂除以棧OPR0棧頂元素的奇偶判OPR0OPR0次棧頂與棧頂是否相OPR0次棧頂與棧頂是否不OPR010次棧頂是否小于棧OPR011次棧頂是否大于等于棧OPR012次棧頂是否大于棧OPR013次棧頂是否小于等于棧OPR014棧頂值輸出至屏OPR015屏幕輸出換OPR016從命令行讀入一個輸入置于棧procedurecallp;0123456789jmp0jmp00lod10opr0sto1opr0次棧頂與棧0在運行棧中申請5個棧從命令行讀入輸入將變量取SLopr0sto0cal0lod0opr0opr0opr0棧頂值輸出換SL:靜態(tài)DL:動態(tài)0RA:返回地運行SLDLRA變量變量DLRAPL/0編譯程序代碼生PL/0語言的代碼生成是由過程GENgen(opr,0,16);gen(sto,lev-生成的代碼順序放在數(shù)組CODE中CODE為一維數(shù)組,數(shù)組元素為記錄型數(shù)據(jù)。每一個記錄就是一條目標指令。CX為指令的指針,由0開始順序增加。實際上目標代碼的順序是內(nèi)層過程 邊,主程序的目標代碼在最后PL/0編譯對語法錯誤的兩種號等,出錯位置,加以校正,繼續(xù)在進入某個語法單位時,調(diào)用TEST濾去始符號前的所有符開開始符號集合與后繼符號集varprocedureifcallread.identcallifwhileread.;odd-Then+-.;)endthen項number.;)rop+endthennumber.;)rop+*/endthenSYMSYM在S1Y圖?N返SYM在S1Y?Nn打印出pcodepcodepcode分pcode目標代碼存放在數(shù)組CODE中解釋程序定義的一維整型數(shù)組S執(zhí)行指令返主程序的SL,DL,RAs[1]:=0;s[2]=0;t:=0;b:=1;目標代碼解釋執(zhí)行時 分幾條典型指令 分–INT0 –OPR0位于過程目標程序的出口, 數(shù)據(jù)段(退

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論