編譯第七章語法制導(dǎo)翻譯

上傳人:san****019 文檔編號(hào):21739846 上傳時(shí)間:2021-05-08 格式:PPT 頁數(shù):108 大?。?09KB
收藏 版權(quán)申訴 舉報(bào) 下載
編譯第七章語法制導(dǎo)翻譯_第1頁
第1頁 / 共108頁
編譯第七章語法制導(dǎo)翻譯_第2頁
第2頁 / 共108頁
編譯第七章語法制導(dǎo)翻譯_第3頁
第3頁 / 共108頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《編譯第七章語法制導(dǎo)翻譯》由會(huì)員分享,可在線閱讀,更多相關(guān)《編譯第七章語法制導(dǎo)翻譯(108頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、第 七 章 語 法 制 導(dǎo) 翻譯 和 中 間 代 碼 生 成 第 一 節(jié) 概 述v 語 法 分 析 之 后 , 編 譯 的 任 務(wù) 是 由 已 識(shí) 別 為 正 確 的 源 程序 生 成 一 組 規(guī) 格 一 致 , 便 于 計(jì) 算 機(jī) 加 工 的 指 令 形 式 。一 、 中 間 代 碼 生 成 方 法語 法 制 導(dǎo) 翻 譯 , 屬 性 文 法 制 導(dǎo) 翻 譯二 、 中 間 代 碼 中 間 代 碼 : 不 是 機(jī) 器 語 言 , 便 于 生 成 機(jī) 器 語 言 , 便 于 代碼 優(yōu) 化 。 中 間 代 碼 的 形 式 :-逆 波 蘭 式-樹 形 表 示 法-三 元 式-四 元 式 : 最 常 用

2、 的 形 式 第 七 章 中 間 代 碼 的 生 成 1 第 一 節(jié) 概 述v 二 、 翻 譯 方 法1、 語 法 制 導(dǎo) 翻 譯-在 語 法 分 析 的 基 礎(chǔ) 上 進(jìn) 行 邊 分 析 邊 翻 譯 。 注 : 1) 語 法 制 導(dǎo) 翻 譯 時(shí) 會(huì) 根 據(jù) 文 法 產(chǎn) 生 式 右 部 符號(hào) 串 的 含 義 進(jìn) 行 翻 譯 , 翻 譯 的 結(jié) 果 是 生 成 相 應(yīng) 中 間代 碼 。 2) 語 法 制 導(dǎo) 翻 譯 的 依 據(jù) 是 語 義 子 程 序 。 3) 具 體 做 法 : 為 每 個(gè) 產(chǎn) 生 式 配 置 一 個(gè) 語 義 子 程 序 ,當(dāng) 語 法 分 析 進(jìn) 行 歸 約 或 推 導(dǎo) 時(shí) ,

3、調(diào) 用 語 義 子 程 序 ,完 成 一 部 分 翻 譯 任 務(wù) 。 4) 語 法 分 析 完 成 , 翻 譯 工 作 也 告 結(jié) 束 。 第 七 章 中 間 代 碼 的 生 成 2 第 一 節(jié) 概 述v 二 、 翻 譯 方 法 1、 語 法 制 導(dǎo) 翻 譯-語 法 制 導(dǎo) 翻 譯 適 用 于 多 種 語 法 分 析-語 法 制 導(dǎo) 翻 譯 種 類 1、 自 上 而 下 語 法 制 導(dǎo) 翻 譯 : 對(duì) 每 個(gè) 文 法 符 號(hào) 配 以語 義 動(dòng) 作 。 2、 自 下 而 上 語 法 制 導(dǎo) 翻 譯 : 我 們 主 要 討 論 LR語 法制 導(dǎo) 翻 譯 第 七 章 中 間 代 碼 的 生 成 3

4、第 一 節(jié) 概 述v 三 、 語 義 子 程 序1、 作 用 用 來 描 述 一 個(gè) 產(chǎn) 生 式 所 對(duì) 應(yīng) 的 翻 譯 工 作 。-如 : 改 進(jìn) 某 些 變 量 的 值 ; 查 填 各 種 符 號(hào) 表 ; 發(fā) 現(xiàn)并 報(bào) 告 源 程 序 錯(cuò) 誤 ; 產(chǎn) 生 中 間 代 碼 等 。 注 ; 這 些 翻 譯 工 作 很 大 程 度 上 決 定 了 要 產(chǎn) 生 什 么 形式 的 中 間 代 碼 v 三 、 語 義 子 程 序2、 寫 法 語 義 子 程 序 寫 在 該 產(chǎn) 生 式 后 面 的 花 括 號(hào) 內(nèi) 。 X a語 義 子 程 序 注 : 在 一 個(gè) 產(chǎn) 生 式 中 同 一 個(gè) 文 法 符

5、號(hào) 可 能 出 現(xiàn) 多 次 , 但 它 們代 表 的 是 不 同 的 語 義 值 , 要 區(qū) 分 可 以 加 上 角 標(biāo) 。如 : E E(1)+E(2)3、 語 義 值 為 了 描 述 語 義 動(dòng) 作 , 需 要 為 每 個(gè) 文 法 符 號(hào) 賦 予 不 同 的 語 義 值 :類 型 , 地 址 , 代 碼 值 等 。第 一 節(jié) 概 述 第 一 節(jié) 概 述v 三 、 語 義 子 程 序4、 語 義 棧 各 個(gè) 符 號(hào) 的 語 義 值 放 在 語 義 棧 中-當(dāng) 產(chǎn) 生 式 進(jìn) 行 歸 約 時(shí) , 需 對(duì) 產(chǎn) 生 式 右 部 符 號(hào) 的 語 義 值 進(jìn) 行綜 合 ,其 結(jié) 果 作 為 左 部 符

6、 號(hào) 的 語 義 值 保 存 到 語 義 棧 中 。 下 推 棧 包 含 3部 分 :-狀 態(tài) 棧 、 符 號(hào) 棧 和 語 義 棧-注 : 語 義 棧 與 狀 態(tài) 棧 和 符 號(hào) 棧 是 同 步 變 化 的 。 第 一 節(jié) 概 述v三 、 語 義 子 程 序注 : 1) 若 把 語 義 子 程 序 改 成 產(chǎn) 生 某 種 中 間 代碼 的 動(dòng) 作 , 就 能 在 語 法 分 析 制 導(dǎo) 下 , 隨 著 分析 的 進(jìn) 展 逐 步 生 成 中 間 代 碼 。 2) 若 把 語 義 子 程 序 改 成 產(chǎn) 生 某 種 機(jī) 器 的匯 編 語 言 指 令 , 就 能 隨 著 分 析 的 進(jìn) 展 逐 步

7、生成 某 機(jī) 器 的 匯 編 語 言 代 碼 。 第 一 節(jié) 概 述v 例 如 :v 產(chǎn) 生 式 語 義 子 程 序v (0)S E PRINT E VALv (1)E E(1) +E(2) E VAL=E(1) VAL+E(2) VALv (2)E E(1) * E(2) E VAL=E(1) VAL*E(2) VALv (3)E (E(1) E VAL=E(1) VALv (4)E i E VAL=LEXVALv 注 : LEXVAL指 的 是 詞 法 分 析 送 來 的 機(jī) 內(nèi) 二 進(jìn) 制 整 數(shù) 。 v 下 推 棧 Sm E(2) E(2).VALSm-1 +E(1) E(1).VAL

8、 .S0 #狀 態(tài) 符 號(hào) VAL(語 義 ) 第 一 節(jié) 概 述v 注 : 由 于 語 義 值 是 放 在 語 義 棧 中 的 , 它 也 可 以 用 棧 頂 指 針TOP指 出 , 語 義 子 程 序 改 寫 為 : v 產(chǎn) 生 式 語 義 子 程 序v (0)S E PRINT VALTOPv (1)E E(1) +E(2) VALTOP=VALTOP+VALTOP+2v (2)E E(1) * E(2) VALTOP=VALTOP*VALTOP+2v (3)E (E(1) VALTOP=TOP+1v (4)E i VALTOP=LEXVAL v 注 : LEXVAL指 的 是 詞 法

9、分 析 送 來 的 機(jī) 內(nèi) 二 進(jìn) 制 整 數(shù) 。 第 一 節(jié) 概 述v 例 如 : 分 析 輸 入 串 (7+9)*5#,并 給 出 它 的 計(jì) 算 過 程 。分 析 表 如 下 : 狀 態(tài) ACTION GOTOi + * ( ) # S0 S3 S2 11 S4 S5 acc2 S3 S2 63 r4 r4 r4 r4 4 S3 S2 75 S3 S2 8 6 S4 S5 S9 7 r 1(S4) S5(r1) r1 r1 8 r1(S4) r2(S5) r2 r2 9 r3 r3 r3 r3 步 驟 狀 態(tài) SYM VAL INPUT ACTION1 0 # - (7+9)*5#2 0

10、,2 #( - 7+9)*5# 移 進(jìn)3 0,2,3 #(7 - +9)*5# 移 進(jìn)4 0,2,6 #(E -7 +9)*5# r45 0,2,6,4 #(E+ -7- 9)*5# 移 進(jìn)6 0,2,6,4,3 #(E+9 -7- )*5# 移 進(jìn)7 0,2,6,4,7 #(E+E -7-9 )*5# r48 0,2,6 #(E -16 )*5# r 19 0,2,6,9 #(E) -16- *5# 移 進(jìn)10 0,1 #E -16 *5# r311 0,1,5 #E* -16- 5# 移 進(jìn) 第 一 節(jié) 概 述四 、 常 見 的 中 間 代 碼 形 式1.四 元 式 形 式( Operat

11、or,Operand1, Operand2, Result)注 : 1) Operand1, Operand2, Result可 能 是 用 戶 自 定 義 的 變量 , 也 可 能 是 編 譯 時(shí) 引 進(jìn) 的 變 量 , 這 里 Operator是 雙 目 運(yùn) 算符 , 若 只 有 一 個(gè) 運(yùn) 算 量 , 則 是 單 目 運(yùn) 算 符 。 2) 四 元 式 中 變 量 采 用 符 號(hào) 表 入 口 的 地 址 , 而 不 用 變 良 的地 址 , 因 為 語 義 分 析 不 僅 需 要 變 量 的 地 址 , 還 需 要 從 符 號(hào) 表查 到 的 變 量 的 屬 性 , 類 型 和 地 址 等

12、。 第 一 節(jié) 概 述v 四 、 常 見 的 中 間 代 碼 形 式v 2.三 元 式v ( Operator,Operand1, Operand2)v 注 : 1) 這 里 三 元 式 本 身 作 為 存 放 結(jié) 果 的 單 元 。 2) 為 了 在 其 它 三 元 式 中 利 用 當(dāng) 前 三 元 式 的 結(jié) 果 ,需 要 對(duì) 三 元 式 進(jìn) 行 遍 號(hào) 。 三 元 式 的 編 號(hào) 就 作 為 相 應(yīng)三 元 式 的 結(jié) 果 值 。 第 一 節(jié) 概 述v四 、 常 見 的 中 間 代 碼 形 式v3、 后 綴 表 示 式 ( 逆 波 蘭 表 示 式 )vOperand1 Operand2 Op

13、eratorv4、 樹 型 表 示 法 Operator Operand2Operand1注 : 常 用 中 間 代 碼 表 示 法 是 四 元 式 第 二 節(jié) 簡 單 算 術(shù) 表 達(dá) 式 和 賦 值 語 句 的 翻 譯v 一 、 賦 值 語 句 的 翻 譯v -僅 含 簡 單 變 量 的 表 達(dá) 式 和 賦 值 語 句 的 翻 譯v 1、 賦 值 語 句 的 文 法v A i=Ev E E+E|E*E|-E|(E)|iv 2、 需 要 的 語 義 過 程v NEWTEMO函 數(shù) : 每 次 使 用 送 回 一 個(gè) 代 表 新 臨 時(shí) 變 量 的序 號(hào) , 可 認(rèn) 為 是 送 回 T1,T2這

14、 樣 的 一 些 臨 時(shí) 變 量 ;v ENTRY(i)函 數(shù) : 用 于 查 變 量 i的 符 號(hào) 表 入 口 地 址 ; v GEN(OP,ARG1,ARG2,RESULT)過 程 : 產(chǎn) 生 一 個(gè) 四 元 式 ,并 填 入 四 元 式 序 列 表 第 二 節(jié) 簡 單 算 術(shù) 表 達(dá) 式 和 賦 值 語 句 的 翻 譯v一 、 賦 值 語 句 的 翻 譯v3、 需 要 的 語 義 變 量vE PLACE:與 非 終 結(jié) 符 E相 聯(lián) 系 的 語 義 變 量v-值 為 某 變 量 的 符 號(hào) 表 入 口 地 址 或 臨 時(shí) 變 量序 號(hào) 。v-它 與 文 法 的 非 終 結(jié) 符 相 聯(lián) ,

15、 分 析 過 程 就 建立 , 不 需 要 就 消 亡 。 v 產(chǎn) 生 式 語 義 子 程 序v (1)A i=E GEN(=,E PLACE,_,ENTRY(i)v (2)E -E(1) T=NEWTEMP;v - GEN(,E(1) PLACE,_,T);v - E PLACE=Tv (3)E E(1)*E(2) T=NEWTEMP;v GEN(*,E(1) PLACE,E(2) PLACE,T);v E PLACE=Tv (4)E E(1)+E(2) T=NEWTEMP;v GEN(+,E(1) PLACE,E(2) PLACE,T);v E PLACE=Tv (5)E (E(1) E

16、PLACE=E(1) PLACEv (6)E i E PLACE=ENTRY(i) 輸 入 符 號(hào) 串 SYM棧 PLACE棧 生 成 四 元 式A=-B*(C+D)#=-B*(C+D)# i -B*(C+D)# i= -B*(C+D)# i=- -*(C+D)# i=-i -*(C+D)# i=-E -B*(C+D)# i=E -T1 (,B,-,T1)(C+D)# i=E* -T 1-C+D)# i=E*( -T1-+D)# i=E*(i -T1-C+D)# i=E*(E -T1-C v 注 : 1、 符 號(hào) 棧 是 為 了 介 紹 才 列 出 的 , 實(shí) 際 上 不 存在 。v 2、 由

17、 于 語 義 分 析 是 在 語 法 分 析 的 過 程 中 進(jìn) 行 的 ,所 以 狀 態(tài) 棧 實(shí) 際 上 是 需 要 的 , 這 里 沒 有 寫 出 來 。v 3、 這 個(gè) 分 析 過 程 是 針 對(duì) 整 型 變 量 做 的 。 實(shí) 際 上 在一 個(gè) 表 達(dá) 式 中 , 可 能 出 現(xiàn) 各 種 不 同 類 型 的 變 量 或 常量 , 所 以 , 編 譯 程 序 要 么 拒 絕 接 受 某 種 混 合 運(yùn) 算 ,要 么 能 產(chǎn) 生 有 關(guān) 類 型 轉(zhuǎn) 換 的 指 令 。 第 二 節(jié) 簡 單 算 術(shù) 表 達(dá) 式 和 賦 值 語 句 的 翻 譯v 類 型 轉(zhuǎn) 換v 對(duì) 于 表 達(dá) 式 文 法 中

18、 的 i是 實(shí) 型 又 可 以 是 整 型 。v 對(duì) 這 種 混 合 運(yùn) 算 , 我 們 要 先 把 整 型 量 轉(zhuǎn) 化 為 實(shí) 型 量 , 就 需 要為 每 個(gè) 非 終 結(jié) 符 的 語 義 值 添 加 類 型 信 息 , 用 E MODE表 示 非 終結(jié) 符 E的 類 型 信 息 。v 1、 定 義 各 非 終 結(jié) 符 的 類 型 信 息v 產(chǎn) 生 式 E E(1)op E(2)的 語 義 動(dòng) 作 中 要 加 入 關(guān) 于 E MODE的 語義 規(guī) 則 的 定 義 ;v -IF E(1) MODE=int AND E(2) MODE=intv -IF E MODE=int ELSE E MOD

19、E=r 第 二 節(jié) 簡 單 算 術(shù) 表 達(dá) 式 和 賦 值 語 句 的 翻 譯v 2、 對(duì) 運(yùn) 算 量 進(jìn) 行 類 型 轉(zhuǎn) 換v 例 如 : X=Y+I*J,其 中 X,Y是 實(shí) 型 , I,J是 整 型 。v 其 四 元 式 為 :v -(*I,I,J,T1)v -(itr,T1,_,T2)v -(+r,Y,T2,T3)v -(=,T3,_,X) 第 二 節(jié) 簡 單 算 術(shù) 表 達(dá) 式 和 賦 值 語 句 的 翻 譯v注 : 1)對(duì) 運(yùn) 算 符 也 要 指 出 相 應(yīng) 的 類 型 ( 運(yùn) 算符 上 加 角 標(biāo) ) , 說 明 是 定 點(diǎn) 還 是 浮 點(diǎn) 遠(yuǎn) 算 。v2)由 于 非 終 結(jié) 符

20、 E的 語 義 值 有 E PLACE和 E MODE兩 個(gè) , 這 兩 者 都 要 保 存 在 語 義 棧 中 。v3)在 運(yùn) 算 量 的 類 型 較 多 的 情 況 下 , 需 要 仔 細(xì)推 敲 語 義 規(guī) 則 , 否 則 語 義 子 程 序 會(huì) 變 置 累 贅不 填 。 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 一 、 布 爾 表 達(dá) 式 在 程 序 設(shè) 計(jì) 語 言 中 的 作 用v -用 作 控 制 語 句 中 的 條 件 表 達(dá) 式v -用 于 邏 輯 賦 值 語 句 中 布 爾 表 達(dá) 式 演 算v 二 、 布 爾 表 達(dá) 式 的 組 成v -由 布 爾 算 符 作 用 于 布

21、 爾 變 量 ( 或 常 量 ) 或 關(guān) 系 表達(dá) 式 而 形 成 的 。v -布 爾 算 符 : , , v -關(guān) 系 表 達(dá) 式 的 形 式 : E(1)rop E(2),其 中 rop是 關(guān)系 運(yùn) 算 符 ( 如 ,=,=,=,), E (1)和 E(2)是 算 術(shù)表 達(dá) 式 。 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v三 、 布 爾 表 達(dá) 式 的 文 法 :v -G(B):E E E|E E| E|(E)|i|Ea rop Eav -i為 布 爾 變 量 或 常 量 ; Ea為 算 術(shù) 表 達(dá) 式 。v 注 : 1)此 文 法 為 二 義 文 法 , 一 般 布 爾 算 符 的

22、優(yōu) 先 順 序?yàn)?: , , 服 從 左 結(jié) 合 律 ; 關(guān) 系 運(yùn) 算 優(yōu) 先 級(jí) 別 高 于 布 爾 運(yùn)算 。v 2)由 于 布 爾 表 達(dá) 式 有 兩 種 用 途 , 所 以 有 兩 種 不 同 的 翻 譯方 法 。 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v四 、 布 爾 表 達(dá) 式 在 邏 輯 演 算 中 的 翻 譯v1、 語 義 子 程 序v由 于 布 爾 表 達(dá) 式 演 算 與 算 術(shù) 表 達(dá) 式 計(jì) 算 非 常類 似 , 可 以 仿 照 算 術(shù) 表 達(dá) 式 的 翻 譯 方 法 , 為每 個(gè) 產(chǎn) 生 式 寫 出 語 義 子 程 序 。 v 產(chǎn) 生 式 語 義 子 程 序v (1

23、)E Ea(1)ropEa(2) T=NEWTEMP;v GEN(rop,Ea(1) PLACE,Ea(2) PLACE,T);v E PLACE=Tv (2)E Ea(1)bopEa(2) T=NEWTEMP; GEN(bop,Ea(1) PLACE,Ea(2) PLACE,T);v E PLACE=Tv (3)E E(1) T=NEWTEMP;v GEN( ,E(1) PLACE,_,T);v E PLACE=Tv (4)E (E(1) E PLACE=E(1) PLACEv (5)E i E PLACE=ENTRY(i) 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 四 、 布 爾 表

24、達(dá) 式 在 邏 輯 演 算 中 的 翻 譯v 2、 實(shí) 例 : 對(duì) 布 爾 式 X+YZ A ( B C) 進(jìn) 行 翻譯 :v 解 : 語 法 制 導(dǎo) 翻 譯 是 在 語 法 分 析 下 的 過 程 中 進(jìn) 行 的 ,若 利 用 G(B)文 法 的 LR分 析 表 對(duì) 上 句 進(jìn) 行 LR分 析 , 在其 過 程 中 進(jìn) 行 語 義 分 析 ; 則 得 到 對(duì) 上 句 進(jìn) 行 LR分 析 ,在 其 過 程 中 進(jìn) 行 語 義 分 析 ; 則 得 到 的 四 元 式 序 列 是 :v -(+,X,Y,T1);E+E進(jìn) 行 歸 約 , 識(shí) 別 了 算 術(shù) 運(yùn) 算v -(,T1,Z,T2);EE進(jìn)

25、行 歸 約 , 識(shí) 別 了 關(guān) 系 運(yùn) 算v -( ,B,_,T3); E歸 約v -( ,T 3,C,T4);E E進(jìn) 行 歸 約v -( ,A,T4,T5); E E進(jìn) 行 歸 約v -( ,T2,T5,T6); E E進(jìn) 行 歸 約 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 注 : 上 面 的 翻 譯 質(zhì) 量 并 不 高 , 可 以 采 取 某 種 優(yōu) 化 措施 :v 例 如 :v 對(duì) A B.若 已 知 A的 值 是 1.那 么 B的 值 就 不 需 要 知 道就 能 得 出 A B=1;v -可 以 表 示 為 : IF A THEN TRUE ELSE Bv 對(duì) A B若 已

26、知 A的 值 是 0, 那 么 B的 值 就 不 需 要 知 道就 錯(cuò) 得 出 A B=0;v -可 以 表 示 為 : IF A THEN FALSE ELSE TRUE 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 五 、 控 制 語 句 中 布 爾 式 的 翻 譯v 1、 控 制 語 句 中 布 爾 式 并 不 需 要 計(jì) 算 表 達(dá) 式 的 值 ,只 用 if-then-else來 解 釋 , , ,以 來 控 制程 序 流 向 。v If E then S1 else S2 E的 代 碼 序 列S1的 代 碼 序 列S 2的 代 碼 序 列 假真 第 三 節(jié) 布 爾 表 達(dá) 式 的

27、翻 譯v 五 、 控 制 語 句 中 的 布 爾 式 的 翻 譯v 2、 控 制 語 句 中 的 布 爾 式 的 翻 譯 的 四 元 式 為 以 下 三種 :v (juz,A1,_,P - if A1 then goto P (jQ,A1,A2, - if A1QA2 then goto P (j,_,_,P) -Goto P注 : 這 些 四 元 式 都 是 轉(zhuǎn) 移 四 元 式 , 其 中 P為 出 口 的 四元 式 序 號(hào) , 與 E的 真 假 值 相 對(duì) 應(yīng) 的 分 別 為 真 出 口 和假 出 口 兩 類 四 元 式 。 v 例 如 : 把 語 句 if A BD then S1 el

28、se S2翻 譯 成 四元 式v 解 :(1)(jnz,A,_,(5);真 出 口 ;若 A為 真 ,執(zhí) 行 S1代 碼v (2)(j,_,(3);若 A為 假 , 看 右 邊 的 表 達(dá) 式 值v (3)(j,B,D,(5);真 出 口 , 右 邊 的 表 達(dá) 式 值 為 真v (4)(j,_,_,(p+1);假 出 口 , 右 邊 的 表 達(dá) 式 值 為 假v (5)S1語 句 的 第 一 個(gè) 四 元 式v .v (p)(j,_,_,(q);執(zhí) 行 完 S1代 碼 后 跳 過 S2代 碼 段 v (p+1)S2語 句 的 第 一 個(gè) 四 元 式v .v (q)此 語 句 的 后 繼 語 句

29、 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 五 、 控 制 語 句 中 布 爾 式 的 翻 譯v 4、 增 加 語 義 值v E TC、 E FC的 值 也 可 以 放 在 語 義 棧 中 , 即 下 推 棧 又增 加 了 兩 欄 . E(1).S 0 # _ _ _S SYM PLACE TC FC分 析 棧 語 義 棧 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 五 、 控 制 語 句 中 布 爾 式 的 翻 譯v 5、 文 法 G(B)各 產(chǎn) 生 式 的 語 義 子 程 序v -文 法 : E EAE|E0E| E|(E)|i|EaropEav EA Ev E0 Ev 語 義 子

30、程 序 :v -(1)E i E TC=NXQ; E FC=NXQ+1;v - GEN(jnz,ENTRY(i),_,O);v - GEN(j,_,_,O) v -注 : 將 布 爾 型 操 作 數(shù) 進(jìn) 行 歸 約 , 產(chǎn) 生 兩 個(gè) 四 元 式 ;v 無 論 真 假 都 不 知 該 轉(zhuǎn) 到 哪 個(gè) 四 元 式 上 去 , 故 轉(zhuǎn) 向 0 v例 如 : 將 控 制 語 句 中 的 A BD v翻 譯 成 四 元 式v解 :(1)(jnz,A,_,0);真 出 口 ;v (2)(j,_,_,0);若 A為 假 ,看 右 邊 的 表 達(dá)式 的 值v TC:1;v FC:2; 第 三 節(jié) 布 爾 表

31、 達(dá) 式 的 翻 譯v 五 、 控 制 語 句 中 布 爾 式 的 翻 譯v 5、 文 法 G(B)各 產(chǎn) 生 式 的 語 義 子 程 序v (7)E0 E(1)v - BACKPATCH(E(1) FC,NXQ);v - E0 TC=E(1) TC;v 注 : 對(duì) 進(jìn) 行 歸 約 之 后 , 若 E(1)=0,則 運(yùn) 算 的 結(jié) 果就 要 看 右 邊 式 子 的 值 了 , 所 以 表 示 E(1)=0的 四 元式 應(yīng) 轉(zhuǎn) 移 到 歸 約 后 的 下 一 個(gè) 四 元 式 , 即 判 斷 右邊 式 子 的 值 的 第 一 個(gè) 四 元 式 。 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 五 、

32、 控 制 語 句 中 布 爾 式 的 翻 譯v 5、 文 法 G(B)各 產(chǎn) 生 式 的 語 義 子 程 序v PROCEDURE BACKPATCH(p,t)v Q=P;v WHILE (Q0)v q=四 元 式 Q第 四 段 的 內(nèi) 容 ;v 把 t填 入 四 元 式 Q的 第 四 段 ;v Q=q;v 注 : 其 算 法 思 想 是 : 從 鏈 頭 算 起 , 邊 找 邊 讀 , 直 到鏈 尾 為 止 。 v例 如 : 將 控 制 語 句 中 的 A BD v翻 譯 成 四 元 式v解 :(1)(jnz,A,_,0);真 出 口 ;v (2)(j,_,_,(3);若 A為 假 , 看 右

33、 邊 的 表達(dá) 式 的 值v E0 TC:1;vFC已 回 填 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v五 、 控 制 語 句 中 布 爾 式 的 翻 譯v5、 文 法 G(B)各 產(chǎn) 生 式 的 語 義 子 程 序 (2)E EaropEa- E TC=NXQ; E FC=NXQ+1;- GEN(jrop,Ea(1) PLACE,Ea(2) PLACE,0);- GEN(j,_,_,0) v 例 如 : 將 控 制 語 句 中 的 A BD v 翻 譯 成 四 元 式v 解 :(1)(jnz,A,_,0);真 出 口v (2)(j,_,_,(3);若 A為 假 ,看 右 邊 的 表 達(dá)

34、式 值v (3)(j,B,D,0);真 出 口 , 右 邊 的 表 達(dá) 式 值 為 真v (4)(j,_,_,0);假 出 口 , 右 邊 的 表 達(dá) 式 值 為 假v E TC:3;v E FC:4; 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v五 、 控 制 語 句 中 布 爾 式 的 翻 譯v5、 文 法 G(B)各 產(chǎn) 生 式 的 語 義 子 程 序v(8) E E0E(2)v- E FC=E(2) FC;v - E TC=MERG(E0 TC, E(2) TCv 注 : 由 于 E的 真 假 決 定 于 E(2)為 假 時(shí) 它 們 的 轉(zhuǎn) 移 相 同 ;由 于 E(1)或 E(2)為

35、 真 時(shí) 都 導(dǎo) 致 問 真 , 所 以 它 們 為 真 的情 況 要 合 并 起 來 。 v 例 如 : 將 控 制 語 句 中 的 A BD v 翻 譯 成 四 元 式v 解 :(1)(jnz,A,_,0);真 出 口v (2)(j,_,_,(3);若 A為 假 ,看 右 邊 的 表 達(dá) 式 值v (3)(j,B,D,0);真 出 口 , 右 邊 的 表 達(dá) 式 值 為 真v (4)(j,_,_,0);假 出 口 , 右 邊 的 表 達(dá) 式 值 為 假v E TC:3, 1;v E FC:4; v FUNCTION MERG(P1,P2);v IF P2=0v MERG=P1v WHILE

36、 四 元 式 P的 第 4段 內(nèi) 容 不 為 0v P=四 元 式 P的 第 4段 內(nèi) 容 ;v 把 P1填 進(jìn) 四 元 式 P的 第 四 段 ;v MERG=P2;v 注 : 算 法 思 想 : 找 到 P2的 鏈 尾 , 然 后 將 P1連 接 到 P2的 鏈 尾 。 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v (3)E (E(1) E TC=E(1) TC; E FC=E(1) FCv (4)E E(1) E TC=E(1) FC; E FC=E(1) FCv (5)EA E(1)v - BACKPATCH(E TC,NXQ);v - EA FC=E(1) FC;v (6)E EAE(

37、2)v - E TC=E(1) TC;v - E FC=MERG(EA FC,E(2) FC 第 三 節(jié) 布 爾 表 達(dá) 式 的 翻 譯v 五 、 控 制 語 句 中 布 爾 式 的 翻 譯v 例 如 : 將 布 爾 式 A B C在 語 法 制 導(dǎo) 下 翻 譯 成 四 元 式 。INPUT SYM TC FC 四 元 式A B C# # - - B C# #i - - B C# #E -1 -2 1.(jnz,a,_,(3)B C# #E -1- -2- 2.(j,_,_.(5)B C# #EA - -2 C# #EAi - -2- INPUT SYM TC FC 四 元 式 C# #EAE

38、 -3 -24 3.(jnz,B,_,0) C# #E -3 -4 4.(j,_,_,(5) C# #E -3- -4- C# #E0 -3 - - C# #E0 -3- -# #E0 i -3- -# #E0 E -3-5- -6 5.(jnz,C,_,0)# #E0E -36 -5 5.(j,_,_,(3)# #E -6 -5成 功 第 四 節(jié) 控 制 語 句 的 翻 譯v 一 、 控 制 語 句 的 種 類 :v 無 條 件 轉(zhuǎn) 換 語 句v 條 件 語 句v 迭 代 語 句v 循 環(huán) 語 句v 分 支 語 句 第 四 節(jié) 控 制 語 句 的 翻 譯v 二 、 標(biāo) 號(hào) 和 轉(zhuǎn) 移 語 句

39、 (GOTO)v 1、 標(biāo) 號(hào) 和 轉(zhuǎn) 移 語 句 (GOTO)v (1)標(biāo) 號(hào) 語 句v -GOTO語 句 實(shí) 現(xiàn) 無 條 件 轉(zhuǎn) 移 , 要 確 定 轉(zhuǎn) 移 的 目 的 語 句 , 需要 給 語 句 加 標(biāo) 號(hào) 。v -帶 標(biāo) 號(hào) 的 語 句 形 式 : L:Sv L是 標(biāo) 號(hào)v (2)標(biāo) 號(hào) 的 定 義 和 使 用 :v -先 定 義 后 使 用 L:S .GOTO Lv -先 使 用 后 定 義 GOTO LL:S 第 四 節(jié) 控 制 語 句 的 翻 譯v 2、 先 定 義 后 使 用v (1)形 式 : L:Sv - .v - GOTO Lv - .v (2)定 義 和 使 用 表

40、號(hào) 的 文 法v - S goto Lv - Label i:v (3)翻 譯 過 程 : v -當(dāng) 遇 到 定 義 性 的 標(biāo) 號(hào) 語 句 時(shí) , 將 L歸 約 為 Label,再 將 L填 入 符 號(hào) 表 , 如 下 : NAME INFORMATIONCAT . 定 義 否 地 址 .L 標(biāo) 號(hào) 已 S.QUAD.S.QUAD:即 S對(duì) 應(yīng) 的 入 口 四 元 式 序 號(hào) 。當(dāng) 后 面 遇 到 GOTO L語 句 時(shí) , 便 產(chǎn) 生 四 元 式 :(j,_,_,P), 其 中 P=S.QUAD v 2、 先 使 用 后 定 義v (1)形 式 : GOTO Lv - v - GOTO L

41、v - .v - GOTO Lv - .v - L :Sv (2)翻 譯 過 程 :v -由 于 這 里 是 先 使 用 , 所 以 當(dāng) 遇 到 標(biāo) 號(hào) L 時(shí) ,它 還 未 定 義 , 故 而 填 入 符 號(hào) 表 時(shí) 情 況 與 上 不 同 , 表如 下 : NAME INFORMATIONCAT . 定 義 否 地 址 .L 標(biāo) 號(hào) 未 P.(2)翻 譯 過 程 :(a)填 符 號(hào) 表 : 將 定 義 否 欄 填 “ 未 ” , 地 址 檔 暫 填 即將 生 成 的 四 元 式 序 號(hào) P,CAT欄 填 “ 標(biāo) 號(hào) ” ;(b)生 成 四 元 式 (P) (j,_,_,0),等 待 回 填

42、 ; NAME INFORMATIONCAT . 定 義 否 地 址 .L 標(biāo) 號(hào) 未 q.(c)當(dāng) 遇 到 第 2個(gè) 使 用 性 標(biāo) 號(hào) L 時(shí) , 修 改 符 號(hào) 表 , 僅將 L 這 一 行 的 地 址 欄 內(nèi) 容 修 改 為 即 將 生 成 的 四 元 式序 號(hào) q; (b)生 成 四 元 式 (q) (j,_,_,P),其 中 第 四 段 的 P取 自符 號(hào) 表 的 地 址 欄 在 修 改 前 的 內(nèi) 容 , 即 形 成 一 個(gè) 需 要回 填 的 鏈 , 不 斷 重 復(fù) (c)(d). NAME INFORMATIONCAT . 定 義 否 地 址 .L 標(biāo) 號(hào) 未 r.(p) (j

43、,_,_,0)(q) (j,_,_,p)(r) (j,_,_,q) 第 四 節(jié) 控 制 語 句 的 翻 譯v 二 、 標(biāo) 號(hào) 和 轉(zhuǎn) 移 語 句 (GOTO)v 2、 先 使 用 后 定 義v (2)翻 譯 過 程 :v -e)當(dāng) 定 義 性 語 句 L :S出 現(xiàn) 時(shí) , 用 S語 句 所 對(duì) 應(yīng) 的 第 一 個(gè)四 元 式 序 號(hào) 回 填 這 個(gè) 鏈 , 即 使 用 BACKPATCH過 程 。v -注 : 此 鏈 表 的 鏈 首 在 符 號(hào) 表 的 相 應(yīng) 行 的 地 址 欄 內(nèi) 。v (3)形 式 化 的 語 義 子 程 序 :v -產(chǎn) 生 式 語 義 子 程 序v - S goto L

44、 程 序 1v -label i: 程 序 2 v -查 符 號(hào) 表 :v -若 L不 在 表 中 , 在 表 中 建 L這 行 , CAT欄 置 標(biāo) 號(hào) ,定 義 否 填 “ 未 ” , 地 址 為 NXQ;GEN(j,_,_,0);v -若 L在 表 中 , 但 未 定 義 , 則 ;P=L 地 址 ; L.地 址 為 NXQ;GEN(j,_,_,p); -若 L在 表 中 , 已 定 義 , 則 :P=L.地 址 ; GEN(j,_,_,p); - v -查 符 號(hào) 表 :v -若 L不 在 表 中 , 在 表 中 建 L這 行 , CAT欄 置 標(biāo) 號(hào) , 定 義 否填 “ 已 ” ,

45、 地 址 為 NXQ;v -若 L已 在 表 中 , 但 定 義 否 填 “ 已 ” 或 CAT標(biāo) 號(hào) , 則 出 錯(cuò) ; -否 則 , 將 定 義 否 改 為 “ 已 ” ; -q=L.地 址 ; -BACKPATCH(q.NXQ); -L.地 址 =NXQ; - 第 四 節(jié) 控 制 語 句 的 翻 譯v 三 、 IF語 句 的 翻 譯v 1、 描 述 IF語 句 的 文 法v -S if E then S(1)v -S if E then S(1) else S(2)v 2、 IF語 句 的 翻 譯v -(1)完 成 對(duì) 布 爾 式 E的 翻 譯 , 獲 得 一 元 四 元 式 ,并 留

46、下 兩 個(gè) 待 續(xù) 的 語 義 值 E EC, E FC;v -(2)掃 描 完 then之 后 , 就 得 到 了 E的 真 出 口 , 用BACKPATCH(E EC,NXQ)過 程 或 填 ;v -(3)翻 譯 S (1), 它 可 能 會(huì) 是 任 何 一 種 語 句 , 總 可以 遞 歸 地 調(diào) 用 語 句 翻 譯 過 程 來 完 成 , 得 到 一 組 四 元式 序 列 ; 第 四 節(jié) 控 制 語 句 的 翻 譯v 三 、 IF語 句 的 翻 譯v 2、 IF語 句 的 翻 譯v -(4)若 遇 到 else, 表 示 S(1)已 翻 譯 完 , 應(yīng) 無 條 件生 成 一 條 GOT

47、O四 元 式 (j,_,_,0)轉(zhuǎn) 到 S(2)語 句 后 面 ,以 示 這 個(gè) IF語 句 已 執(zhí) 行 結(jié) 束 。 但 這 個(gè) 無 條 件 轉(zhuǎn) 移 語句 究 竟 轉(zhuǎn) 到 什 么 地 方 去 ,是 不 確 定 的 .甚 至 在 翻 譯 完S(2)語 句 之 后 也 不 一 定 確 定 下 來 。 遇 到 else還 表 示已 獲 得 E的 假 出 口 。v 例 如 : 語 句v -if E1 then if E2 then S1 else S2 else S3v 注 : 由 于 轉(zhuǎn) 移 指 令 的 轉(zhuǎn) 移 目 標(biāo) 只 能 等 到 出 口 明 朗 了才 能 回 填 。 此 時(shí) 應(yīng) 把 該 待 填

48、 的 四 元 式 序 號(hào) 并 鏈 后 存在 與 代 表 整 個(gè) 語 句 的 非 終 結(jié) 符 S相 聯(lián) 系 的 語 義 棧 S CHAIN中 。 第 四 節(jié) 控 制 語 句 的 翻 譯v 三 、 IF語 句 的 翻 譯v 2、 IF語 句 的 翻 譯v (4)若 不 遇 到 else, 那 么 布 爾 式 的 假 出 口 與 S(1)的 結(jié)束 出 口 都 表 示 IF語 句 的 結(jié) 束 。v (5)翻 譯 S(2)語 句 成 四 元 式 序 列 。 它 執(zhí) 行 過 后 也 表 示IF語 句 應(yīng) 該 結(jié) 束 了 , 它 的 結(jié) 束 出 口 和 S(1)是 一 樣 的 ,可 將 它 們 出 口 并

49、鏈 , 鏈 首 置 于 S CHAIN.v 姑 , 條 件 語 句 翻 譯 之 后 , 除 了 生 成 相 應(yīng) E,S(1),S(2)的 四 元 式 之 外 , 還 剩 下 一 個(gè) 待 填 語 句 鏈 , 鏈 首 在 S CHAIN中 , 出 口 明 確 后 接 此 回 填 。 第 四 節(jié) 控 制 語 句 的 翻 譯v 三 、 IF語 句 的 翻 譯v 3、 改 寫 產(chǎn) 生 式v S if E then S(1)else S(2)改 寫 為 :- C if E then- T C S(1)else- S T S(2) S if E then S(1)改 寫 為 :- C if E then-

50、S CS(1) 第 四 節(jié) 控 制 語 句 的 翻 譯v 三 、 IF語 句 的 翻 譯v 4、 語 義 子 程 序v C if E then BACKPATCH(E EC,NXQ); C CHAIN=E FC; T CS(1) else q=NXQ;GEN(j,_,_,0); BACKPATCH(C CHAIN,NXQ); T CHAIN=MERG(S(1) CHAIN,q) S TS(2) S CHAIN=MERG(T CHAIN, S(2) CHAIN) S CS(1) S CHAIN=MERG(T CHAIN, S(2) CHAIN) 第 四 節(jié) 控 制 語 句 的 翻 譯v 例 如

51、: 翻 譯 無 條 件 嵌 套 語 句 :v if a thenv if b thenv A:=2v else A:=3v ELSE if c thenv A:=4v Else A:=5v 翻 譯 成 四 元 式 為 : (1)(jnz,a,_,0)(2)(j,_,_,0)(3)(jnz,b,_,0)(4)(j,_,_,0)(5)(:=,2,_,A)(6)(j,_,_,0)(7)(:=,3,_,A)(8)(j,_,_,0) 第 四 節(jié) 控 制 語 句 的 翻 譯v (1)(jnz,a,_,0)v (2)(j,_,_,0)v (3)(jnz,b,_,0)v (4)(j,_,_,0)v (5)(:

52、=,2,_,A)v (6)(j,_,_,0)v (7)(:=,3,_,A)v (8)(j,_,_,0) (8)(j,_,_,6)(9)(jnz,c,_,11)(10)(j,_,_,13)(11)(:=,4,_,A)(12)(j,_,_,8)(13)(:=,5,_.A) aS 4(A:=5) bS1(A:=2)S2(A:=3)cS 3(A:=4) 1,23,49,101113751286 TRUEFALSE if a then if b then A:=2 else A:=3ELSE if c then A:=4 Else A:=5 第 四 節(jié) 控 制 語 句 的 翻 譯v 四 、 WHILE語

53、 句 的 翻 譯v 1、 WHILE語 句 的 文 法v S while E do S(1)v 2、 WHILE 語 句 的 翻 譯 思 想v (1)翻 譯 E代 碼 段 , 并 留 兩 個(gè) 待 填 的 E TC,E TC鏈v (2)掃 描 過 do之 后 , 就 可 以 回 填 E TCv (3)翻 譯 S(1)成 代 碼 段 ,S(1)翻 譯 之 后 , 應(yīng) 無 條 件 轉(zhuǎn) 到E代 碼 段 的 第 一 條 四 元 式 。v : 1)因 此 ,開 始 翻 譯 while語 句 時(shí) , 應(yīng) 留 下 第 一 條 四元 式 序 號(hào) , 以 備 S(1)翻 譯 之 后 用 。v 2)E為 假 時(shí) 需

54、 回 填 , 此 時(shí) E TC作 為 S CHAIN一 部 分 ,以 便 回 填 。 第 四 節(jié) 控 制 語 句 的 翻 譯v四 、 WHILE語 句 的 翻 譯v3、 改 寫 產(chǎn) 生 式v S while E do S(1)改 寫 為 :v- W whilev- Wd WE dov- S Wd S(1) 第 四 節(jié) 控 制 語 句 的 翻 譯v 4、 語 義 子 程 序v W while W QUAD=NXQv Wd WE do BACKPATCH(E FC,NXQ);v - Wd CHAIN=E FC;v - Wd QUAD=W QUAD;v S WdS(1) BACKPATCH(S(1)

55、 CHAIN,Wd QUAD);v - GEN(j,_,_,Wd QUAD);v - S CHAIN= Wd CHAIN 第 四 節(jié) 控 制 語 句 的 翻 譯v 例 如 : 翻 譯v While(AB) dov If (CD) thenv X:=Y+Z;v 翻 譯 為 : (100)(j,A,B,0)v (101)(j,_,_,0)v (102)(j,C,D,0)v (103)(j,_,_,(100)v (104)(+,Y,Z,T1)v (105)(:=,T 1,_,X)v (106)(j,_,_,(100) 第 四 節(jié) 控 制 語 句 的 翻 譯v七 、 復(fù) 合 語 句 的 翻 譯v1、

56、文 法vS begin L endvL SvL LSSvLS L 第 四 節(jié) 控 制 語 句 的 翻 譯v 七 、 復(fù) 合 語 句 的 翻 譯v 2、 語 義 子 程 序v (1)L S L CHAIN=S CHAIN;v (2)LS L BACKPATCH(L CHAIN,NXQ);v (3)L LSS L CHAIN=S CHAIN;v (4)S begin L endv - BACKPATCH(L CHAIN,NXQ);v - S CHAIN=0; 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 一 、 數(shù) 組 及 其 下 標(biāo) 變 量 地 址 的 計(jì) 算v 1、

57、 數(shù) 組 分 類 :v -一 維 數(shù) 組 , 二 維 數(shù) 組 , 多 維 數(shù) 組v -確 定 數(shù) 組 , 可 變 數(shù) 組 :v 根 據(jù) 數(shù) 組 所 需 存 儲(chǔ) 空 間 是 否 在 編 譯 時(shí) 就 已 知 道v 2、 多 維 數(shù) 組 的 存 放v -按 行 存 放v -按 列 存 放 ( FORTRAN) v -只 要 知 道 數(shù) 組 的 首 地 址 , 及 每 個(gè) 數(shù) 組 元 素 占 多少 內(nèi) 存 單 元 , 就 可 計(jì) 算 出 任 一 數(shù) 組 元 素 的 地 址 。 v 例 如 : 2維 數(shù) 組 定 義 為 :v -ArrayL1:u1,L2:u2v -令 di=ui-Li+1,i=1,2,

58、 稱 為 每 一 維 尺 寸v -D=a+(i1-L1)d2+(i2-L2)*/*m為 每 個(gè) 元 素 所 占 尺寸 */v 改 寫 為 D=CONSPART+VARPARTv -CONSPART=a-Cv C=(L1d2+L2)*mv -VARPART=(i1d2+i2)*m v:CONSPART稱 作 不 變 部 分 , 它 和 數(shù) 組 下 標(biāo) 無 關(guān) ,只 和 各 維 尺 寸 和 下 界 有 關(guān) ; 只 需 計(jì) 算 一 次 ,其 中 C在 編 譯 時(shí) 就 可 算 出 。vVARPART稱 作 可 變 部 分 , 它 和 數(shù) 組 下 標(biāo) 有 關(guān) ,必 須 根 據(jù) 下 標(biāo) 值 , 轉(zhuǎn) 換 成

59、 相 應(yīng) 代 碼 , 待 運(yùn) 行時(shí) 計(jì) 算 出 。 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 一 、 數(shù) 組 及 其 下 標(biāo) 變 量 地址 的 計(jì) 算v 3、 編 譯 程 序 對(duì) 數(shù) 組 說 明 的處 理v 當(dāng) 遇 到 數(shù) 組 說 明 時(shí) , 必 須把 數(shù) 組 的 有 關(guān) 信 息 記 錄 在一 張 “ 內(nèi) 情 向 量 ” 表 中 ,以 便 以 后 計(jì) 算 數(shù) 組 下 標(biāo) 變量 地 址 時(shí) 引 用 這 些 信 息 。v 內(nèi) 情 向 量 表 的 結(jié) 構(gòu) : 一 維 數(shù) , 各 維 上 下 界 , 首 地址 , 類 型 L1 u1 d1L2 u2 d2. . .Ln

60、un dnn Ctype a 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 一 、 數(shù) 組 及 其 下 標(biāo) 變 量 地 址 的 計(jì) 算v 3、 編 譯 程 序 對(duì) 數(shù) 組 說 明 的 處 理v 1)對(duì) 于 確 定 的 數(shù) 組 來 說 : 內(nèi) 情 向 量 可 登 記 在 編 譯 時(shí)的 符 號(hào) 表 中 ;v 2)對(duì) 于 可 變 數(shù) 組 來 說 :v (1)內(nèi) 情 向 量 在 編 譯 時(shí) 無 法 知 道 , 只 有 在 運(yùn) 行 時(shí) 才能 算 出 來 ;v 因 此 , 編 譯 程 序 必 須 為 可 變 數(shù) 組 設(shè) 置 一 個(gè) 存 儲(chǔ) 空 間 ,以 便 運(yùn) 行 對(duì) 建 立

61、相 應(yīng) 的 內(nèi) 情 向 量 表 。v (2)這 樣 ,就 必 須 在 編 譯 時(shí) 為 運(yùn) 行 程 序 準(zhǔn) 備 好 調(diào) 用 的運(yùn) 行 子 程 序 , 我 們 不 作 討 論 。 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 二 、 確 定 數(shù) 組 的 數(shù) 組 元 素 引 用 的 中 間 代 碼 形 式v 1、 訪 問 數(shù) 組 元 素 可 設(shè) 想 為 :v 把 它 的 VARPART計(jì) 算 在 某 一 變 址 單 元 T中 , 用CONSPART作 為 “ 基 礎(chǔ) ” 。 然 后 以 變 址 方 式 訪 問 存 儲(chǔ)單 元 -CONPARTT,靜 態(tài) 數(shù) 組 CONSPA

62、RT=a-C,C可 以從 內(nèi) 情 向 量 表 中 查 到 , 而 a在 運(yùn) 行 時(shí) 一 定 可 確 定 下來 , 所 以 可 以 生 成 a-C代 碼 , 待 運(yùn) 行 時(shí) 再 確 定 。 假定 T1是 用 于 存 放 CONSPART的 臨 時(shí) 單 元 , T1=a-C那 么用 T1T表 示 數(shù) 組 元 素 的 地 址 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 三 、 按 行 存 放 的 賦 值 語 句 中 的 數(shù) 組 元 素 的 翻 譯v 2、 訪 問 數(shù) 組 元 素v 引 用 數(shù) 組 元 素 :v -( = , T1,T,_,X)v :這 是 一 個(gè) 變 址

63、 取 數(shù) 組 四 元 式 。v 含 義 相 當(dāng) 于 X=T1T.v 對(duì) 數(shù) 組 元 素 賦 值 :v -( =,X,_,T1T) v :這 是 一 個(gè) 變 址 存 數(shù) 四 元 式 。 含 義 相 當(dāng) 于 : T1J=X 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 三 、 按 行 存 放 的 賦 值 語 句 中 的 數(shù) 組 元 素 的 翻 譯v 1、 文 法v -A V:=Ev -V iElist|iv -Elist Elist,E|Ev -E E op E|(E)|V/*op表 示 各 種 算 術(shù) 運(yùn) 算*/v : V可 以 是 簡 單 變 量 也 可 以 是 下

64、 標(biāo) 變 量 . v 這 個(gè) 遞 歸 定 義 可 形 成 數(shù) 組 嵌 套 數(shù) 組 結(jié) 構(gòu) . 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 三 、 按 行 存 放 的 賦 值 語 句 中 的 數(shù) 組 元 素 的 翻 譯v 2、 文 法 改 寫v -A V:=Ev -V Elist|Iv -Elist Elist(1),E|iEv -E EopE|(E)|Vv 注 : 把 數(shù) 組 名 i和 最 左 下 標(biāo) 表 達(dá) 式 寫 在 一 起 就 表 示為 數(shù) 組 i開 始 計(jì) 算 第 一 個(gè) 下 標(biāo) , 同 時(shí) 使 我 們 在 整 個(gè)下 標(biāo) 串 Elist的 翻 譯 過 程

65、中 隨 時(shí) 都 能 知 道 數(shù) 組 i的 符號(hào) 表 入 口 地 址 及 表 中 相 應(yīng) 信 息 。 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 三 、 按 行 存 放 的 賦 值 語 句 中 的 數(shù) 組 元 素 的 翻 譯v 3、 相 關(guān) 語 義 變 量 和 函 數(shù) 過 程v 語 義 變 量 :v -ARRAY:數(shù) 組 名 在 符 號(hào) 表 的 入 口 地 址v -DIM: 數(shù) 組 下 標(biāo) 維 數(shù) 計(jì) 數(shù) 器v -PLACE:語 義 變 量 , 在 符 號(hào) 表 入 口 地 址 或 臨 時(shí) 變 量 的 序 號(hào)v -OFFSET:v 簡 單 變 量 : OFFSET=n

66、ull v 下 標(biāo) 變 量 : OFFSET保 存 已 計(jì) 算 出 的 VARPART 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 三 、 按 行 存 放 的 賦 值 語 句 中 的 數(shù) 組 元 素 的 翻 譯v 3、 相 關(guān) 語 義 變 量 和 函 數(shù) 過 程v 函 數(shù) 過 程 :v -LIMITARRAY,K:通 過 符 號(hào) 表 查 內(nèi) 情 向 量 表 , 返回 第 k維 的 尺 寸 dkv -HEADARRAY:取 得 數(shù) 組 首 地 址 a,或 查 內(nèi) 情 向 量表 , 或 等 運(yùn) 行 時(shí) 分 配 得 到v -CONSARRAY:查 內(nèi) 情 向 量 表 ,得 C值v -TYPEARRAY:查 內(nèi) 情 向 量 表 TYPE項(xiàng) , 返 回 一 個(gè)數(shù) 組 元 素 , 占 有 的 字 單 元 數(shù) m值 。 第 五 節(jié) 數(shù) 組 元 素 及 其 在 賦 值 語 句 中 的 翻 譯v 三 、 按 行 存 放 的 賦 值 語 句 中 的 數(shù) 組 元 素 的 翻 譯4、 語 義 子 程 序-(1)A V:=E-IF(V OFFSET=null() GEN(=,E P

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!