資源描述:
《華中科技大學(xué)編譯原理課設(shè).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、華中科技大學(xué)軟件學(xué)院《編譯技術(shù)》課程設(shè)計(jì)報(bào)告實(shí)驗(yàn)名稱C/C++語言編譯器設(shè)計(jì)姓名學(xué)號(hào)班級(jí)指導(dǎo)教師2010年11月22日編譯技術(shù)課程設(shè)計(jì)報(bào)告一、實(shí)驗(yàn)題目實(shí)驗(yàn)概述:用C語言對(duì)下述文法和單詞表定義的語言設(shè)計(jì)編制一個(gè)編譯器。具體要求:1)單詞符號(hào)及種別表單詞符號(hào)種別編碼單詞值main1 int2 float3 double4 char5 if6 else7 do8 while9 l(l
2、d)*10內(nèi)部字符串(+
3、-
4、ε)d*(.dd*
5、ε)(e(+
6、-
7、ε)dd*
8、ε)20二進(jìn)制數(shù)值表示=21 +22-23 *2
9、4 /25 (26 )27 {28 }29 ,30 ;31 >32 >=33 <34 <=35 ==36 !=37 單詞符號(hào)及其種別表2)語法結(jié)構(gòu)定義<程序>::=main()<語句塊><語句塊>::=‘{‘<語句串>’}’<語句串>::=<語句>{;<語句>};<語句>::=<賦值語句>
10、<條件語句>
11、<循環(huán)語句><賦值語句>::=ID=<表達(dá)式><條件語句>::=if<條件><語句塊>[else<語句塊>]<循環(huán)語句>::=do<語句塊>while<條件><條件>::=<表達(dá)式><關(guān)系運(yùn)算符><表達(dá)式
12、><表達(dá)式>::=<項(xiàng)>{+<項(xiàng)>
13、-<項(xiàng)>}<項(xiàng)>::=<因子>{*<因子>
14、/<因子>}<因子>::=ID
15、num
16、(<表達(dá)式>)num::=(+
17、-
18、ε)數(shù)字*(.數(shù)字?jǐn)?shù)字*
19、ε)(e(+
20、-
21、ε)數(shù)字?jǐn)?shù)字*
22、ε)ID::=字母(字母
23、d數(shù)字)*字母::=a
24、b
25、c…
26、z
27、A
28、B
29、C…
30、Z數(shù)字::=0
31、1
32、2…
33、9<關(guān)系運(yùn)算符>::=<
34、<=
35、>
36、>=
37、==
38、!=一、實(shí)驗(yàn)?zāi)康?)通過該課程設(shè)計(jì),熟練應(yīng)用編譯原理的基本理論和方法2)學(xué)會(huì)用C/C++高級(jí)程序設(shè)計(jì)語言設(shè)計(jì)一個(gè)編譯器的技術(shù)3)加深對(duì)編譯原理
39、的分析理論的理解,培養(yǎng)動(dòng)手實(shí)踐能力4)通過設(shè)計(jì)、編制、調(diào)試一個(gè)編譯器,掌握其設(shè)計(jì)方法和技術(shù),提高解決實(shí)際問題的綜合素質(zhì)二、實(shí)驗(yàn)要求處理用戶提交的符合上述文法的源代碼序列,生成四元式中間代碼或X86平臺(tái)上的目標(biāo)代碼。一、實(shí)驗(yàn)步驟1)畫出識(shí)別上述語言單詞的狀態(tài)轉(zhuǎn)換圖2)用C/C++語言編寫詞法分析程序(應(yīng)考慮能被語法分析程序調(diào)用)3)預(yù)處理,去除注釋、多余空格、回車換行符等4)設(shè)計(jì)實(shí)現(xiàn)語法分析程序(調(diào)用上述詞法程序分析單詞)5)設(shè)計(jì)構(gòu)造屬性文法及中間代碼序列結(jié)構(gòu)6)采用語法制導(dǎo)翻譯法,完成語義分析程序設(shè)計(jì),生
40、成四元式中間代碼7)或?qū)⑸傻乃脑街虚g代碼轉(zhuǎn)換成X86平臺(tái)上的目標(biāo)代碼8)設(shè)計(jì)若干用例,上機(jī)測(cè)試并通過所設(shè)計(jì)實(shí)現(xiàn)的編譯器二、實(shí)驗(yàn)方案設(shè)計(jì)實(shí)現(xiàn)1.總體設(shè)計(jì)思想本課設(shè)的任務(wù)是完成一個(gè)完整的編譯器,處理用戶提交的符合所定文法的源程序代碼,生成四元式中間代碼,進(jìn)而翻譯成等價(jià)的X86平臺(tái)上匯編語言的目標(biāo)程序。編譯程序的工作過程劃分為下列5個(gè)過程:詞法分析,語法分析,語義分析和中間代碼生成,代碼優(yōu)化,目標(biāo)代碼生成。其中,詞法分析階段的基本任務(wù)是從以字符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào),并以二元組的形式輸
41、出,以作為語法分析階段的輸入。語法分析階段的基本任務(wù)是將詞法分析階段產(chǎn)生的二元組作為輸入,根據(jù)語言的語法規(guī)則,識(shí)別出各種語法成分,并判斷該單詞符號(hào)序列是否是該語言的一個(gè)句子。語義分析的任務(wù)是首先對(duì)每種語法單位進(jìn)行靜態(tài)的語義審查,然后分析其含義,并用另一種語言形式(本課設(shè)采用四元式)來描述這種語義。代碼優(yōu)化的任務(wù)是對(duì)前階段產(chǎn)生的中間代碼進(jìn)行等價(jià)變換或改造,以期獲得更為高效即省時(shí)間和空間的目標(biāo)代碼。目標(biāo)代碼生成的任務(wù)是將中間代碼變換成特定機(jī)器上的絕對(duì)指令代碼或可重定位的指令代碼或匯編指令代碼(本課設(shè)生成匯編指
42、令代碼)。在詞法分析階段,通過DOS環(huán)境手動(dòng)輸入字符串序列(以’#’作為結(jié)束標(biāo)志)作為帶分析的源程序,調(diào)用詞法掃描子程序?qū)⒆址远M的形式輸出(若有不屬于該語言單詞符號(hào)出現(xiàn),則進(jìn)行出錯(cuò)處理),詞法掃描子程序包括了對(duì)源程序的預(yù)處理(忽略多余空格、回車換行符等空白字符),以及對(duì)單詞的識(shí)別和分類,以形成(單詞種別,單詞自身的值)形式的二元組,并將用戶自定義變量信息存入程序變量信息表。在語法分析階段,采用自上而下的遞歸下降分析法,從文法的開始符號(hào)出發(fā),根據(jù)文法規(guī)則正向推導(dǎo)出給定句子。根據(jù)遞歸下降分析函數(shù)編寫規(guī)
43、則來編寫相應(yīng)的函數(shù),在各個(gè)函數(shù)的分析過程中調(diào)用詞法分析程序中的掃描程序,發(fā)出“取下一個(gè)單詞符號(hào)”的命令,以取得下一個(gè)單詞符號(hào)作語法分析。在語義分析和中間代碼生成階段,采用語法制導(dǎo)翻譯法,使用屬性文法為工具來描述程序設(shè)計(jì)語言的語義。首先審查詞法分析得到的每個(gè)語法結(jié)構(gòu)的靜態(tài)語義,如果靜態(tài)語義正確再生成中間代碼(本課設(shè)中采用四元式)。使用屬性文法作為描述程序設(shè)計(jì)語言語義的工具,采用語法制導(dǎo)翻譯法完成對(duì)語法成分的翻譯工作,即在語法分析