【正文】
否大于棧頂OPR 0 13 次棧頂是否小于等于棧頂OPR 0 14 棧頂值輸出至屏幕OPR 0 15 屏幕輸出換行OPR 0 16 從命令行讀入一個(gè)輸入置于棧頂《編譯原理》 臺(tái)州學(xué)院 應(yīng)建健 26 0 jmp 0 8 1 jmp 0 2 2 int 0 3 3 lod 1 3 4 lit 0 10 5 opr 0 2 次棧頂與棧頂相加 6 sto 1 4 7 opr 0 0 8 int 0 5 在運(yùn)行棧中申請(qǐng) 5個(gè)??臻g 9 opr 0 16 從命令行讀入輸入置于棧頂 10 sto 0 3 將棧頂值存入變量 11 cal 0 2 調(diào)用過程 12 lod 0 4 將變量取至棧頂 13 opr 0 14 棧頂值輸出至屏幕 14 opr 0 15 換行 15 opr 0 0 SL 0 DL 0 RA 0 變量 1 變量 2 RA 12 SL 0 DL 0 運(yùn)行棧 Const a=10。 end。 end. SL: 靜態(tài)鏈 DL: 動(dòng)態(tài)鏈 RA: 返回地址 0 《編譯原理》 臺(tái)州學(xué)院 應(yīng)建健 27 ? PL/0語言的代碼生成是由過程 GEN完成。 CODE為一維數(shù)組,數(shù)組元素為記錄型數(shù)據(jù)。 PL/0編譯程序代碼生成 《編譯原理》 臺(tái)州學(xué)院 應(yīng)建健 28 PL/0編譯程序語法錯(cuò)誤處理 對(duì)語法錯(cuò)誤的兩種處理方法: (1) 對(duì)于易于校正的錯(cuò)誤,如丟了逗號(hào),分號(hào)等,指出出錯(cuò)位置,加以校正,繼續(xù)進(jìn)行分析。 ╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳ TEST TEST 《編譯原理》 臺(tái)州學(xué)院 應(yīng)建健 30 開始符號(hào)集合與后繼符號(hào)集合 非終結(jié)符名 開始符號(hào)集合 后繼符號(hào)集合分程序 c ons t v ar p roc edu rei den t i f ca ll beg inw hil e r ead wri te. 。 ) r op + e nd the n do因子 i den t n umbe r ( . 。 p:=0。 i:=code[p]。 。 執(zhí)行指令 i P=0? 返回 解釋執(zhí)行的流程圖 《編譯原理》 臺(tái)州學(xué)院 應(yīng)建健 35 目標(biāo)代碼解釋執(zhí)行時(shí)的存儲(chǔ)分配 ? 幾條典型指令的存儲(chǔ)分配 – INT 0 A 位于過程目標(biāo)程序的入口,開辟 A個(gè)單元的數(shù)據(jù)段。 s[2]=0。 ? 解釋程序定義的一維整型數(shù)組 S作為運(yùn)行棧 ? 棧項(xiàng)寄存器 t, 基址寄存器 b, 程序地址寄存器 p, 指令寄存器 i 《編譯原理》 臺(tái)州學(xué)院 應(yīng)建健 34 interpret 三個(gè)寄存器賦初值 t:=0。 e nd條件 o dd + (i den t n umbe rT hen do表達(dá)式 + (i den t n um