【正文】
在語法單位分析結(jié)束時,調(diào)用 TEST濾去當(dāng)前符號到 后繼符號 之間的所有符號。 ╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳ TEST TEST 《編譯原理》 臺州學(xué)院 應(yīng)建健 30 開始符號集合與后繼符號集合 非終結(jié)符名 開始符號集合 后繼符號集合分程序 c ons t v ar p roc edu rei den t i f ca ll beg inw hil e r ead wri te. 。語句 i den t c all beg ini f w hil e re ad wri te. 。 e nd條件 o dd + (i den t n umbe rT hen do表達(dá)式 + (i den t n umbe r. 。 ) r ope nd the n do項 i den t n umbe r ( . 。 ) r op + e nd the n do因子 i den t n umbe r ( . 。 ) r op + * / end the n d o《編譯原理》 臺州學(xué)院 應(yīng)建健 31 TEST SYM在 S1中? 打印出錯編號 n S1:=S1+S2 SYM在 S1中? GETSYM 返回 Y Y N N TEST 測試過程流程圖 《編譯原理》 臺州學(xué)院 應(yīng)建健 32 pcode代碼解釋器的實現(xiàn) ? pcode解釋器的結(jié)構(gòu) ? 解釋執(zhí)行的流程圖 ? 目標(biāo)代碼解釋執(zhí)行時的存儲分配 《編譯原理》 臺州學(xué)院 應(yīng)建健 33 pcode解釋器的結(jié)構(gòu) ? 目標(biāo)代碼存放在數(shù)組 CODE中。 ? 解釋程序定義的一維整型數(shù)組 S作為運行棧 ? 棧項寄存器 t, 基址寄存器 b, 程序地址寄存器 p, 指令寄存器 i 《編譯原理》 臺州學(xué)院 應(yīng)建健 34 interpret 三個寄存器賦初值 t:=0。 b:=1。 p:=0。 主程序的 SL, DL, RA賦初值 s[1]:=0。 s[2]=0。 s[3]=0。 i:=code[p]。 p:=p+1。 執(zhí)行指令 i P=0? 返回 解釋執(zhí)行的流程圖 《編譯原理》 臺州學(xué)院 應(yīng)建健 35 目標(biāo)代碼解釋執(zhí)行時的存儲分配 ? 幾條典型指令的存儲分配 – INT 0 A 位于過程目標(biāo)程序的入口,開辟 A個單元的數(shù)據(jù)段。 A為局部變量個數(shù) +3 – OPR 0 0 位于過程目標(biāo)程序的出口,釋放數(shù)據(jù)段(退棧),恢復(fù)調(diào)用該過程前正在運行的過程的數(shù)據(jù)段基址寄存器 B和棧頂寄存器 T的值,并將返回地址送到指令地址寄存器 P中,以使調(diào)用前的程序從斷點開始繼續(xù)執(zhí)行 《編譯原理》 臺州學(xué)院 應(yīng)建健 36 – CAL L A 調(diào)用過程,還完成填寫靜態(tài)鏈、動態(tài)鏈、返回地址,給出被調(diào)用過程的基地址值,送入基址寄存器 B中,目標(biāo)程序的入口地址 A的值送指令地址寄存器 P中,使指令從 A開始執(zhí)行。