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

正文內(nèi)容

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

 

【正文】 z翻譯成的三地址語(yǔ)句序列是 t1 := y ? z t2 := x + t1 出于語(yǔ)句的右邊只有一個(gè)算符的考慮 ? 三地址代碼可以看成是抽象語(yǔ)法樹或 DAG的一種線性表示 三地址代碼是語(yǔ)法樹或 dag的一種線性表示 a := (?b + c?d ) + c?d 語(yǔ)法樹的代碼 dag的代碼 t1 := ?b t2 := c ? d t3 := t1 + t2 t4 := c ? d t5 := t3 + t4 a := t5 新增加的名字對(duì)應(yīng)樹 /圖中的內(nèi)部結(jié)點(diǎn) assign a + + ? ? b c d c d uminus 語(yǔ)法樹 三地址代碼是語(yǔ)法樹或 dag的一種線性表示 a := (?b + c?d ) + c?d 語(yǔ)法樹的代碼 dag的代碼 t1 := ?b t2 := c ? d t3 := t1 + t2 t4 := t3 + t2 a := t4 新增加的名字對(duì)應(yīng)樹 /圖中的內(nèi)部結(jié)點(diǎn) assign a + + ? b c d uminus (b) dag 三地址語(yǔ)句的種類 本書常用的三地址語(yǔ)句 ? 賦值語(yǔ)句 x:=y op z。 ? 非終結(jié)符號(hào) E有如下兩個(gè)屬性: ? E值的名字 。 := || || gen( ‘:=’ ‘+’ ) E→E 1*E2 :=newtemp。 =‘ ’ 三地址語(yǔ)句 三地址語(yǔ)句可看成中間代碼的一種抽象形式 .編譯程序中 ,三地址代碼語(yǔ)句的具體實(shí)現(xiàn)可用記錄表示 .通常有三種表示方法 :四元式、三元式、間接三元式 。 間接代碼 (1 ) (2 ) (3 ) (1 ) (4 ) (5 )三元式表 OP AR G1 AR G2(1 ) + A B(2 ) * (1 ) C(3 ) := X (2 )(4 ) ↑ D (1 )(5 ) := Y ( 4 ) 聲 明 語(yǔ) 句 聲明的語(yǔ)法制導(dǎo)定義 產(chǎn) 生 式 語(yǔ) 義 規(guī) 則 D ? TL := T? int T. type := integer T? real T. type := real L? L1, id := 。 D D ? id : T {enter ( , , offset)。 := ? } T? ?T1 { := pointer ()。 D | id : T | proc id 。 pop (offset) } M ? ? {t := mktable (nil)。 N D1。 pop(offset)。 push(0, offset) } tblptr與 offset是兩個(gè)棧名 , tblptr為主過(guò)程的符號(hào)表頭 , offset為存放各嵌套過(guò)程的當(dāng)前相對(duì)地址 。 := || gen( ‘:=’ ‘uminus’ ) E→ (E 1) :=。 emit( ‘:=’ ‘+’ )} E→E 1*E2 { :=newtemp。 emit( ‘:=’ E ‘+’ E )} (3) E→(E 1) {:=} (4) E→L { if =null then := else begin :=newtemp。 m:=+1。 :=t。 emit( ‘:=’ w ‘*’ ) } (6) L→id { :=。 :=integer end else if =real and =real then begin emit ( ‘:=’ E ‘real+’ E )。 :=real end else if =real and =integer then begin u:=newtemp。 ?用于控制語(yǔ)句的條件式 . ? 產(chǎn)生布爾表達(dá)式的文法 : E→E or E | E and E | ? E | (E) | i rop i | i ? 計(jì)算布爾表達(dá)式通常采用兩種方法 : 1. 如同計(jì)算算術(shù)表達(dá)式一樣 ,一步步算 1 or (not 0 and 0) or 0 =1 or (1 and 0) or 0 =1 or 0 or 0 =1 or 0 =1 2. 采用某種優(yōu)化措施 把 A or B解釋成 if A then true else B 把 A and B解釋成 if A then B else false 把 ? A解釋成 if A then false else true 兩種不同的翻譯方法 : ? 第一種翻譯法: A or B and C=D翻譯成 (1) (=, C, D, T1) (2) (and, B, T1, T2) (3) (or, A, T2, T3) ? 第二種翻譯法適合于作為條件表達(dá)式的布爾表達(dá)式使用 . 數(shù)值表示法 ? a or b and not c 翻譯成 T1:=not c T2:=b and T1 T3:=a or T1 ? ab的關(guān)系表達(dá)式可等價(jià)地寫成 if ab then 1 else 0 , 翻譯成 100: if ab goto 103 101: T:=0 102: goto 104 103: T:=1 104: 關(guān)于布爾表達(dá)式的數(shù)值表示法的翻譯模式 ? 過(guò)程 emit將三地址代碼送到輸出文件中 ? nextstat給出輸出序列中下一條三地址語(yǔ)句的地址索引 ? 每產(chǎn)生一條三地址語(yǔ)句后,過(guò)程 emit便把nextstat加 1 關(guān)于布爾表達(dá)式的數(shù)值表示法的翻譯模式 E→E 1 or E2 {:=newtemp。 emit(‘if’ relop. op id2. place ‘goto’ nextstat+3)。 :=newlabel。 :=。 :=。 ? 一遍掃描 ?在很多情況下 ,不確定將要轉(zhuǎn)移到的標(biāo)號(hào)是多少。 nextquad的初值為 1,每當(dāng)執(zhí)行一次 emit之后, nextquad將自動(dòng)增 1。 布爾表達(dá)式的文法 (1) E→ E1 or M E2 (2) | E1 and M E2 (3) | not E1 (4) | (E1) (5) | id1 relop id2 (6) | id (7) M→? 布爾表達(dá)式的翻譯模式 (1) E→E 1 or M E2 { backpatch(, )。 :=merge(,) } 布爾表達(dá)式的翻譯模式 (3) E→not E1 { :=。 emit(‘j’ ‘,’ id ‘,’ id ‘,’ ‘0’)。 ? ifthen語(yǔ)句 S → if E then S1 To To …… : : ifthen語(yǔ)句的屬性文法 產(chǎn)生式 語(yǔ)義規(guī)則 S→if E then S 1 :=newlabel。 := :=。 :=。 backpatch(, )。 := emit(‘j,- ,- ,’ ) } 2. M→ ? { :=nextquad } ? 產(chǎn)生式 L→L。 := } 2. M→ ? { :=nextquad } ? 其它幾個(gè)語(yǔ)句的翻譯 1. S→begin L end { := } 2. S→A { :=makelist( ) } 3. L→S { := } 翻譯語(yǔ)句 while (ab) do if (cd) then x:=y+z。 CASE語(yǔ)句的翻譯 ? 語(yǔ)句結(jié)構(gòu) case E of C1: S1。 ? 翻譯方法:把實(shí)參的地址逐一放在轉(zhuǎn)子指令的前面 . 例如 , CALL S(A, X+Y) 翻譯為 : 計(jì)算 X+Y置于 T中的代碼 par A /*第一個(gè)參數(shù)的地址 */ par T /*第二個(gè)參數(shù)的地址 */
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1