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

正文內(nèi)容

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

2025-08-16 09:14 本頁面
 

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