c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)

c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)

ID:7850373

大小:218.50 KB

頁(yè)數(shù):14頁(yè)

時(shí)間:2018-02-28

c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
資源描述:

《c語(yǔ)言編譯器設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、C語(yǔ)言編譯器的設(shè)計(jì)與實(shí)現(xiàn)01計(jì)算機(jī)4班18號(hào)任春妍2號(hào)陳俊我們?cè)O(shè)計(jì)的編譯程序涉及到編譯五個(gè)階段中的三個(gè),即詞法分析器、語(yǔ)法分析器和中間代碼生成器。編譯程序的輸出結(jié)果包括詞法分析后的二元式序列、變量名表、狀態(tài)棧分析過(guò)程顯示及四元式序列程序,整個(gè)編譯程序分為三部分:(1)詞法分析部分(2)語(yǔ)法分析處理及四元式生成部分(3)輸出顯示部分一.詞法分析器設(shè)計(jì)由于我們規(guī)定的程序語(yǔ)句中涉及單詞較少,故在詞法分析階段忽略了單詞輸入錯(cuò)誤的檢查,而將編譯程序的重點(diǎn)放在中間代碼生成階段。詞法分析器的功能是輸入源程序,輸出單詞符號(hào)。我們規(guī)定輸出的單詞符號(hào)格式為如

2、下的二元式:(單詞種別,單詞自身的值)#defineACC-2#definesyl_if0#definesyl_else1#definesyl_while2#definesyl_begin3#definesyl_end4#definea5#definesemicolon6#definee7#definejinghao8#defines9#defineL10#definetempsy11#defineEA12#defineEO13#defineplus14#definetimes15#definebecomes16#defineop_and

3、17#defineop_or18#defineop_not19#definerop20#definelparent21#definerparent22#defineident23#defineintconst24函數(shù)說(shuō)明1.讀取函數(shù)readline()、readch()詞法分析包含從源文件讀取字符的操作,但頻繁的讀文件操作會(huì)影響程序執(zhí)行效率,故實(shí)際上是從源程序文件”source.dat”中讀取一行到輸入緩沖區(qū),而詞法分析過(guò)程中每次讀取一個(gè)字符時(shí)則是通過(guò)執(zhí)行readch()從輸入緩沖區(qū)獲得的;若緩沖區(qū)已被讀空,則再執(zhí)行readline()從

4、source.dat中讀取下一行至輸入緩沖區(qū)。2.掃描函數(shù)scan()掃描函數(shù)scan()的功能是濾除多余空格并對(duì)主要單詞進(jìn)行分析處理,將分析得到的二元式存入二元式結(jié)果緩沖區(qū)。3.變量處理find()變量處理中首先把以字母開(kāi)頭的字母數(shù)字串存到spelling[]數(shù)組中,然后進(jìn)行識(shí)別。識(shí)別過(guò)程是先讓它與保留關(guān)鍵字表中的所有關(guān)鍵字進(jìn)行匹配,若獲得成功則說(shuō)明它為保留關(guān)鍵字,即將其內(nèi)碼值寫(xiě)入二元式結(jié)果緩沖區(qū);否則說(shuō)明其為變量,這時(shí)讓它與變量名表中的變量進(jìn)行匹配(變量匹配函數(shù)find()),如果成功,則說(shuō)明該變量已存在并在二元式結(jié)果緩沖區(qū)中標(biāo)記為此

5、變量(值填為該變量在變量名表中的位置),否則將該變量登記到變量名表中,再將這個(gè)新變量存入二元式緩存數(shù)組中。4.?dāng)?shù)字識(shí)別number()數(shù)字識(shí)別將識(shí)別出的數(shù)字填入二元式結(jié)果緩存數(shù)組。5.顯示函數(shù)顯示函數(shù)的功能在屏幕上輸出詞法分析的結(jié)果(即二元式序列程序),同時(shí)給出二元式個(gè)數(shù)及源程序行數(shù)統(tǒng)計(jì)。二.語(yǔ)法分析器設(shè)計(jì)語(yǔ)法分析器的核心是三張SLR分析表以及針對(duì)這三張SLR分析表進(jìn)行語(yǔ)義加工的語(yǔ)義動(dòng)作。編譯程序中語(yǔ)法分析處理及四元式生成部分主要是以二元式作為輸入,并通過(guò)SLR分析表對(duì)語(yǔ)法分析處理過(guò)程進(jìn)行控制,使四元式翻譯的工作有條不紊的進(jìn)行,同時(shí)識(shí)別語(yǔ)

6、法分析中的語(yǔ)法錯(cuò)誤。在處理if和while語(yǔ)句時(shí),需要進(jìn)行真值或假值的拉鏈和返填工作,以便轉(zhuǎn)移目標(biāo)的正確填入。1.控制語(yǔ)句的SLR分析表1設(shè)計(jì)過(guò)程如下:將擴(kuò)展文法G’0)S’àS1)SàifeSelseS2)SàwhileeS3)Sà{L}4)Sàa;5)LàS6)LàSL用∈_CLOSURE方法構(gòu)造LR(0)項(xiàng)目規(guī)范簇為:I0:S’à·SSà·ifeSelseSSà·whileeSSà·{L}Sà·a;I1:S’àS·I2:Sàif·eSelseSI3:Sàwhile·eSI4:Sà{·L}Là·SLà·SLSà·ifeSelseSSà

7、·whileeSSà·{L}Sà·a;I5:Sàa·;I6:Sàife·SelseSSà·ifeSelseSSà·whileeSSà·{L}Sà·a;I7:Sàwhilee·SSà·ifeSelseSSà·whileeSSà·{L}Sà·a;I8:Sà{L·}I9:LàS·LàS·LLà·SLLà·SSà·ifeSelseSSà·whileeSSà·{L}Sà·a;I10:Sàa;·I11:SàifeS·elseSI12:SàwhileeS·I13:Sà{L}·I14:SàSL·I15:SàifeSelseSSà·ifeSelseSSà·

8、whileeSSà·{L}Sà·a;I16:SàifeSelseS·構(gòu)造文法G’中非終結(jié)符的FOLLOW集如下:0)FOLLOW(S’)={#}0)SàifeSelseS得 FOLLOW(S)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

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

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