編譯原理課件:6-第六章_語義分析-9-10節(jié)_第1頁
編譯原理課件:6-第六章_語義分析-9-10節(jié)_第2頁
編譯原理課件:6-第六章_語義分析-9-10節(jié)_第3頁
編譯原理課件:6-第六章_語義分析-9-10節(jié)_第4頁
編譯原理課件:6-第六章_語義分析-9-10節(jié)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、6.96.9 casecase語句語句CASE E ofCASE E of case C case C1 1 :S S1 1 ; ; case C case C2 2 :S S2 2 ; ; otherwise S otherwise Sn nendend語義:語義:、計算表達式、計算表達式E E的值;的值;、分支測試,即查找與、分支測試,即查找與E E相同的相同的CiCi。如果沒有,。如果沒有, 那么默認值和該表達式值匹配;那么默認值和該表達式值匹配;、執(zhí)行相匹配分支的語句;、執(zhí)行相匹配分支的語句;、跳轉(zhuǎn)到該語句的后繼語句。、跳轉(zhuǎn)到該語句的后繼語句。一般形式:一般形式:casecase語句的

2、實現(xiàn)方案語句的實現(xiàn)方案1 1 適合分支數(shù)適合分支數(shù)1010個以內(nèi)個以內(nèi)對對E E求值的代碼,結果存入求值的代碼,結果存入T T中中 L L1 1:if TCif TC1 1 goto goto L L2 2 ; S S1 1的代碼;的代碼; gotogoto next next;L L2 2:if TCif TC2 2 goto goto L L3 3 ; S S2 2的代碼;的代碼; gotogoto next next;L L3 3: L Ln-1n-1:if TCif TCn-1n-1 goto L goto Ln n ; S Sn-1n-1的代碼;的代碼;gotogoto next n

3、ext;L Ln n:S Sn n的代碼的代碼; ;NextNext:后繼語句:后繼語句CASE E ofCASE E ofcase Ccase C1 1 :S S1 1 ; ;case Ccase C2 2 :S S2 2 ; ; otherwise Sotherwise Sn nendendcasecase語句的實現(xiàn)方案語句的實現(xiàn)方案 2 2對對E E求值的代碼,結果存入求值的代碼,結果存入T T中;中; gotogoto testtest; L L1 1: S S1 1的代碼;的代碼;gotogoto nextnext; L L2 2: S S2 2的代碼;的代碼;gotogoto ne

4、xtnext; L Ln-1n-1:S Sn-1n-1的代碼;的代碼;gotogoto nextnext; L Ln n: S Sn n的代碼;的代碼;gotogoto nextnext;testtest:if Tif TC C1 1 goto goto L L1 1 ; if T if TC Cn-1n-1 goto goto L Ln-1n-1; goto Lgoto Ln n ; NextNext:后繼語句:后繼語句 Test Test部分:部分: 根據(jù)根據(jù)CiCi與與 LiLi的關的關系確定轉(zhuǎn)移目標。系確定轉(zhuǎn)移目標。 標號標號L Li i : 編譯時加入;編譯時加入; 引入隊列記錄引入

5、隊列記錄CiCi, , Li Li 的對應關系。的對應關系。CASE E ofCASE E ofcase Ccase C1 1 :S S1 1 ; ;case Ccase C2 2 :S S2 2 ; ; otherwise Sotherwise Sn nendend100(+ , i , j ,T100(+ , i , j ,T1 1 ) )101(:=, T101(:=, T1 1, _ , T ), _ , T )102(j, _ , _ , 111 ) 102(j, _ , _ , 111 ) 103(:= , m, _ , k )103(:= , m, _ , k )104(j, _

6、 , _ , 114 ) 104(j, _ , _ , 114 ) 105( - , m, 1 , T105( - , m, 1 , T2 2 ) )106(:= , T106(:= , T2 2, _ , k ), _ , k )107(j, _ , _ ,104 ) 107(j, _ , _ ,104 ) 108( + , m, 1 , T108( + , m, 1 , T3 3 ) )109(:= , T109(:= , T3 3, _ , k ), _ , k )110(j, _ , _ ,107 ) 110(j, _ , _ ,107 ) CASE i+jCASE i+j of of

7、case 2case 2:k:=mk:=m ; ;case 9case 9:k:=m-1k:=m-1 ; ;otherwise k:=m+1otherwise k:=m+1endend111(case,2,103, _ )111(case,2,103, _ )112(case,9,105, _ )112(case,9,105, _ )113(case,T,108, _ ) 113(case,T,108, _ ) 114114語義分析過程語義分析過程掃描到掃描到動動 作作casecase產(chǎn)生標號:產(chǎn)生標號:test, next, test, next, 工作單元工作單元T T E E產(chǎn)生產(chǎn)生 T

8、T:=E =E 的中間代碼的中間代碼ofof1)1)記錄待返填地址記錄待返填地址(test)(test):Test.addrTest.addr:= nxq:= nxq; ;2)2)產(chǎn)生轉(zhuǎn)移指令:產(chǎn)生轉(zhuǎn)移指令:gen(jgen(j, _ ,_ , 0), _ ,_ , 0)3)3)設置空隊列:設置空隊列:queuequeue100(+ , i , j ,T100(+ , i , j ,T1 1 ) )101(:=, T101(:=, T1 1, _ , T ), _ , T )102(j, _ , _ , 0 ) 102(j, _ , _ , 0 ) CASE i+jCASE i+j of of

9、case 2case 2:k:=mk:=m ; ;case 9case 9:k:=m-1k:=m-1 ; ;otherwise k:=m+1otherwise k:=m+1endendn n TestTest 102102n+1n+1 nextnext 0 0queueC Ci i產(chǎn)生標號產(chǎn)生標號L Li i, ,連同連同NXQNXQ進符號表;進符號表;設設L Li i在符號表中位置為在符號表中位置為P Pi i,(C(Ci i,P,Pi i) )進隊列進隊列queuequeueS Si i1 1)產(chǎn)生)產(chǎn)生S Si i的代碼;的代碼; 2 2)gen(jgen(j, _ ,_ ,next.a

10、ddr, _ ,_ ,next.addr) );3 3)對標號)對標號nextnext拉鏈:拉鏈:next.addrnext.addr:=NXQ-1;:=NXQ-1;100(+ , i , j ,T100(+ , i , j ,T1 1 ) )101(:=, T101(:=, T1 1, _ , T ), _ , T )102(j, _ , _ , 0 ) 102(j, _ , _ , 0 ) 103(:= , m, _ , k )103(:= , m, _ , k )104(j, _ , _ , 0 ) 104(j, _ , _ , 0 ) 105( - , m, 1 , T105( - ,

11、 m, 1 , T2 2) )106(:= , T106(:= , T2 2, _ , k), _ , k)107(j, _ , _ ,104) 107(j, _ , _ ,104) CASE i+jCASE i+j of ofcase 2case 2:k:=mk:=m ; ;case 9case 9:k:=m-1k:=m-1 ; ;otherwise k:=m+1otherwise k:=m+1endendn n TestTest 102102n+1n+1 nextnext 0 104 1070 104 107n+2n+2L L1 1103103n+3n+3L L2 2105105queue

12、queue2 2n+2n+29 9n+3n+3otherwiseotherwise 產(chǎn)生標號產(chǎn)生標號L Ln n, ,連同連同NXQNXQ進符號表;設位置為進符號表;設位置為P Pn n, ,(T,P(T,Pn n) )進隊列進隊列queue (queue (上述條件都不滿足,一定可上述條件都不滿足,一定可以滿足本條件,以滿足本條件, TT )TT )100(+ , i , j ,T100(+ , i , j ,T1 1 ) )101(:=, T101(:=, T1 1, _ , T ), _ , T )102(j, _ , _ , 0 ) 102(j, _ , _ , 0 ) 103(:=

13、, m, _ , k )103(:= , m, _ , k )104(j, _ , _ , 0 ) 104(j, _ , _ , 0 ) 105( - , m, 1 , T105( - , m, 1 , T2 2 ) )106(:= , T106(:= , T2 2, _ , k ), _ , k )107(j, _ , _ ,104 ) 107(j, _ , _ ,104 ) 108( + , m, 1 , T108( + , m, 1 , T3 3 ) )109(:= , T109(:= , T3 3, _ , k ), _ , k )110(j, _ , _ ,107 ) 110(j,

14、_ , _ ,107 ) CASE i+jCASE i+j of of case 2 case 2:k:=mk:=m ; ; case 9 case 9:k:=m-1k:=m-1 ; ; otherwise k:=m+1 otherwise k:=m+1endendn n TestTest 102102n+1n+1 nextnext 0 104 107 1100 104 107 110n+2n+2L L1 1103103n+3n+3L L2 2105105n+4n+4L L3 3108108queuequeue2 2n+2n+29 9n+3n+3T Tn+4n+4endend 返填返填test

15、: Backpatch(test.addr,NXQtest: Backpatch(test.addr,NXQ););讀取讀取queue,queue,對對(Ci(Ci ,Pi ) ,Pi ),產(chǎn)生:,產(chǎn)生:(case,Ci(case,Ci ,Pi ,_); ,Pi ,_); backpatch(next.addr,NXQbackpatch(next.addr,NXQ) )CASE i+jCASE i+j of ofcase 2case 2:k:=mk:=m ; ;case 9case 9:k:=m-1k:=m-1 ; ;otherwise k:=m+1otherwise k:=m+1endend

16、n n TestTest 102102n+1n+1 nextnext 110110n+2n+2L L1 1103103n+3n+3L L2 2105105n+4n+4L L3 3108108queuequeue2 2n+2n+29 9n+3n+3T Tn+4n+4 111111(case,2,103, _ )111(case,2,103, _ )112(case,9,105, _ )112(case,9,105, _ )113(case,T,108, _ ) 113(case,T,108, _ ) 102(j, _ , _ , 0 ) 102(j, _ , _ , 0 ) 103(:= , m

17、, _ , k )103(:= , m, _ , k )104(j, _ , _ , 0 ) 104(j, _ , _ , 0 ) 105( - , m, 1 , T105( - , m, 1 , T2 2 ) )106(:= , T106(:= , T2 2, _ , k ), _ , k )107(j, _ , _ ,104 ) 107(j, _ , _ ,104 ) 108( + , m, 1 , T108( + , m, 1 , T3 3 ) )109(:= , T109(:= , T3 3, _ , k ), _ , k )110(j, _ , _ ,107 ) 110(j, _ ,

18、 _ ,107 ) 1141141146.10 6.10 過程調(diào)用過程調(diào)用過程調(diào)用時,程序轉(zhuǎn)向執(zhí)行另外一段代碼,執(zhí)行完過程調(diào)用時,程序轉(zhuǎn)向執(zhí)行另外一段代碼,執(zhí)行完畢后,返回原來的執(zhí)行點繼續(xù)往下執(zhí)行。正確的過畢后,返回原來的執(zhí)行點繼續(xù)往下執(zhí)行。正確的過程調(diào)用必須保證:程調(diào)用必須保證: 程序的控制能夠正確地轉(zhuǎn)移到被調(diào)用的過程。程序的控制能夠正確地轉(zhuǎn)移到被調(diào)用的過程。 被調(diào)用者能夠正確地從調(diào)用者哪里獲取數(shù)據(jù)。被調(diào)用者能夠正確地從調(diào)用者哪里獲取數(shù)據(jù)。 被調(diào)用者能夠把處理結果返回給調(diào)用者。被調(diào)用者能夠把處理結果返回給調(diào)用者。 同時,控制能夠返回到調(diào)用的地方繼續(xù)執(zhí)行。同時,控制能夠返回到調(diào)用的地方繼續(xù)執(zhí)行

19、。上述上述4 4條中,條中,1 1,4 4是控制聯(lián)系,是控制聯(lián)系,2 2,3 3是數(shù)據(jù)聯(lián)系。是數(shù)據(jù)聯(lián)系。工作工作中間代碼中間代碼程序的控制轉(zhuǎn)移到被調(diào)用的過程程序的控制轉(zhuǎn)移到被調(diào)用的過程call 過程名過程名被調(diào)用者能夠從調(diào)用者獲取數(shù)據(jù)被調(diào)用者能夠從調(diào)用者獲取數(shù)據(jù)par 參數(shù)參數(shù)i被調(diào)用者能夠把處理結果返回被調(diào)用者能夠把處理結果返回return yy代表返回代表返回值,可選值,可選控制能夠返回到調(diào)用的地方繼續(xù)執(zhí)行控制能夠返回到調(diào)用的地方繼續(xù)執(zhí)行過程調(diào)用過程調(diào)用和和數(shù)組元素數(shù)組元素相混淆的處理,如:相混淆的處理,如:X:=A(I,J)X:=A(I,J)解決方法:解決方法: 查符號表。這就要求數(shù)組元素或過程查符號表。這就要求數(shù)組元素或過程( (函數(shù)函數(shù)) )要先定要先定義,后使用;(如義,后使用;(如C C中的原型定義)中的原型定義)1. 文法:文法:S call call id (Elist id (Elist) ) Elist Elist E Elistlist , E | E , E | E 2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論