編譯器的設(shè)計與實現(xiàn)ppt課件

編譯器的設(shè)計與實現(xiàn)ppt課件

ID:33544396

大小:217.00 KB

頁數(shù):67頁

時間:2018-05-25

編譯器的設(shè)計與實現(xiàn)ppt課件_第1頁
編譯器的設(shè)計與實現(xiàn)ppt課件_第2頁
編譯器的設(shè)計與實現(xiàn)ppt課件_第3頁
編譯器的設(shè)計與實現(xiàn)ppt課件_第4頁
編譯器的設(shè)計與實現(xiàn)ppt課件_第5頁
資源描述:

《編譯器的設(shè)計與實現(xiàn)ppt課件》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、編譯器的設(shè)計與實現(xiàn)ppt制作:張云時間:2008-03回顧語言設(shè)計簡單的C目標機器建模編譯系統(tǒng)框架一些主要的數(shù)據(jù)結(jié)構(gòu)(詞法節(jié)點,語法節(jié)點,中間表示,目標代碼)目標代碼的運行本節(jié)內(nèi)容描述目標代碼的生成:如何從中間表示(語法樹)得到目標代碼呢?示例:聲明語句賦值語句If語句while語句函數(shù)調(diào)用與返回問題要處理什么樣的C代碼?對應的語法樹結(jié)構(gòu)(中間表示)是什么?對應什么樣的asm代碼?如何生成目標代碼?具體實現(xiàn)編譯器前端編譯器后端源程序中間表示目標代碼*.c*.asm語法樹要處理什么樣的C代碼?簡化的C函數(shù)調(diào)用與返回If語句While語句賦值語句表達式數(shù)組聲明語句控制

2、語句示例intf1(intx,inty){if(x

3、idWidget(intx,inty){inta,b;a=x+y;b=x-y;}變量名類型數(shù)組?位置其它xint01yint02aint01bint02函數(shù)名返回類型參數(shù)個數(shù)參數(shù)列表局部變量個數(shù)局部變量列表wigetvoid22…ba返回地址主調(diào)函數(shù)的bpXY…bpsp相對位置!對于例子intp;p=1;變量名類型數(shù)組?地址其它pint01aint12…在遇到intp;語句的時候,建立對應的符號表項,如圖:遇到賦值語句p=1;以后,查找符號表中名稱為p的項,找到p的相對地址1,因此,p的地址是:bp+1+1同樣,可以得到數(shù)組元素a[2]的地址a的地址=bp+1+2

4、a[2]的地址=bp+1+2+2ppcA[0]Old_bpA[1]A[2]……bp0+1+2+3+4+5asm代碼p=1;(假定p的相對地址為1)生成代碼如下:movax,1mov[bp+1+1],axa[2]=7;(假定a的相對地址為2)生成代碼如下:movax,7mov[bp+1+2+2],ax賦值語句具體實現(xiàn)掃描語法樹的過程中,遇到賦值節(jié)點賦值節(jié)點p1switch(tn.NType){caseNodeType.AssignStm:if(tn.child[0].NType==NodeType.VarID){//根據(jù)變量名查找符號表,取出變量的地址varaddr

5、=varProcess(tn.child[0]);//表達式語句處理;最終結(jié)果存放到ax中expProcess(tn.child[1]);Codetmpcode=this.NextCode();tmpcode.Op="MOV";tmpcode.Arg1=varaddr;tmpcode.Arg2="AX";}break;……}//查找符號表,找出變量的相對地址,構(gòu)造變量的地址,返回stringvarProcess(TreeNodetn){Stringvaraddr;//局部變量?參數(shù)變量?全局變量?注意區(qū)分!VarInfoVarsym=getvar(symtable

6、,tn);If(varsym!=null){Varaddr=“[bp+1+”+Varsym.rva+”]”;}Returnvaraddr;}voidexpProcess(TreeNodetn){switch(tn.NType){caseNodeType.VarID:varaddr=varProcess(tn);tmpcode=NextCode();tmpcode.Op="MOV";tmpcode.Arg1="AX";tmpcode.Arg2=varaddr;break;caseNodeType.ConstID:tmpcode=NextCode();tmpcode.

7、Op="MOV";tmpcode.Arg1="AX";tmpcode.Arg2=tn.nodestr;break;caseNodeType.ADD:expProcess(tn.child[1]);tmpcode=NextCode();tmpcode.Op="MOV";tmpcode.Arg1=“BX";tmpcode.Arg2=“AX”;expProcess(tn.child[0]);Tmpcode=NextCode();tmpcode.Op=“ADD";tmpcode.Arg1=“AX";tmpcode.Arg2=“BX”;break;caseNodeType.

8、FunCa

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。