資源描述:
《編譯器-編譯原理課程設(shè)計(jì).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、廣西大學(xué)編譯原理課程設(shè)計(jì)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)姓名:課程:編譯原理指導(dǎo)教師:目錄一.程序簡(jiǎn)介與分析---------------------------------------------------------1二.程序適用范圍-----------------------------------------------------------1三.詞法分析---------------------------------------------------------------1四.語(yǔ)法分析----------------------
2、-----------------------------------------3五.語(yǔ)義分析和中間代碼生成------------------------------------------------9六.代碼生成--------------------------------------------------------------11七.流程圖----------------------------------------------------------------12八.實(shí)現(xiàn)------------------------
3、------------------------------------------13九.程序運(yùn)行結(jié)果----------------------------------------------------------13十.總結(jié)------------------------------------------------------------------18十一.附錄(源程序)--------------------------------------------------------19簡(jiǎn)單的編譯程序設(shè)計(jì)一.程序簡(jiǎn)介與分析本程序
4、由四個(gè)部分組成:詞法分析子程序,語(yǔ)法分析子程序,語(yǔ)義分析子程序,目標(biāo)代碼生成程序。本程序輸入一個(gè)叫haominjie.txt的c語(yǔ)言源程序,然后對(duì)它進(jìn)行詞法,語(yǔ)法,語(yǔ)義分析,并輸出匯編代碼。詞法分析輸入的是c語(yǔ)言源程序,輸出的3是具有獨(dú)立語(yǔ)法意義的單詞符號(hào)。語(yǔ)法分析以詞法分析產(chǎn)生的編碼流為輸入,按照SLR(1)分析方法進(jìn)行語(yǔ)法分析,產(chǎn)生語(yǔ)法樹,輸出移進(jìn)和歸約的動(dòng)作,如果源程序不符合文法,則有“語(yǔ)法分析出錯(cuò)”的提示。語(yǔ)義分析階段,在語(yǔ)法分析的同時(shí),在歸約的時(shí)候,給出相應(yīng)的語(yǔ)義動(dòng)作,最后輸出中間代碼四元式和新的符號(hào)表,如果有未聲明的變量出現(xiàn),則
5、會(huì)提示出出錯(cuò),并顯示出此變量的名稱。代碼生成階段,將語(yǔ)義分析得到的中間代碼四元式轉(zhuǎn)化為匯編語(yǔ)言的目標(biāo)代碼并輸出。二.程序適用范圍本程序的使用范圍為:整型常量,四則運(yùn)算(為了簡(jiǎn)化問(wèn)題,本程序只考慮加法運(yùn)算和乘法運(yùn)算)和布爾表達(dá)式以及相應(yīng)的賦值語(yǔ)句,條件轉(zhuǎn)移語(yǔ)句和循環(huán)語(yǔ)句。三.詞法分析根據(jù)詞法分析的需要,我將源程序中的單詞符號(hào)分為:保留字,字母(標(biāo)識(shí)符),界符三類,統(tǒng)一用一張表表示如下:界符,保留字表單詞=+*>:;{}()andifthenwhiledoint標(biāo)志符編碼1234567891031323335363725程序從源程序文件haom
6、injie.txt中一次讀入一個(gè)字符,并判斷它是不是字母,界符,保留字,空格,換行,結(jié)束符號(hào)或者非法字符。流程圖如下:詞法分析流程圖一.語(yǔ)法分析.源程序中涉及的文法G[P]定義如下表:說(shuō)明語(yǔ)句表達(dá)式布爾表達(dá)式句法0、P’→P1、P→id()L;R2、L→L;D3、L→D4、D→id:int5、E→E+T6、E→T7、T→T*F8、T→F9、F→(E)10、F→id11、B→BandB12、B→id>id13、M→id=E14、S→ifBthenM15、S→whileBdoM16、S→M17、N→N;S18、N→S19、R→{N}.上述文法的
7、每個(gè)非終結(jié)符的FIRST集和FOLLOW集如下表:FIRST集FOLLOW集P{id}{#}L{id}{;}D{id}{;}E{(,id}{},;,+,),#}T{(,id}{},;,+,),*,#}F{(,id}{},;,+,),*,#}B{id}{then,do,and}M{id}{},;}S{id,while,if}{},;}N{id,while,if}{},;}R{{}{#}.文法G[P]的項(xiàng)目集部分如下:0.P’→.P1.P’→P.2.P→.id()L;R3.P→id.()L;R4.P→id(.)L;R5.P→id().L;R6.
8、P→id()L.;R7.P→id()L;.R8.P→id()L;R.9.L→.L;D10.L→L.;D11.L→L;.D12.L→L;D.13.D→.id:int14.D→id.