




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
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求值的代碼,結(jié)果存入求值的代碼,結(jié)果存入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求值的代碼,結(jié)果存入求值的代碼,結(jié)果存入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的關(guān)的關(guān)系確定轉(zhuǎn)移目標。系確定轉(zhuǎn)移目標。 標號標號L Li i : 編譯時加入;編譯時加入; 引入隊列記錄引入
5、隊列記錄CiCi, , Li Li 的對應(yīng)關(guān)系。的對應(yīng)關(guān)系。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)設(shè)置空隊列:設(shè)置空隊列: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進符號表;進符號表;設(shè)設(shè)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進符號表;設(shè)位置為進符號表;設(shè)位置為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)用者能夠把處理結(jié)果返回給調(diào)用者。被調(diào)用者能夠把處理結(jié)果返回給調(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)用者能夠把處理結(jié)果返回被調(diào)用者能夠把處理結(jié)果返回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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新解讀《CB-T 3895-1999船用柴油機清潔度測量方法》新解讀
- 新解讀《CB-T 3850 - 1999船用分流式離心潤滑油濾器》新解讀
- 第18課 科技文化成就 課件 人教版部編八年級下冊歷史
- 汽車傳感器與檢測技術(shù)電子教案:組合式加速度傳感器
- Brand KPIs for neobanking N26 in the United States-英文培訓課件2025.4
- 汽車傳感器與檢測技術(shù)電子教案:開關(guān)式節(jié)氣門位置傳感器
- 單位管理量化管理制度
- 地面危險作業(yè)管理制度
- 介紹校園活動方案
- 倉庫包裝比賽活動方案
- 2023-2024學年湖北省恩施市小學數(shù)學四年級下冊期末點睛提升考試題
- 廣州市人力資源和社會保障局事業(yè)單位招聘工作人員模擬檢測試卷【共500題含答案解析】
- GB/T 2013-2010液體石油化工產(chǎn)品密度測定法
- FZ/T 72001-2009滌綸針織面料
- FZ/T 62033-2016超細纖維毛巾
- 在漫畫中識別身邊的違章施工作業(yè)
- 小學科學教育科學六年級下冊物質(zhì)的變化 無字天書
- 凈水廠畢業(yè)設(shè)計(圖紙+計算書)
- 河北工程大學食堂CI手冊
- 機械設(shè)備維修的安全知識(課堂PPT)
- 住宅小區(qū)室外道路及管網(wǎng)配套工程施工方案
評論
0/150
提交評論