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

正文內(nèi)容

第七章語義分析和中間代碼生成-展示頁

2025-07-29 15:44本頁面
  

【正文】 emit (t, ?:=‘, , ??‘, limit(, m) )。 := } Elist ? Elist1, E { t := newtemp。 := null } Elist ? id [ E { := 。 := 1。 := null } 賦 值 語 句 L ? id { := 。 emit (, ?:=‘, ?uminus‘, ) } E ? (E1) { := } E ? id {p := lookup()。 if p ? nil then emit ( p, ?:=‘, ) else error } E ? E1 + E2 { := newtemp。 push(t, tblprt)。 pop(tblptr)。 ? ( 20) begin… end {sort}. 說 明 語 句 exchange readarray x a 表 頭 空 sort quicksort 指向 readarray partition v k 表 頭 quicksort readarrary i 表 頭 exchange 表 頭 指向 exchange partition 說 明 語 句 記錄的域名 T ? record D end T ? record L D end { := record (top(tblptr) )。 … ? ( 18) end {partition}。 ? ( 14) var i,j: integer。 ? ( 12) var k,v: integer。 ? ( 11) procedure quicksort(m,n。 a[i]:=a[j]。 ? ( 6) begin… a… end{readarray} ? ( 7) procedure exchange(i,j:integer)。 ? ( 3) x: integer。 push(t, tblptr)。 enterproc(top(tblptr), , t ) } D?id : T {enter(top(tblptr), , , top(offset))。 pop(tblptr)。 S { t := top(tblptr)。 D2 D ? proc id 。 push(t, tblprt)。 pop(tblptr)。 D 。 := 4 } 說 明 語 句 作用域信息的保存 ? 所討論語言的文法 P ? D S D ? D 。 := 8 } T? array [ num ] of T1 { := array (, )。 offset := offset + } T ? integer { := integer。 a:= b*- c+ b*- c 四元式 三元式 op arg1 arg2 result op arg1 arg2 (0) uminus c T1 (0) uminus c (1) * b T1 T2 (1) * b (0) (2)uminus c T3 (2)uminus c (3) * b T3 T4 (3) * b (2) (4) + T2 T4 T5 (4) + (1) (3) (5) := T5 a (5) assign a (4) 說 明 語 句 ? 為局部名字建立符號表條目 ? 為它分配存儲單元 ? 符號表中包含名字的類型和分配給它的存儲單元的相對地址等信息 說 明 語 句 過程中的聲明 說 明 語 句 計算被聲明名字的類型和相對地址 P ? D {offset := 0} D ? D 。編譯程序中,三地址代碼語句的具體實現(xiàn)可以用記錄表示,記錄中包含表示運算符和操作數(shù)的域。 中 間 語 言 把表達式翻譯為后綴式的語義規(guī)則描述 產(chǎn) 生 式 語 義 規(guī) 則 E→E 1op E2 := || || op E→ ( E1) E. code := E→id E . code := id 中 間 語 言 ? 后綴 式 不需要括號 (8 ? 4) + 2 的后綴表示是 8 4 ?2 + ? 后綴 式 的最大優(yōu)點是便于計算機處理表達式 ? 后綴 式 很容易拓廣到含一元算符的表達式 ? 后綴 式 也可以拓廣到表示賦值語句和控制語句,但很難用棧來描述它的計算 中 間 語 言 圖形表示 圖表示法包括 DAG與抽象語法樹 ? 語法樹是一種圖形化的中間表示 assign a + + ? ? b c d c d uminus (a) 語法樹 a := (?b + c?d ) + c?d的圖形表示 中 間 語 言 圖形表示 ? 語法樹是一種圖形化的中間表示 ? 有向無環(huán)圖 也是一種中間表示 assign a + + ? ? b c d c d uminus assign a + + ? b c d uminus (a) 語法樹 (b)DAG a := (?b + c?d ) + c?d的圖形表示 中 間 語 言 構(gòu)造賦值語句語法樹的語法制導定義 產(chǎn) 生 式 語 義 規(guī) 則 S ? id :=E := mknode(?assign‘, mkleaf (id, ), ) E ? E1 +E2 := mknode( ?+‘, , ) E ? E1 ?E2 := mknode( ??‘, , ) E ? ?E1 := mkunode( ?uminus‘, ) E ? (E1) := F ? id := mkleaf (id, ) 中 間 語 言 三地址代碼 一般形式: x := y op z 表達式 x + y ? z翻譯成的三地址語句序列是 t1 := y ? z t2 := x + t1 中 間 語 言 三地址代碼是語法樹或 DAG的一種線性表示 a := (?b + c?d ) + c?d 語法樹的代碼 DAG的代碼 t1 := ?b t1 := ?b t2 := c ? d t2 := c ? d t3 := t1 + t2 t3 := t1 + t2 t4 := c ? d t4 := t3 + t2 t5 := t3 + t4 a := t4 a := t5 中 間 語 言 本書常用的三地址語句 ? 賦值語句 x := y op z, x := op y, x := y ? 無條件轉(zhuǎn)移 goto L ? 條件轉(zhuǎn)移 if x relop y goto L ? 過程調(diào)用 param x 和 call p , n ? 過程返回 return y ? 索引賦值 x := y[i]和 x[i] := y ? 地址和指針賦值 x := amp。 中 間 語 言 ? 后綴式表示法是波蘭邏輯學家盧卡西維奇(Lukasiewicz) 發(fā)明的一種表示表達式的方法因此又稱逆波蘭表示法。 ? 如果 E是形式為 E1 opE2的表達式,那么 E的后綴式是 E1? E2? op, 其中 E1?和 E2?分別是 E1和 E2的后綴式。 ? 如果 E是形式為 E1 opE2的表達式,那么 E的后綴式是 E1? E2? op, 其中 E1?和 E2?分別是 E1和 E2的后綴式。第七章 語義分析和中間代碼生成 本章內(nèi)容 – 介紹幾種常用的中間表示 : 后綴表示、圖形表示和三地址代碼 – 用語法制導定義和翻譯方案的方法來說明程序設計語言的結(jié)構(gòu)怎樣被翻譯成中間形式 分析 器 靜態(tài) 檢查 器 中間 代碼 生成 器 中間 代碼 記號流 代碼 生成 器 中 間 語 言 后綴式 表達式 E的 后綴式 可以如下遞歸定義 ? 如果 E是變量或常數(shù),那么 E的后綴 式 就是 E本身。 中 間 語 言 后綴表示 表達式 E的 后綴表示 可以如下遞歸定義 ? 如果 E是變量或常數(shù),那么 E的后綴表示就是E本身。 中 間 語 言 后綴式 表達式 E的 后綴式 可以如下遞歸定義 ? 如果 E是變量或常數(shù),那么 E的后綴 式 就是 E本身。 ? 如果 E是形式為 (E1)的表達式,那么 E1的后綴表示也是 E的后綴 式。這種表示法是把運算量(操作數(shù))寫在前面把算符寫在后面(后綴)。y, x := ?y和 ?x := y T1:= y*z T2:= x+ T1 ? T1:=- c T1:=- c ? T2:=b*T1 T2:=b*T1 ? T3:=- c T5:=T2+T4 ? T4:=b*T3 a:=T5 ? T5:=T2+T4 ? a:=T5 ? 圖 相應于圖 DAG的三地址代碼 ? ( a) 對于抽象語法樹的代碼; (b)對于 DAG的代碼 四元式、三元式、間接三元式 ? 三地址語句可看成中間代碼的一種抽象形式。通常有三種表示方法:四元式、三元式、間接三元式。 D D ? id : T {enter ( , , offset)。 := 4 } T? real { := real。 := ? } T? ?T1 { := pointer ()。 D | id : T | proc id 。 S ? 語義動作用到的函數(shù) mktable(previous) enter(table, name, type, offset) addwidth(table, width) enterproc(table, name, newtable) 說 明 語 句 處理嵌套過程中的說明語句 P ? M D {addwidth (top (tblptr), top (offset) )。 pop (offset) } M ? ? {t := mktable (nil)。 push (0, offset) } D ? D1 。 N D1。 addwidth(t, top(offset) )。 pop(offset)。 top(offset) := top(offset) + } N ? ? {t := mktable(top(tblptr) )。 push(0, offset) } ? ( 1) program sort(input,output) ? ( 2) var a: array[0..10] of integer。 ? ( 4) procedure readarray ? ( 5)
點擊復制文檔內(nèi)容
電大資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1