freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第2章pl0編譯程序-資料下載頁(yè)

2025-07-20 09:14本頁(yè)面
  

【正文】 ... ( tx) q p m b 附 PL/0編譯程序代碼生實(shí)現(xiàn) ?Table表的 下標(biāo)指針 tx補(bǔ)充說(shuō)明: 主程序 BLOCK 第 1次 調(diào)用 block BLOCK( 0, 0, … ) 0 0 ... BLOCK BLOCK( LEV+1,TX, … ) (遞歸 進(jìn)入 分程序 ) LEV tx LEV tx ( 6) 6 ( 9) 1 tx是 BLOCK的 實(shí)際 值參 附 PL/0編譯程序代碼生成的實(shí)現(xiàn) procedure gen(x:fct。 y, z:integer)。 begin if cxcxmax then( *指針越界 *) begin write(‘ program too long’ )。 close(fin)。( *關(guān)閉文件 *) writeln。 exit end。 附 PL/0編譯程序代碼生成的實(shí)現(xiàn) with code[cx] do begin f:=x。( * 表示 code[cx].f:=x。 *) l:=y。( * 表示 code[cx].l:=y。 *) a:=z。( * 表示 code[cx].a:=z。 *) end。 cx:=cx+1 end (*gen*)。 附 PL/0編譯程序代碼生成的實(shí)現(xiàn) 對(duì) 分程序的定義( 見(jiàn)教材 292頁(yè)) procedure block(lev,tx:integer。fsys:symset)。 var dx:integer。 (*data allocationindex*) tx0:integer。 (*initial table index*) cx0:integer。 (*initial code index*) ( tx0, cx0是 tx, cx的初值) 附 PL/0編譯程序代碼生成的實(shí)現(xiàn) ?對(duì) 分程序 體 人口的處理(見(jiàn)程序文本 block 的過(guò)程體 ) begin (*block*) dx:=3。 tx0:=tx。 ( 保留當(dāng)前 table表 指針值 ) table[tx].adr:=cx。( 保留當(dāng)前 code指針值到過(guò)程名 的 adr域 ) gen(jmp,0,0)。(生成轉(zhuǎn)向 過(guò)程體入口的指令,該指令的地址 為 cx 已保留在過(guò)程名的 adr域, 等生成 過(guò)程 體入口的指令時(shí),再由 table[tx].adr中取出 cx將 過(guò)程體入口返填到 cx中,即 ( jmp,0,0)的第 3區(qū)域。 … (注意 dx, tx, cx的作用) NAME : ANAME : BNAME : CNAME : DNAME : ENAME : PKIND : C O N S T A N TKIND : C O N S T A N TKIND : V A R I A B L EKIND : V A R I A B L EKIND : V A R I A B L EKIND : P R O C E D U RVAL : 35VAL : 49LEVEL : L E VLEVEL : L E VLEVEL : L E VLEVEL : L E VADR : DXADR : DX+1ADR : DX+2ADR : 1 SIZE : 4NAME : G ……KIND : V A R I A B L E……LEVEL : L E V + 1……ADR : DX…… CONST A=35, B=49; VAR C, D, E; PROCEDURE P; VAR G 附 table表格管理 名字 類(lèi)型 層次 /值 地址 存儲(chǔ)空間 (0) jmp 0 0 CX (1 ) jmp 0 0 . . 記錄 過(guò)程在 code的 入 口到 table中的 adr域 附 PL/0編譯程序代碼生成的實(shí)現(xiàn) 過(guò)程 體 入口 時(shí)的處理 code[table[tx0].adr].a:=cx。 (過(guò)程入口地址填 寫(xiě)在 code中 ) with table[tx0] do begin adr:=cx。 ( 過(guò)程的 入口 填 寫(xiě)在 table中 ) size:=dx。 ( 過(guò)程 占的空間 填 寫(xiě)在 table中 ) end。 cxo:=cx。 (保留 過(guò)程在 code中的 入口地址) gen(int,0,dx)。( 生成 過(guò)程 入口指令 ) interpret 三個(gè)寄存器賦初值 t:=0。 b:=1。 p:=0。 主程序的 SL, DL, RA賦初值 s[1]:=0。 s[2]=0。 s[3]=0。 i:=code[p]。 p:=p+1。 P=0? 返回 解釋執(zhí)行的流程圖 執(zhí)行指令 i N Y 主程序 的 RA s[3]=0 附 目標(biāo)代碼的解釋執(zhí)行 ?幾條 特殊指令 的 解釋執(zhí)行 : 過(guò)程 入口 : 開(kāi)辟 a個(gè)單元 (見(jiàn)教材 304頁(yè)) int: t:=t+a。 ( t是當(dāng)前 棧頂值) 過(guò)程 出口 : 釋放數(shù)據(jù)段 (退棧)( 見(jiàn)教材 302頁(yè)) opr: case a of (*operator*) 0: begin (*return*) t:=b1。 恢復(fù)調(diào)用前棧頂 p:=s[t+3]。 送返回地址到 p b:=s[t+2] 恢復(fù)調(diào)用前基地址 end。 附 目標(biāo)代碼的解釋執(zhí)行 ?過(guò)程 出口 RA DL SL b . . t M t b t:=b1。 p:=s[t+3]。 b:=s[t+2] Q 附 目標(biāo)代碼的解釋執(zhí)行 調(diào)用過(guò)程 : cal: begin (*generat new block mark*) s[t+1]:=base(l)。 填寫(xiě) 靜態(tài)鏈 s[t+2]:=b。 填寫(xiě) 動(dòng)態(tài)鏈 s[t+3]:=p。 填寫(xiě) 返回地址 b:=t+1。 被調(diào)用過(guò)程的基地址 p:=a 過(guò)程入口地址 a送 p end。 附 目標(biāo)代碼的解釋執(zhí)行 function base(l:integer): integer。 var b1:integer。 begin b1:=b。 (*find base l level down*) while l0 do begin b1:=s[b1]。 l:=l1。 end。 base:=b1 end (*base*)。 附 目標(biāo)代碼的解釋執(zhí)行 ?base (l:integer): integer。 b b b m p 0 b b q 附 運(yùn)行時(shí)數(shù)據(jù)棧 S的變化狀態(tài) 教材 25頁(yè)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1