中間代碼基本塊劃分_第1頁
中間代碼基本塊劃分_第2頁
中間代碼基本塊劃分_第3頁
中間代碼基本塊劃分_第4頁
中間代碼基本塊劃分_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(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)化的方法5) 合并已知量6) 復(fù)寫傳播7) 刪除無用賦值1) 刪除公共子表達(dá)式2

2、) 代碼外提3) 強(qiáng)度削弱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)造基本塊,刪除不屬于任何基本塊的語句流程示意圖中間唐句,按四元式序列,給出如下程序流圖 read x ; read y ;(4) if c=0 goto L2

3、; x=y ; L1:c=c+1 ; y=c ; goto L1 ; L2: write y ;halt (以表本)三.部分代碼:入口條件1int i=0,j=-1,back_i=0,in_num=0,out_num=0;char g200;cout<<"請(qǐng)輸入要進(jìn)行基本塊劃分的四元式(按回車表示四元式輸入完畢):"<<endl;for(i=0;i<200;i+)gi='';ci尸';g口(局部),c(全局)清零gets(g);/輸入四元式for(i=0;i<200;i+)ci=gi;/ 將輸入的四元式備份到c口i

4、nin_num+尸1'/首句為入口語句,將語句序號(hào)放入in口-可編輯修改-入口條件 3for(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),將其放入 in出口條件 1outout_num+=(char)(int)*(g

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

6、quot;)"<<endl;-可編輯修改-for(i=0;*(g+i)!=''i+)語句if(*(g+i)='i'&&*(g+i+1)='f')back_i=i;for(;*(g+back_i)!='('back_i+)語句continue;inin_num+=*(g+back_i+1);出口條件for(i=0;*(g+i)!=''i+)if(*(g+i)='g'&&*(g+i+1)='o')back_i=i;for(;*(g+b

7、ack_i)!=')'back_i-)continue;/ 緊跟在條件語句后面的語句為入口/ 找到條件語句關(guān)鍵字if/ 找到條件語句的下一句,即入口/ 將入口語句序號(hào)放入 in2/ 轉(zhuǎn)移語句為出口語句/ 找到轉(zhuǎn)移語句的關(guān)鍵字goto/將語句序號(hào)放入outoutout_num+=*(g+back_i-1);inin_num+=(char)(int)*(g+back_i-1)+1);/其下一句是入口語句,將語句序號(hào)放入in口for(;j<1;j+)cout<<"sentence("<<outout_num-1<<&quo

8、t;)->-可編輯修改-("<<inin_num-1<<")"<<endl;for(;*(g+back_i)!='L'back_i+)/找到轉(zhuǎn)移語句能夠轉(zhuǎn)到的語句序continue;for(;*(c+ch)!=''ch+)for(;*(c+ch)!='L'ch+) continue; if(*(g+back_i+1)=*(c+ch+1)&&back_i!=ch)根據(jù)語句序號(hào)找到相應(yīng)的語句back_ch=ch;for(;*(c+back_ch)!=')&

9、#39;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(;*(g+back_i)!=')'back_i-)continue;outout_num+=*(g+back_i-1);

10、cout<<"cout<<"劃分好的代碼塊:"<<endl;停語句為出口語句,找到停語句/將語句序號(hào)放入out"<<endl<<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ī)則, 但仍然遇上了不困難,為了能方便的分塊,使程序能更加簡便、易懂, 我還自行將語句按

溫馨提示

  • 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)論