【正文】
58 運(yùn)行時數(shù)據(jù)棧 S的變化狀態(tài) ?見課本 26頁 。 56 目標(biāo)代碼解釋執(zhí)行時的存儲分配 ?幾條典型指令的存儲分配 ?INT 0 A 位于過程目標(biāo)程序的入口,開辟 A個單元的數(shù)據(jù)段。 ?DL: 動態(tài)鏈,指向調(diào)用該過程前正在運(yùn)行過程的數(shù)據(jù)段基地址。 p:=p+1。 s[3]=0。 主程序的 SL, DL, RA賦初值 s[1]:=0。 b:=1。 52 步驟 pcode代碼解釋器的實(shí)現(xiàn) ?pcode解釋器的結(jié)構(gòu) ?解釋執(zhí)行的流程圖 ?目標(biāo)代碼解釋執(zhí)行時的存儲分配 53 pcode解釋器的結(jié)構(gòu) ?目標(biāo)代碼存放在數(shù)組 CODE中。 ) r op + e nd the n do因子 i den t n umbe r ( . 。 e nd條件 o dd + (i den t n umbe rT hen do表達(dá)式 + (i den t n umbe r. 。 ╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳ TEST TEST 49 開始符號集合與后繼符號集合 非終結(jié)符名 開始符號集合 后繼符號集合分程序 c ons t v ar p roc edu rei den t i f ca ll beg inw hil e r ead wri te. 。 48 步驟 PL/0編譯程序語法錯誤處理的實(shí)現(xiàn) ?在進(jìn)入某個語法單位時,調(diào)用 TEST濾去開始符號前的所有符號。 cx:=cx+1 end (*gen*)。 l:=y。 exit end。 close(fin)。program too long39。y, z:integer)。實(shí)際上目標(biāo)代碼的順序是內(nèi)層過程的在前邊,主程序的目標(biāo)代碼在最后。每一個記錄就是一條目標(biāo)指令。 gen(sto,levlevel,adr) ?生成的代碼順序放在數(shù)組 CODE中。 ?GEN有三個參數(shù),分別代表目標(biāo)代碼的功能碼,層差和位移量。 if symrparen then begin error(33)。 gen(sto,levlevel,adr) end。 if sym=ident then i:=position(id) else i:=0。 ?例: READ語句的語法語義分析處理 讀語句 ∷=READ ‘(’標(biāo)識符 {, 標(biāo)識符 }‘)’ 44 READ語句的語法語義分析處理 if sym=readsym then begin getsym。 ?當(dāng)遇到標(biāo)識符的引用時就調(diào)用 POSITION函數(shù)查TABLE表,看是否有過正確定義,若已有,則從表中取相應(yīng)的有關(guān)信息,供代碼的生成使用。 43 過程體的分析 ?從語法上要對語句逐句分析。 end。 adr:=dx。 val:=num end。 num:=0。 kind:=k。 begin(*enter object into table*) tx:=tx+1。 getsym end else error(4) end(*vardeclaration*)。 41 變量定義語句的處理 ? procedure vardeclaration。 if sym=semicolon then getsym else error(5) until symident。 while sym=ma do begin getsym。 表格管理 ?過程體的分析 NAME : ANAME : BNAME : CNAME : DNAME : ENAME : PKIND : C ONST ANTKIND : C ONST ANTKIND : V ARIA BLEKIND : V ARIA BLEKIND : V ARIA BLEKIND : P ROCE DURVAL : 35VAL : 49LEVEL : LEVLEVEL : LEVLEVEL : LEVLEVEL : LEVADR : DXADR : DX +1ADR : DX +2ADR : SIZE : 4NAME : G ……KIND : V ARIA BLE……LEVEL :LEV+1……ADR : DX…… CONST A=35, B=49; VAR C, D, E; PROCEDURE P; VAR G 表格管理 名字 類型 層次 /值 地址 存儲空間 變量定義語句的處理 if sym=varsym then