資源描述:
《回填拉鏈翻譯舉例.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、設(shè)程序結(jié)構(gòu)定義如下:PSSifEthenSSifEthenSelseSSwhileEdoSSbeginLendSALL;SLS布爾表達式E及賦值語句A定義見書上為能及時地回填有關(guān)四元式串的轉(zhuǎn)移地址,改寫文法如下:PSCifEthenSCS1TpCSelseSTPS2WwhileWdWEdoSWdS3SbeginLendSALSL;LLSS1自底向上語法制導(dǎo)翻譯方案實現(xiàn)過程分析(關(guān)于控制結(jié)構(gòu)的翻譯)翻譯中使用回填-拉鏈技術(shù)翻譯while(ad)thenx=y+z步驟1:移進while,并按如下產(chǎn)生式歸約Wwhile{W.codebegin=nextstat;}四元式表內(nèi)
2、容如下:nextstat100W.codebegin句型變?yōu)閃(ad)thenx=y+z步驟2:對于句型W(ad)thenx=y+z移進(a
3、ginE.false101goto_句型變?yōu)閃Edoif(c>d)thenx=y+z步驟3:對于句型WEdoif(c>d)thenx=y+z移進do并按如下產(chǎn)生式歸約WdWEdo{backpatch(E.true,nextstat);Wd.chain=E.false;Wd.codebegin=W.codebegin;}四元式表內(nèi)容如下:100ifad)thenx=y+z步驟4:對于句型Wdif(c>d)thenx=y+z移進if(c>d),并按如下產(chǎn)生式歸約Ei1relo
4、pi2{E.true=nextstat;E.false=nextstat+1;E.codebegin=nextstat;gen(ifadgoto_103goto_104E.trueE.false句型變?yōu)閃difEthenx=y+z步驟5:對于句型WdifEthenx=y+z按如下產(chǎn)生式歸約Ci
5、fEthen{backpatch(E.true,nextstat);C.chain=E.false;}四元式表內(nèi)容:100ifadgoto104103goto_104C.chain句型變?yōu)閃dCx=y+z步驟6:對于句型WdCx=y+z移進x=y+z,按如下產(chǎn)生式歸約Bi{p=lookup(i.name);if(p?nil)E.place=pelseerror}BB1+B2{B.place=newtemp;gen(B.place=B1.place+B2.place;}Ai=B{p=lo
6、okup(i.name);if(p?nil)gen(p=E.place)elseerror}四元式表內(nèi)容:100ifadgoto104103goto_104t=y+zC.chain句型變?yōu)椋篧dCA105x=t106步驟7:對于句型WdCA,按如下產(chǎn)生式歸約SA{S.chain=0}SCS1{S.chain=merge(C.chain,S1.chain);}//可能S1ifathenx=1elsex=2;四元式表內(nèi)容:100ifa7、n101goto_nextstat102ifc>dgoto104103goto_104t=y+zS.chain句型變?yōu)椋篧dS105x=t106步驟8:對于句型WdS,按如下產(chǎn)生式歸約SWdS1{backpatch(S1.chain,Wd.codebegin);gen(gotoWd.codebegin);S.chain=Wd.chain}四元式表內(nèi)容:100ifa