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

正文內(nèi)容

編譯原理課件07_語義分析和中間代碼產(chǎn)生-全文預(yù)覽

2025-06-06 18:50 上一頁面

下一頁面
  

【正文】 call S /*轉(zhuǎn)子 */ 過程調(diào)用的翻譯 ? 過程調(diào)用文法 : (1) S → call id (Elist) (2) Elist → Elist, E (3) Elist → E ? 翻譯模式 1. S→call id (Elist) { for 隊列 queue中的每一項 p do emit(‘param’ p)。 … Cn1: Sn1。 ?向前轉(zhuǎn)移: goto L1。 M S M→? ? 翻譯模式 : 1. L→L 1。 emit(‘j,- ,- ,- ’) } ? while 語句的翻譯 相關(guān)產(chǎn)生式 S→ while E do S(1) ? 翻譯為: E的代碼 S (1)的代碼 “真”出口 “假”出口 為了便于 回填 , 改寫產(chǎn)生式為 : S→while M 1 E do M2 S1 M→ ? ? 翻譯模式 : 1. S→while M1 E do M2 S1 { backpatch(, )。S (7) | S ? S表示語句, L表示語句表, A為賦值語句, E為一個布爾表達式 ? if 語句的翻譯 相關(guān)產(chǎn)生式 S → if E then S(1) | if E then S(1) else S(2) 改寫后產(chǎn)生式 S → if E then M S1 S → if E then M1 S1 N else M2 S2 M→? N→? 翻譯模式 : 1. S→if E then M S1 { backpatch(, )。 :=newlabel。 := := || gen( ‘:’) || ? ifthenelse語句 S → if E then S1 else S2 To To goto …… : : ifthenelse語句的屬性文法 產(chǎn)生式 語義規(guī)則 S→if E then S 1 else S2 :=newlabel。 :=makelist(nextquad+1)。 :=E1. falselist} 布爾表達式的翻譯模式 (5) E→id 1 relop id2 { :=makelist(nextquad)。 := } (2) E→E 1 and M E2 { backpatch(, )。 ?函數(shù) merge(p1,p2), 把以 p1和 p2為鏈首的兩條鏈合并為一,作為函數(shù)值,回送合并后的鏈首。 ? 為 非 終 結(jié) 符 E 賦 予 兩 個 綜 合 屬 性 。 :=。 :=。 :=。 emit(‘goto’ nextstat+2)。 emit( ‘:=’ E ‘a(chǎn)nd’ )} E→not E 1 {:=newtemp。 emit ( ‘:=’ E ‘real+’ u)。 emit (u ‘:=’ ‘inttoreal’ E )。 這個賦值句產(chǎn)生的三地址代碼為: T1:=i int* j T3:=inttoreal T1 T2:=y real+ T3 x:=T2 關(guān)于產(chǎn)生式 E→E1 + E2 的語義動作 { :=newtemp。 emit( ‘:=’ ‘- ’ C)。 emit(t ‘:=’ t ‘+’ )。 :=1。 emit(‘:=’ ‘uminus’E )} E→(E 1) { :=} E→id { p:=lookup()。 =‘ ’ 產(chǎn)生賦值語句三地址代碼的翻譯模式 S→id :=E { p:=lookup()。 := || || gen( ‘:=’ ‘+’ ) E→E 1*E2 :=newtemp。 top(offset) := top(offset) + } N ? ? {t := mktable(top(tblptr) )。 addwidth(t, top(offset) )。 push (0, offset) } D ? D1 。 S ? 語義動作用到的函數(shù) mktable(previous) enter(table, name, type, offset) addwidth(table, width) enterproc(table, name, newtable) 聲 明 語 句 處理嵌套過程中的說明語句 P ? M D S {addwidth (top (tblptr), top (offset) )。 enter(name,type,offset): 用于填充符號表 。 := 4 } T? real { := real。 addtype (id. entry, L1. type)} L ? : T {L. type := T. type} T ? integer {T. type := integer} T ? real {T. type := real} 以上沒有繼承屬性的翻譯方案 D : L , id L id integer T 聲 明 語 句 ? 為局部名字建立符號表條目 ? 為它分配存儲單元 ? 符號表中包含名字的類型和分配給它的存儲單元的相對地址等信息 聲 明 語 句 過程中的聲明 P ? D S D ? D 。 ?優(yōu)點 : 方便優(yōu)化 , 節(jié)省空間 ? 例如,語句 X:=(A+B)*C。 := || gen( ‘:=’ ‘uminus’ ) E→ (E 1) :=。 ?函數(shù) newtemp的功能是 , 每次調(diào)用它時 , 將返回一個不同臨時變量名字 ,如 T1,T2,…。 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。 ? 數(shù)組 POST存放后綴式: k為下標,初值為 1 ? 上述語義動作可實現(xiàn)為: 產(chǎn)生式 程序段 E→E(1)op E(2) {POST[k]:=op。 ? 后綴式的計算 ?用一個棧實現(xiàn) 。 2. 如果 E是 E1 op E2形式的表達式,其中 op是任何二元操作符,則 E的后綴式為 E1? E2? op,其中 E1? 和 E2? 分別為 E1 和 E2的后綴式。 ? 一個表達式 E的后綴形式可以如下定義: 1. 如果 E是一個變量或常量,則 E的后綴式是 E自身。 只要知道每個算符的目數(shù) , 對于后綴式 , 不論從哪一端進行掃描 , 都能對它進行唯一分解 。 ?把表達式翻譯成后綴式的語義規(guī)則描述 產(chǎn)生式 E→E (1)op E(2) E→ (E (1)) E→id 語義動作 := E(1).code || E(2).code ||op := E(1).code :=id ? E后綴形式 ? op表示任意二元操作符 ? “ ||”表示后綴形式的連接 。 x:=op y。 ? E求值的三地址語句序列 。 := || || gen( ‘:=’ ‘*’ ) E→ E1 :=newtemp。 ? 四元式 ?一個帶有四個域的記錄結(jié)構(gòu),這四個域分別稱為 op, arg1, arg2及 result op arg1 arg2 result (0) uminus c T1 (1) * b T1 T2 (2) uminus c T3 (3) * b T3 T4 (4) + T2 T4 T5 (5) := T5 a 三地址語句 ? 三元式 ?通過計算臨時變量值的語句的位置來引用這個臨時變量 ?三個域: op、 arg1和 arg2 op arg1 arg2 (0) uminus c (1) * b (0) (2) uminus c (3) * b (2) (4) + (1)
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1