資源描述:
《編譯原理 中間代碼優(yōu)化》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實(shí)驗(yàn)三中間的代碼優(yōu)化某些編譯程序在中間代碼或目標(biāo)代碼生產(chǎn)之后要對其進(jìn)行優(yōu)化,所謂優(yōu)化就是對代碼進(jìn)行等價(jià)的變換。而變換后的代碼運(yùn)行結(jié)果與變換前的代碼運(yùn)行結(jié)果相同。而運(yùn)行速度加快或占用內(nèi)存空間減少。中間的代碼優(yōu)化就是對中間代碼進(jìn)行等價(jià)的變換?;緣K的有向圖DAG(DirectedAcyclicGraph)有向圖中任何一條通路都不是環(huán)路,則稱該有向圖為無環(huán)路有向圖,簡稱為DAG。一、實(shí)驗(yàn)題目:中間代碼的局部優(yōu)化二、實(shí)驗(yàn)?zāi)康模赫莆站植績?yōu)化方法、提高機(jī)器的運(yùn)行速度三、實(shí)驗(yàn)內(nèi)容:1、構(gòu)造基本塊內(nèi)的優(yōu)化DAG假設(shè):(1)ni為已知結(jié)點(diǎn)號,n
2、為新結(jié)點(diǎn)號;(2)訪問各結(jié)點(diǎn)信息時(shí),按結(jié)點(diǎn)號逆序排序2、完成對下例三類表達(dá)式的優(yōu)化(1)常值表達(dá)式的優(yōu)化(2)公共表達(dá)式的優(yōu)化(3)無用賦值的優(yōu)化3、輸出根據(jù)優(yōu)化的DAG重組四元式四、設(shè)計(jì)概要:首先要實(shí)現(xiàn)表達(dá)式中間代碼生成,采用遞歸下降子程序法實(shí)現(xiàn)。E→T{ω0“push(SYN,w)”T“QUAT”}T→F{ω1”push(SYN,w)”F“QUAT”}F→i“push(SEM,entry(w))”
3、(E)其中:·push(SYN,w)---當(dāng)前單詞w入符號棧SYN;·push(SEM,entry(w))---當(dāng)前i在符號表
4、中的入口值壓入語義棧SEM;·QUAT---生成四元式函數(shù)①T:=newtemp;②QT[j]=(SYN[k],SEM[s-1],SEM[s],T);j++;③pop(SYN,_);pop(SEM,_);pop(SEM,_);push(SEM,T);在對中間代碼進(jìn)行局部優(yōu)化五、程序代碼及運(yùn)行結(jié)果:1.表達(dá)式中間代碼生成#include#includeusingnamespacestd;charstr[50];charsem[50];charsyn[50];charch;inti=0;int
5、j=0;intn=0;intp=1;voidpush_sem(charw){sem[j++]=w;}voidpush_syn(charw){syn[n++]=w;}voidGen(){chars[2][2];charw;w=sem[--j];if(w>='1'&&w<='9'){s[0][1]=w;s[0][0]=sem[--j];}else{s[0][0]=w;s[0][1]='';}w=sem[--j];if(w>='1'&&w<='9'){s[1][1]=w;s[1][0]=sem[--j];}else{s[1][0]=
6、w;s[1][1]='';}cout<<"("<='a'&
7、&ch<='z')
8、
9、(ch>='1'&&ch<='9')){push_sem(ch);ch=str[i++];}else{//cout<<"表達(dá)式error!"<10、);ch=str[i++];l=F();if(l==0){return0;}Gen();}elsebreak;}return1;}intE(){intk,m,l;k=T();if(k==0){return0;}while(1){//push_syn(ch);if(ch=='+'){push_syn(ch);ch=str[i++];m=T();if(m==0){return0;}Gen();}elseif(ch=='-'){push_syn(ch);ch=str[i++];l=T();if(l==0){return0;}Gen(
11、);}elsebreak;}return1;}intmain(){intk,q=0;charw1,w2,w;chars[1][2];cout<<"輸入表達(dá)式(以'#'結(jié)束):";cin>>str;w1=str[i++];w2=str[i++];if(w2!='='){i=i-