中間代碼基本塊劃分_第1頁
中間代碼基本塊劃分_第2頁
中間代碼基本塊劃分_第3頁
中間代碼基本塊劃分_第4頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、中間代碼基本塊的劃分任務(wù)要求在理解代碼優(yōu)化原理的基礎(chǔ)上,實(shí)現(xiàn)將中間代碼序列劃分基本塊的程序1 理解編譯過程中代碼優(yōu)化的定義2 掌握各種代碼優(yōu)化的方法3 定義程序流圖中的基本塊4 明確程序流圖的形式及功能5 程序設(shè)計(jì)及調(diào)試一原理闡述1.代碼優(yōu)化的定義:代碼優(yōu)化的實(shí)質(zhì)就是提高代碼質(zhì)量從而加快代碼執(zhí)行速度的一種技術(shù)。根據(jù)代碼優(yōu)化是否涉及具體的計(jì)算機(jī),又將代碼優(yōu)化分為與機(jī)器有關(guān)的優(yōu)化( 即窺孔優(yōu)化 ),一般在目標(biāo)代碼上進(jìn)行;與機(jī)器無關(guān)的優(yōu)化,常在中間代碼上進(jìn)行。又根據(jù)優(yōu)化范圍分成局部優(yōu)化、循環(huán)優(yōu)化、全局優(yōu)化。2. 代碼優(yōu)化的方法 :1)刪除公共子表達(dá)式5) 合并已知量2)代碼外提6) 復(fù)寫傳播3)強(qiáng)度

2、削弱7) 刪除無用賦值4) 刪除歸納變量3. 基本塊和劃分基本塊的定義和方法: 定義: 基本塊就是代碼序列中一組順序執(zhí)行的語句序列,只有一個(gè)入口和一個(gè)出口。而劃分- 可編輯修改-基本塊的實(shí)質(zhì)就是定義入口和出口語句。劃分基本塊的方法:1)定義入口語句四元式的第一個(gè)語句;由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句能轉(zhuǎn)到的語句;緊跟在條件轉(zhuǎn)移語句后面的語句。2)定義出口語句下一個(gè)入口語句的前導(dǎo)語句;轉(zhuǎn)移語句(包括轉(zhuǎn)移語句本身);停語句(包括停語句本身)。構(gòu)造基本塊,刪除不屬于任何基本塊的語句?流程示意圖中間宵句 a入語句 p按四元式序列,給出如下程序流圖 read x ; read y ; L1:c=c+1 i

3、f c=0 goto L2; x=y ; y=c ;- 可編輯修改 - goto L1 ; L2: write y; halt (以表示)三?部分代碼:入口條件 1in t i=0,j=-1,back_i=0,in _num=0,out_ num=0;char g200;cout<<" 請(qǐng)輸入要進(jìn)行基本塊劃分的四元式(按回車表示四元式輸入完畢):"<<e ndl;for (i=0;i<200;i+ )gi=' 'ci=' ' g(局部) ,c (全局)清零gets ( g);II 輸入四元式for (i=0;i&

4、lt;200;i+ )ci=gi;II 將輸入的四元式備份到cin i n_n um+='1:II 首句為入口語句,將語句序號(hào)放入in- 可編輯修改 -入口條件2for(i=0;*(g+i)!=''i+)/ 由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句能轉(zhuǎn)到的語句為入口語句if(*(g+i)=':') /找到轉(zhuǎn)移語句能轉(zhuǎn)到的語句back_i=i; /i是指針,back_i 記錄當(dāng)前位置,用于搜索語句序號(hào)for (;*(g+back_i)!=')'back_i-)continue;inin_num+=*(g+back_i-1); /得到入口語句序號(hào),將其

5、放入in出口條件1outout_num+=(char)(int)*(g+back_i-1)-1);break;/ 入口語句的上一句是出口語句,將其序號(hào)放入outcout<<" _ "<<endl<<endl;cout<<" 判定輸出語句/輸入語句過程 ( 輸出語句> 輸入語句 ) :"<<endl<<endl;for(;j!=0;j+)cout<<"sentence ("<<outout_num-1<<") -&

6、gt; ("<<inin_num-1<<")"<<endl;-可編輯修改-入口條件3for(i=0;*(g+i)!=''i+)/ 緊跟在條件語句后面的語句為入口語句/ 找到條件語句關(guān)鍵字ifif(*(g+i)='i'&&*(g+i+1)='f')back_i=i;/ 找到條件語句的下一句,即入口for(;*(g+back_i)!='('back_i+)語句continue;/ 將入口語句序號(hào)放入 ininin_num+=*(g+back_i+1);出

7、口條件2for(i=0;*(g+i)!=''i+)/ 轉(zhuǎn)移語句為出口語句if(*(g+i)='g'&&*(g+i+1)='o')/ 找到轉(zhuǎn)移語句的關(guān)鍵字gotoback_i=i;for(;*(g+back_i)!=')'back_i-)continue;-可編輯修改-outout_num+=*(g+back_i-1);/ 將語句序號(hào)放入outinin_num+=(char)(int)*(g+back_i-1)+1);/ 其下一句是入口語句,將語句序號(hào)放入infor(;j<1;j+)cout<<&q

8、uot;sentence("<<outout_num-1<<")->("<<inin_num-1<<")"<<endl;for(;*(g+back_i)!='L'back_i+)/ 找到轉(zhuǎn)移語句能夠轉(zhuǎn)到的語句序號(hào)continue;for(;*(c+ch)!=''ch+)for(;*(c+ch)!='L'ch+)continue;if(*(g+back_i+1)=*(c+ch+1)&&back_i!=ch)/ 根據(jù)語句

9、序號(hào)找到相應(yīng)的語句back_ch=ch;for(;*(c+back_ch)!=')'back_ch-)continue;cout<<"sentence("<<outout_num-1<<")->("<<*(c+back_ch-1)<<")"<<endl;break; / 輸出轉(zhuǎn)移-可編輯修改-ch=0;出口條件3for(i=0;*(g+i)!=''i+) /停語句為出口語句,找到停語句continue;back_i=i;for

10、(;*(g+back_i)!=')'back_i-)continue;outout_num+=*(g+back_i-1); /將語句序號(hào)放入outcout<<"_"<<endl<<endl;cout<<" 劃分好的代碼塊:"<<endl;for(i=0;i<4;i+)cout<<"Block "<<i+1<<" : ("<<ini<<") - ("<<outi<<")"<<endl;/ 輸出各基本塊內(nèi)的語句四程序運(yùn)行結(jié)果1. 運(yùn)行輸入的四元式:-可編輯修改-2.輸出結(jié)果:劃分好的基本代碼塊五. 總結(jié)這次我主要負(fù)責(zé)中間代碼基本塊的劃分。有了上次詞法分析器的程序設(shè)計(jì)的經(jīng)驗(yàn),我以書中的實(shí)例為參考模型,進(jìn)行編程,這樣就避免了由空想帶來的不必要的麻煩。整個(gè)設(shè)計(jì)還是以C+ + 中的模塊化設(shè)計(jì)為主。特別是在語句類型判斷上,在編寫代碼時(shí) ,雖然只要遵守判斷規(guī)則,但仍然遇上了不困難,為了能方便的分塊,使程序能更加簡便、易-可編輯修改 -懂,我還自行將語句按規(guī)則分為

溫馨提示

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

評(píng)論

0/150

提交評(píng)論