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

正文內(nèi)容

編譯原理課件07_語義分析和中間代碼產(chǎn)生(存儲版)

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

下一頁面
  

【正文】 定將要轉(zhuǎn)移到的標(biāo)號是多少。 :=。 emit(‘if’ relop. op id2. place ‘goto’ nextstat+3)。 :=real end else if =real and =integer then begin u:=newtemp。 emit( ‘:=’ w ‘*’ ) } (6) L→id { :=。 m:=+1。 emit( ‘:=’ ‘+’ )} E→E 1*E2 { :=newtemp。 push(0, offset) } tblptr與 offset是兩個(gè)棧名 , tblptr為主過程的符號表頭 , offset為存放各嵌套過程的當(dāng)前相對地址 。 N D1。 D | id : T | proc id 。 D D ? id : T {enter ( , , offset)。 =‘ ’ 三地址語句 三地址語句可看成中間代碼的一種抽象形式 .編譯程序中 ,三地址代碼語句的具體實(shí)現(xiàn)可用記錄表示 .通常有三種表示方法 :四元式、三元式、間接三元式 。 ? 非終結(jié)符號 E有如下兩個(gè)屬性: ? E值的名字 。 每碰到 k目運(yùn)算符就把它作用于棧頂?shù)?k個(gè)項(xiàng) , 并用運(yùn)算結(jié)果代替這 k個(gè)項(xiàng) 。第七章 語義分析和中間代碼產(chǎn)生 ? 靜態(tài)語義檢查 ?類型檢查 ?控制流檢查 ?一致性檢查 ?相關(guān)名字檢查 ?名字的作用域分析 語法分 析器 中間代碼 產(chǎn)生器 靜態(tài)檢 查器 中間代碼 優(yōu)化器 ? 中間語言 (復(fù)雜性界于源語言和目標(biāo)語言之間 )的好處: ?便于進(jìn)行與機(jī)器無關(guān)的代碼優(yōu)化工作 ?易于移植 ?使編譯程序的結(jié)構(gòu)在邏輯上更為簡單明確 源語言 程序 目標(biāo)語 言程序 中間語 言程序 Compiler Front End Compiler Back End ? 常用的中間語言: ?后綴式,逆波蘭表示 ?三地址代碼 ?三元式 ?四元式 ?間接三元式 ?DAG圖表示 中間語言 后綴式 ? 后綴式 表示法: Lukasiewicz發(fā)明的一種表示 表達(dá)式 的方法 , 又稱 逆波蘭 表示法 。 ?一般的計(jì)算過程是:自左至右掃描后綴式 ,每碰到運(yùn)算量就把它推進(jìn)棧 。y, x := ?y和 ?x := y ? 生成三地址代碼時(shí), 臨時(shí)變量 的名字對應(yīng)抽象語法樹的 內(nèi)部結(jié)點(diǎn) ? id:=E ?對表達(dá)式 E求值并置于變量 T中值 ?:=T 從賦值語句生成三地址代碼的 S屬性文法 ? 非終結(jié)符號 S有綜合屬性 , 它代表賦值語句 S的三地址代碼。 := E→id :=。 D D ? id : T T ? integer T? real T? array [ num ] of T1 T? ?T1 聲 明 語 句 計(jì)算被聲明名字的類型和相對地址 P ? {offset := 0} D S D ? D 。 聲 明 語 句 作用域信息的保存 ? 所討論語言的文法 P ? D S D ? D 。 D2 D ? proc id 。 push(t, tblptr)。 if p?nil then emit(p ‘:=’ ) else error } E→E 1+E2 { :=newtemp。 := } A[i1,i2,…,i k] ((… i1 n2+i2)n3+i3)…)n k+ik) w + base((…((low 1 n2+low2)n3+low3)…)n k+lowk) w (7) Elist→ Elist 1, E { t:=newtemp。 :=newtemp。 emit ( ‘:=’ u ‘real+’ E )。 emit( ‘:=’ ‘not’ E )} E→(E 1) {:=} E?id1 relop id2 { :=newtemp。 := || gen( ‘:’) || 表達(dá)式中執(zhí)行 goto哪里去了呢 ? 產(chǎn)生布爾表達(dá)式三地址代碼的語義規(guī)則 產(chǎn)生式 語義規(guī)則 E→E 1 and E2 :=newlabel。 := E→id 1 relop id2 :=gen(‘if ’ ‘goto’ ) || gen(‘goto’ ) E→true :=gen(‘goto’ ) E→false :=gen(‘goto’ ) 考慮如下表達(dá)式: ab or cd and ef 假定 整個(gè)表達(dá)式的真假出口已分別置為 Ltrue和 Lfalse, 則按定義將生成如下的代碼: if ab goto Ltrue goto L1 L1: if cd goto L2 goto Lfalse L2: if ef goto Ltrue goto Lfalse 只有整個(gè)表達(dá)式的真假出口不確定 , 而子表達(dá)式中的內(nèi)部跳轉(zhuǎn)地址都是確定的 布爾表達(dá)式的翻譯 ? 兩遍掃描 ?為給定的輸入串構(gòu)造一棵語法樹; ?對語法樹進(jìn)行深度優(yōu)先遍歷,進(jìn)行語義規(guī)則中規(guī)定的翻譯。 ?過程 backpatch(p, t), 其功能是完成“回填”,把 p所鏈接的每個(gè)四元式的第四區(qū)段都填為 t。 :=makelist(nextquad+1)。 :=newlabel。 :=merge(, ) } 2. S→if E then M1 S1 N else M2 S2 { backpatch(, )。 M S { backpatch(, )。 otherwise: Sn end ? 翻譯法 (一 ): T:=E L1: if T?C1 goto L2 S1的代碼 goto next L2: if T?C2 goto L3 S2的代碼 goto next L3: … Ln1: if T?Cn1 goto Ln Sn1的代碼 goto next Ln: Sn的代碼 next: ?改進(jìn) : C 1 S1 的地址C 2 S2 的地址? ?E Sn 的地址? 翻譯法 (二 ): 計(jì)算 E并放入 T中 goto test L1: 關(guān)于 S1的中間碼 goto next … Ln1: 關(guān)于 Sn1的中間碼 goto next Ln: 關(guān)于 Sn的中間碼 goto next test: if T=C1 goto L1 if T=C2 goto L2 … if T=Cn1 goto Ln1 goto Ln next: (case, C1, P1) (case, C2, P2) … (case, Cn1, Pn1) (case, T, Pn) (label, NEXT, , ) C 1 P 1C 2 P 2? ?C n 1 P n 1L 1 S1 的四元式首地址 L 2 S2 的四元式首地址 ? ? L n 1 Sn 1 的四元式首地址 L n Sn 的四元式首地址 Pi是 LI在 符號表中 的位置 過程調(diào)用的處理 ? 過程調(diào)用主要對應(yīng)兩種事 : ?傳遞參數(shù) ?轉(zhuǎn)子程序 ?傳地址 :把實(shí)在參數(shù)的地址傳遞給相應(yīng)的形式參數(shù) ?調(diào)用段預(yù)先把實(shí)在參數(shù)的地址傳遞到被調(diào)用段可以拿到的地方 ; ?程序控制轉(zhuǎn)入被調(diào)用段之后 , 被調(diào)用段首先把實(shí)在參數(shù)的地址抄進(jìn)自己相應(yīng)的形式單元中 ; ?過程體對形式參數(shù)的引用域賦值被處理 成 對形式單元的間接訪問 。 …… L1: …… 產(chǎn)生式 S?→goto L的語義動作 : { 查找符號表; IF L在符號表中且 定義否 欄為 已 THEN GEN(J, , , P) ELSE IF L不在符號表中 THEN B
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1