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

正文內(nèi)容

第七章語(yǔ)義分析和中間代碼生成(編輯修改稿)

2024-08-16 15:44 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 0 102: goto 104 103: t := 1 104: 布爾表達(dá)式的翻譯 E ? E1 or E2 { := newtemp。 emit (, ?:=‘, , ?or‘ ) } E ? id1 relop id2 { := newtemp。 emit (?if‘, , , , ?goto‘, nextstat+3 )。 emit (, ?:=‘, ?0‘ )。 emit (?goto‘, nextstat + 2 )。 emit (, ?:=‘, ?1‘ ) } 布爾表達(dá)式的翻譯 表達(dá)式 a b or c d and e f 的代碼是: 100 if a b goto 103 107 T2 :=1 101 T1 :=0 108 if e f goto 111 102 goto 104 109 T3:=0 103 T1 :=1 110 goto 112 104 if c d goto 107 111 T3:=1 105 T2 :=0 112 T4:= T2 and T3 106 goto 108 113 T5:= T1 or T4 布爾表達(dá)式的翻譯 E ? E1 or E2 { := 。 := newlabel。 := 。 := 。 := || gen(, ?:‘) || } 布爾表達(dá)式的翻譯 E ? E1 or E2 { := 。 := newlabel。 := 。 := 。 := || gen(, ?:‘) || } E ? not E1 { := 。 := 。 := } 布爾表達(dá)式的翻譯 E ? E1 and E2 { := newlabel。 := 。 := 。 := 。 := || gen(, ?:‘) || } 布爾表達(dá)式的翻譯 E ? E1 and E2 { := newlabel。 := 。 := 。 := 。 := || gen(, ?:‘) || } E ? (E1 ) { := 。 := 。 := } 布爾表達(dá)式的翻譯 E ? id1 relop id2 { := gen(?if‘, , , , ?goto‘, ) || gen(?goto‘, ) } 布爾表達(dá)式的翻譯 E ? id1 relop id2 { := gen(?if‘, , , , ?goto‘, ) || gen(?goto‘, ) } E ? true { := gen(?goto‘, )} E ? false { := gen(?goto‘, )} 7. 5 控制語(yǔ)句的翻譯 控制流語(yǔ)句的翻譯 S ? if E then S1 | if E then S1 else S2 | while E do S1 | S1。 S2 7. 5 控制語(yǔ)句的翻譯 : . . . 指向 指向 (a) ifthen : . . . 指向 指向 : goto S (b) ifthenelse : . . . 指向 指向 goto : (c) whiledo : . . . (d) S1。 S2 7. 5 控制語(yǔ)句的翻譯 S ? if E then S1 { := newlabel。 := 。 := 。 := || gen(, ?:‘) || } : . . . 指向 指向 (a) ifthen 7. 5 控制語(yǔ)句的翻譯 S ? if E then S1 else S2 { := newlabel。 := newlabel。 := 。 := 。 := || gen(, ?:‘) || || gen(?goto‘, ) || gen(, ?:‘) || } : . . . 指向 指向 : goto S (b) ifthenelse 7. 5 控制語(yǔ)句的翻譯 S ? while E do S1 {:= newlabel。 := newlabel。 := 。 := 。 := gen(, ?:‘) || || gen(, ?:‘) || || gen(?goto‘, ) } : . . . 指向 指向 goto : (c) whiledo 7. 5 控制語(yǔ)句的翻譯 S ? S1。 S2 { := newlabel。 := 。 := || gen(, ?:‘) || } : . . . (d) S1。 S2 ? while ab do ? if cd then ? x:=y+z ? else ? x:= yz ? 根據(jù)上述屬性文法和賦值語(yǔ)句的翻譯模式,將生成下列代碼: L1: if ab goto L2 goto Lnext L2: if cd goto L3 goto L4 L3: T1 :=y+z x:=T1 goto L1 L4: T1:=yz x:= T2 goto L1 Lnext: 100 (j, a, b, 102) while ab do 101 (j, , , 107) if cd then 102 (j, c, d,104) x:=y+z 103 (j, , , 100) 104 (+, y, z, T) 105 (:=, T, , x) 106 (j, , , 100) 107 7. 5 控制語(yǔ)句的翻譯 布爾表達(dá)式的控制流翻譯 如果 E是 a b的形式 , 那么代碼是: if a b goto goto 7. 5 控制語(yǔ)句的翻譯 開關(guān)語(yǔ)句的翻譯 switch E begin case V1: S1 case V2: S2 . . . case Vn 1: Sn – 1 default: Sn end 7. 5 控制語(yǔ)句的翻譯 分支數(shù)較少時(shí) t := E的代碼 | Ln2: if t ? Vn1 goto Ln1 if t ? V1 goto L1 | Sn 1的代碼 S1的代碼 | goto next goto next | Ln1: Sn的代碼 L1: if t ? V2 goto L2 | next: S2的代碼 goto next L2: . . . . . . 7. 5 控制語(yǔ)句的翻譯 分支較多時(shí) , 將分支測(cè)試的代碼集中在一起 , 便于生成較好的分支測(cè)試代碼 。 t := E的代碼 | Ln: Sn的代碼 goto test | goto next L1: S1的代碼 |test: if t = V1 goto L1 goto next | if t = V2 goto L2 L2: S2的代碼 | . . . goto next | if t = Vn1 goto Ln1 . . . | goto Ln Ln1: Sn 1的代碼 | next: goto next 7. 5 控制語(yǔ)句的翻譯 中間代碼增加一種 case語(yǔ)句 , 便于代碼生成器 對(duì)它進(jìn)行特別處理 test: case V1 L1 case V2 L2 . . . case Vn1 Ln1 case t Ln next: 過程調(diào)用的處理 過程調(diào)用的翻譯 S ? call id (Elist) {for 隊(duì)列 queue中的每一項(xiàng) p do emit( ‘param‘ p) ; emit ( ?call‘) } Elist ? Elist, E {將 queeue的隊(duì)尾 } Elist ? E {初始化 queue僅包含 } 布爾表達(dá)式和控制流語(yǔ)句 過程調(diào)用 id(E1, E2, … , En)的中間代碼結(jié)構(gòu) := E1的代碼 := E2的代碼 . . . := En的代碼 param param . . . param call , n 布爾表達(dá)式和控制流語(yǔ)句 S ? call id (Elist) {為長(zhǎng)度為 n的隊(duì)列中的每個(gè) , emit(?param‘, )。 emit(?call‘, , n) } Elist ? Elist, E {把 } Elist ? E {將隊(duì)列初始化 , 并讓它僅含 } 類型檢查 – 靜態(tài)檢查中最典型的部分 — 類型檢查: 類型系統(tǒng)、類型檢查、多態(tài)函數(shù)、重載。 – 忽略其它的靜態(tài)檢查: 控制流檢查、唯一性檢查 、關(guān)聯(lián)名字檢查。 分析 器 類型 檢查 器 中間 代碼 生成 器 語(yǔ)法樹 語(yǔ)法樹 中間 表示 記號(hào)流 類型系統(tǒng) ? 變量的類型 變量在程序執(zhí)行期間的取值范圍 ? 類型化語(yǔ)言 變量都被給定類型的語(yǔ)言 ? 未類型化的語(yǔ)言 不限制變量值范圍的語(yǔ)言 一個(gè)運(yùn)算可以作用到任意的運(yùn)算對(duì)象,其結(jié)果可能是一個(gè)有意義的值、一個(gè)錯(cuò)誤、一個(gè)異?;蛞粋€(gè)未做說明的結(jié)果。 ? 類型系統(tǒng) 的根本目的是防止程序運(yùn)行時(shí)出現(xiàn)執(zhí)行錯(cuò)誤 ? 類型可靠的 語(yǔ)言 粗略地說,所有程序運(yùn)行時(shí)都沒有執(zhí)行錯(cuò)誤出現(xiàn) ? 類型系統(tǒng)的形式化 類型表達(dá)式、定型斷言、定型規(guī)則、類型檢查算法 ? 顯式類型化的 語(yǔ)言 類型是語(yǔ)法的一部分 ? 隱式類型化的 語(yǔ)言 執(zhí)行錯(cuò)誤和安全語(yǔ)言 執(zhí)行錯(cuò)誤 ? 會(huì)被捕獲的錯(cuò)誤 ( trapped error) – 例: 非法指令錯(cuò)誤、非法內(nèi)存訪問 、 除數(shù)為零 – 引起計(jì)算立即停止 ? 不會(huì)被捕獲的錯(cuò)誤 ( untrapped error) – 例:下標(biāo)變量的 訪問越過數(shù)組末端的數(shù)據(jù) – 例: 跳到一個(gè)錯(cuò)誤的地址,該地址開始的內(nèi)存正好代表一個(gè)指令序列 ? 類型可靠的 語(yǔ)言 – 所有合法的程序都是良行為的 – 又稱為 強(qiáng)檢查的語(yǔ)言 – 未類型化語(yǔ)言 通過徹底的運(yùn)行時(shí)詳細(xì)檢查來排除所有的禁止錯(cuò)誤,如 LISP語(yǔ)言 – 也 可以通過靜態(tài)檢查來拒絕不良行為的程序 – 類型系統(tǒng)就是用來支持這種靜態(tài)檢查的 – 這種檢查叫做類型檢查 – 這樣的 類型化語(yǔ)言,又稱 強(qiáng)類型化的 語(yǔ)言 一些實(shí)際使用的語(yǔ)言是弱類型化語(yǔ)言 ? Pascal語(yǔ)言 – 無標(biāo)志的變體記錄類型 – 函數(shù)型參數(shù) 一些實(shí)際使用的語(yǔ)言是弱類型化語(yǔ)言 ? Pascal語(yǔ)言 – 無標(biāo)志的變體記錄類型 – 函數(shù)型參數(shù) ? C語(yǔ)言 有很多不安全的并且被廣泛使用的特征,如: – 指針?biāo)阈g(shù)運(yùn)算 – 類型強(qiáng)制 – 參數(shù)個(gè)數(shù)可變 ? 在語(yǔ)言設(shè)計(jì)的歷史上,安全性考慮
點(diǎn)擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1