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

正文內(nèi)容

第2章pl0編譯程序(編輯修改稿)

2025-08-16 09:14 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 rocedur) ( 定義 純量 /枚舉 類型) ?符號(hào)表的定義 table:array[0..txmax] of record name:alfa。 case kind:object of constant:(val:integer)。 variable:procedur:(level,adr,size: integer)。 NAME : A NAME : B NAME : C NAME : D NAME : E NAME : P KIND : CONSTANT KIND : CONSTANT KIND : VARIABLE KIND : VARIABLE KIND : VARIABLE KIND : PROCEDUR VAL : 35 VAL : 49 LEVEL : LEV LEVEL : LEV LEVEL : LEV LEVEL : LEV ADR : DX ADR : DX+1 ADR : DX+2 ADR : S I Z E : 4 NAME : G …… KIND : VARIABLE …… LEV EL : L E V + 1 …… ADR : DX …… 例程序說(shuō)明部分為: CONST A=35, B=49; VAR C, D, E; PROCEDURE P; VAR G ; … 符號(hào)表 名字 種類 層次 /值 地址 存儲(chǔ)空間 對(duì)應(yīng)名字表 ?tx : table表的下標(biāo)指針 ,是以 值參數(shù) 形式使用的。 ?dx: 計(jì)算每個(gè)變量在運(yùn)行棧中相對(duì)本 過(guò)程 基地址的偏移量 , 放在 table表 中的 adr域, 生成 目標(biāo)代碼 時(shí)再 放在 code中的 a域 變量定義語(yǔ)句的處理 語(yǔ)法: 變量說(shuō)明部分 : := var 標(biāo)識(shí)符 {, 標(biāo)識(shí)符 }; 程序: if sym=varsym then begin getsym。 repeat vardeclaration。(*變量說(shuō)明處理 *) while sym=ma do begin getsym。 vardeclaration end。 if sym=semicolon then getsym else error(5) until symident。 end。 變量說(shuō)明處理 ? procedure vardeclaration。 begin if sym=identthen begin enter(variable)。 getsym end else error(4) end(*vardeclaration*)。 過(guò)程 ENTER的實(shí)現(xiàn) ?tx : table表的指針 ? procedure enter(k:object )。 begin (* enter object into table *) tx:=tx+1。 with table[tx] do (* 開(kāi)域 語(yǔ)句 *) begin name:=id。(* 表示 table[tx].name:=id。*) kind:=k。(* 表示 table[tx].kind:=k。* ) 過(guò)程 ENTER的實(shí)現(xiàn) case k of constant: begin if numamax then begin error(31)。 num:=0。 end。 val:=num。(* table[tx].val:=num。*) end。 過(guò)程 ENTER的實(shí)現(xiàn) variable: begin level:=lev。 ( *表示 table[tx].level:=lev*) adr:=dx。 ( *表示 table[tx].adr:=dx*) dx:=dx+1。 end。 procedur: level:=lev (* 表示 table[tx].level:=lev。*) end(* case *)。 end end(*enter*)。 過(guò)程體的處理 ?對(duì) 語(yǔ)句進(jìn)行 語(yǔ)法 分析 ?語(yǔ)義分析 當(dāng)遇到 標(biāo)識(shí)符的引用時(shí) 就調(diào)用 POSITION函數(shù) 查TABLE表 ,看是否 有 過(guò) 正確定義 ,若已有,則從表中 取相應(yīng)的有關(guān) 信息 ,供代碼的生成使用。 若無(wú)定義則錯(cuò) 。 ?當(dāng) 語(yǔ)法語(yǔ)義正確時(shí) ,就 生成 相應(yīng)語(yǔ)句功能的 目標(biāo)代碼 賦值 語(yǔ)句的處理 if sym = ident then begin i:= position(id)。 if i= 0 then error(11) else if table[i].kind variable then begin error(12)。 i:= 0 end。 getsym。 if sym = bees then getsym else error(13)。 expression(fsys)。 if i 0 then with table [i] do gen(sto,levlevel,adr) end 代碼生成 ?代碼生成是由過(guò)程 GEN完成。 ?GEN有 3個(gè) 參數(shù) ,分別代表目標(biāo)代碼的 功能碼 ,層差 和 位移量 。例如 gen(opr,0,16)。 gen(sto,levlevel,adr) lev:當(dāng)前 處理的 過(guò)程 層次 level:被引用變量或過(guò)程所在 層次 CX:為目標(biāo)代碼 code數(shù)組的下標(biāo)指針 結(jié)構(gòu)變換, 地址返填 ?If c then s getsym。 ? condition。 ? if sym=thensym ? then getsym ? else error(16)。 ? cx1:= cx。 ? gen(jpc,0,0) ? statement( )。 ? code[cx1].a:=cx PL/0編譯程序錯(cuò)誤處理的實(shí)現(xiàn) 對(duì)語(yǔ)法錯(cuò)誤的兩種處理方法: (1) 對(duì)于 易于校正 的錯(cuò)誤,如丟了逗號(hào),分號(hào)等,指出出錯(cuò)位置, 加以校正 ,繼續(xù)進(jìn)行分析。 (2) 對(duì)于 難于校正 的錯(cuò)誤,給出錯(cuò)誤的位置與性質(zhì), 跳過(guò)后面的一些單詞 , 直到下一個(gè)可以進(jìn)行正常語(yǔ)法分析的語(yǔ)法單位。 ?在 進(jìn)入 某個(gè) 語(yǔ)法單位 時(shí),調(diào)用 TEST,檢查當(dāng)前符號(hào)是否屬于該 語(yǔ)法單位的開(kāi)始符號(hào)集合 。若不屬于,則 濾去 開(kāi)始 符號(hào) 和 后繼 符號(hào) 集合外 的所有符號(hào)。 ?在 語(yǔ)法單位 分析結(jié)束 時(shí),調(diào)用 TEST,檢查當(dāng)前符號(hào)是否屬于調(diào)用該語(yǔ)法單位時(shí)應(yīng)有的 后繼
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1