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

正文內容

第8章語法制導翻譯和中間代碼生成-閱讀頁

2025-08-04 12:57本頁面
  

【正文】 元式串的轉移目標 ,對 G(S)進行修改為 G(S‘): (1) S→ CS1 (8) C→ if E then (2) S→ TpS2 (9) Tp→ CS else (3) S→ WdS3 (10) Wd → W E do (4) S →begin L end (11) W → while (5) S →A (6) S → Ls S1 (12) Ls → L。 {backpatch( , nextstat)} (6) L → Ls S1 {:= S1 .chain } 按照上述文法產生式相應的語義動作,加上前述關于賦值句和布爾表達式的翻譯法,語句 while ( A< B) do if ( C< D) then X∶ =Y+Z 將被翻譯成如下的一串四元式: 100 if A< B goto 102 101 goto 107 102 if C< D goto 104 103 goto 100 104 T∶ =Y+Z 105 X∶ =T 106 goto 100 107 while ( A< B) do if ( C< D) then X∶ =Y+Z for循環(huán)語句 for i∶ =E1 step E2 until E3 do S1 為了簡單起見,假定 E2總是正的。 t∶ =E; L1: if t≠V1 goto L2; S1; goto next; L2: if t≠V2 goto L3; S2 goto next; … Ln1 : if t≠Vn1 goto Ln; Sn1; goto next; Ln: Sn; next: 另一種方法 :P172 圖 goto語句 多數程序語言中的轉移是通過標號和 goto語句實現的。 當 L∶S ;語句被處理之后,標號 L是 定義了 的。 如果 goto L是一個向上轉移的語句,那么,當編譯程序碰到這個語句時, L必是已定義了的。 如果 goto L是一個向下轉移的語句,也就是說,標號 L尚未定義,那么,若 L是第一次出現,則把它填進符號表中并標志上“未定義”。 在這種情況下,必須把所有那些以 L為轉移目標的四元式的地址全都記錄下來,以便一旦 L定義時就可對這些四元式進行回填。鏈的首地址放在符號表中 L的 地址欄中 建鏈的方法是:若 goto L中的標號 L尚未在符號表中出現,則把 L填入表中,置 L的“定義否”標志為“未”,把 nextstat填進 L的地址欄中作為新鏈首,然后,產生四元式 (p)( goto 0),其中 0為鏈尾標志。 一旦標號 L定義時,我們將根據這條鏈回填那些待填轉移目標的四元式。 L已在符號表中但 類型 不為 標號 或 定義否 為 已 ,則報告出錯。 過程調用的四元式產生 過程調用的實質是把程序控制轉移到子程序 ,在轉子之前 ,必須用某種辦法把實參的信息傳給調用的子程序。 若實參是一個變量或數組,則直接傳遞地址。 傳遞實參地址的一個簡單辦法是:把實參地址逐一放在轉指令的前面; 例:過程調用: Call S(A+B, Z)譯為: 計算 A+ B的值置于 T中 /*T:=A+B */ Par T /*第一個實參的地址 */ Par Z /*第二個實參的地址 */ Call S /*轉指令 */ 為了處理在實參時記住每個實參的地址,以便最后把它們排在 Call指令之前,我們需要把這些地址存放起來,我們可用隊列來存放。要求生 成的四元式序列在轉指令之前的參數四元式 par 按反序出現(與實在參數的順序相反)。 Gen(call,_,_,Entry(i)) } 簡單說明語句的翻譯 程序設計語言中的說明語句旨在定義各種形式的有名實體,如常量、變量、數組、記錄 (結構 )、過程、子程序等等,說明語句的種類也多,對象說明、變量說明、類型說明、過程說明等等。 簡單說明句的翻譯 程序設計語言中最簡單的說明句的語法描述為: D→integer 〈 namelist〉 |real〈 namelist〉 〈 namelise〉 → 〈 namelist〉 , id|id 即使用關鍵字 integer和 real定義一串名字的性質。 用上述文法來制導翻譯 (自下而上 )存在著這樣一個問題,我們只能在把所有的名字都歸約成 namelist后才能把它們的性質登記進符號表 我們可以把上述的文法改寫成: D→D 1,id |integer id |real id 這樣 ,就能把所說明的性質及時地告訴每個名字 id,或者說,每當讀進一個標識符時,就可以把它的性質登記在符號表中,不用把它們集中起來最后再成批登記了。 (1) D→integer id {enter(id,int)。 ∶ =real} (3) D→D 1,id {enter(id,)。我們要為過程的局部名字安排存儲,對這些名字建符號表時,要記錄名字,類型和相對地址。記錄當前可用的空間的開始地址,每次分配一個變量,將 offset增加相應的值, offset增加的值由名字的類型決定,即由數據對象的寬度決定,寬度用 Width來表示。 :=real。 offset:=offset+。 A[ l 1 : u 1 ,l 2 : u 2 , , l n : u n ] l 1 u 1 l 2 u 2 : : type a (首地址) n C d1 d2 其中: li表示每維的下界, ui表示每維的上界 ,di為 每維的長度 , di=uili+1 C為 Conspart=aC 的第二項 ,a為數組的首地址, n為數組的維數 ,type 為數組的類型 例:按行 A 是 10 ? 20 的二維數組A [ 1 , 1]A [ 1 , 2]. . 第一行. .A [ 1 , 2 0 ]A [ 2 , 1 ]. . 第二行. .. .. .. .A [ 1 0 , 2 0 ] 第十行數組元素的地址計算 設 A[1 , 1] 的地址為 a ,每個元素占一個字 A[i , j] 的地址 : a + ( i 1 ) ? 20+ ( j 1 ) = ( a 21 ) + ( 20 i+j ) 一般 : arr ay A[l1: u1, l2: u2,??, ln: un] 令 di=ui li+1 元素 A[i1, i2,??, in] 的地址 D D =a+ ( i1 l1) d2d3?? dn+ ( i2 l2) d3d4?? dn + ?? + ( in 1 l n 1) dn+ ( in ln) 經因子分解后得 D=CONSPART+VAR PART X:=a[i, j] 翻譯成四元式的結構: T1:=VARPART。 T3:=T2[T1]。
點擊復制文檔內容
范文總結相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1