資源描述:
《學(xué)生用-編譯原理實(shí)驗(yàn)指導(dǎo)書(shū)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、實(shí)驗(yàn)一無(wú)符號(hào)數(shù)的有窮自動(dòng)機(jī)的實(shí)現(xiàn)(一)實(shí)驗(yàn)?zāi)康臒o(wú)符號(hào)數(shù)的有窮自動(dòng)機(jī)的實(shí)現(xiàn)目的是使學(xué)生掌握文法的形式描述,窮自動(dòng)機(jī)的概念。將文法轉(zhuǎn)換成有窮自動(dòng)機(jī)的方法,理解出錯(cuò)處理程序思想,如何用狀態(tài)矩陣實(shí)現(xiàn)一個(gè)窮自動(dòng)機(jī)的機(jī)內(nèi)表示。(二)實(shí)驗(yàn)內(nèi)容1.無(wú)符號(hào)數(shù)的BNF描述(0)<無(wú)符號(hào)數(shù)>àd<余留無(wú)符號(hào)數(shù)>
2、.<十進(jìn)制數(shù)>
3、e<指數(shù)部分>(1)<余留無(wú)符號(hào)數(shù)>àd<余留無(wú)符號(hào)數(shù)>
4、.<十進(jìn)制數(shù)>
5、e<指數(shù)部分>
6、ε(2)<十進(jìn)制小數(shù)>àd<余留十進(jìn)制小數(shù)>(3)<余留十進(jìn)制小數(shù)>e<指數(shù)部分>
7、d<余留十進(jìn)制小數(shù)>
8、ε(4)<指數(shù)部分>àd<余留整指數(shù)>
9、+<整指
10、數(shù)>
11、-<整指數(shù)>(5)<整指數(shù)>àd<余留整指數(shù)>(6)<余留整指數(shù)>àd<余留整指數(shù)>
12、ε2.將G[<無(wú)符號(hào)數(shù)>]文法轉(zhuǎn)換成有窮自動(dòng)機(jī)。3.構(gòu)造狀態(tài)矩陣;將有窮自動(dòng)機(jī)的狀S1S2……Sn及輸入的字a1a2……am構(gòu)成一個(gè)n*m的矩陣。4.用狀態(tài)矩陣設(shè)計(jì)出一個(gè)詞法分析程序。5.掃描無(wú)符號(hào)數(shù),根據(jù)文法給出無(wú)符號(hào)數(shù)出錯(cuò)的位置。(三)實(shí)驗(yàn)要求1.學(xué)生課前要認(rèn)真閱讀實(shí)驗(yàn)指導(dǎo),理解實(shí)驗(yàn)內(nèi)容與相關(guān)理論知識(shí)的關(guān)系,并完成預(yù)習(xí)報(bào)告2.用C語(yǔ)言或其它高級(jí)語(yǔ)言編寫(xiě)程序3.寫(xiě)出實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)二語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式(一)實(shí)驗(yàn)?zāi)康倪M(jìn)一步掌握語(yǔ)法制導(dǎo)翻譯的概念,理
13、解中間語(yǔ)言,設(shè)計(jì)出錯(cuò)處理程序方法,掌握把表達(dá)式翻譯成中間語(yǔ)言的算法。(二)實(shí)驗(yàn)內(nèi)容1.從左到右掃描中綴表達(dá)式,經(jīng)語(yǔ)法分析找出中綴表達(dá)式出現(xiàn)的錯(cuò)誤并給出錯(cuò)誤的具體位置和類(lèi)型。一個(gè)運(yùn)算符棧存放暫時(shí)不能出現(xiàn)的運(yùn)算符,逆波蘭區(qū)存放逆波蘭表達(dá)式。142.測(cè)試所編程序,給出正確和錯(cuò)誤的結(jié)果。(三)實(shí)驗(yàn)要求1.學(xué)生課前要認(rèn)真閱讀實(shí)驗(yàn)指導(dǎo),理解實(shí)驗(yàn)內(nèi)容與相關(guān)理論知識(shí)的關(guān)系,并完成預(yù)習(xí)報(bào)告2.用C語(yǔ)言或其它高級(jí)語(yǔ)言編寫(xiě)程序3.寫(xiě)出實(shí)驗(yàn)報(bào)告實(shí)踐一無(wú)符號(hào)數(shù)的有窮自動(dòng)機(jī)的實(shí)現(xiàn)一、目的通過(guò)上機(jī)實(shí)習(xí),熟悉詞法分析程序所用的工具自動(dòng)機(jī),進(jìn)一步理解自動(dòng)機(jī)理論。掌握文法轉(zhuǎn)換成自動(dòng)
14、機(jī)的技術(shù)及有窮自動(dòng)機(jī)實(shí)現(xiàn)的方法。二、題目無(wú)符號(hào)數(shù)的有窮自動(dòng)機(jī)的實(shí)現(xiàn)三、要求及提示1、無(wú)符號(hào)數(shù)的BNF描述如下:0.<無(wú)符號(hào)數(shù)>àd<余留無(wú)符號(hào)數(shù)>
15、.<十進(jìn)制數(shù)>
16、e<指數(shù)部分>1.<余留無(wú)符號(hào)數(shù)>àd<余留無(wú)符號(hào)數(shù)>
17、.<十進(jìn)制數(shù)>
18、e<指數(shù)部分>
19、ε2.<十進(jìn)制小數(shù)>àd<余留十進(jìn)制小數(shù)>3.<余留十進(jìn)制小數(shù)>e<指數(shù)部分>
20、d<余留十進(jìn)制小數(shù)>
21、ε4.<指數(shù)部分>àd<余留整指數(shù)>
22、+<整指數(shù)>
23、-<整指數(shù)>5.<整指數(shù)>àd<余留整指數(shù)>6.<余留整指數(shù)>àd<余留整指數(shù)>
24、ε2、將G[<無(wú)符號(hào)數(shù)>]文法轉(zhuǎn)換成有窮自動(dòng)機(jī)。3、構(gòu)造狀態(tài)矩陣
25、;將有窮自動(dòng)機(jī)的狀S1S2……Sn及輸入的字a1a2……am構(gòu)成一個(gè)n*m的矩陣。1、狀態(tài)矩陣設(shè)計(jì)出一個(gè)詞法分析程序識(shí)別無(wú)符號(hào)數(shù)。2、掃描無(wú)符號(hào)數(shù),根據(jù)文法給出無(wú)符號(hào)數(shù)出錯(cuò)的位置。3、工具:C語(yǔ)言或其它高級(jí)語(yǔ)言4、實(shí)踐時(shí)間:8學(xué)時(shí)14四、實(shí)踐報(bào)告1、寫(xiě)出無(wú)符號(hào)數(shù)詞法分析的思想。2、畫(huà)出算法流程圖。3、寫(xiě)出調(diào)試程序出現(xiàn)的問(wèn)題及解決的方法。4、打印實(shí)踐報(bào)告及程序清單。5、報(bào)告給出測(cè)試的結(jié)果。五、參考范例1)無(wú)符號(hào)數(shù)的文法描述如下:0.<無(wú)符號(hào)數(shù)>àd<余留無(wú)符號(hào)數(shù)>
26、.<十進(jìn)制數(shù)>
27、e<指數(shù)部分>1.<余留無(wú)符號(hào)數(shù)>àd<余留無(wú)符號(hào)數(shù)>
28、.<十進(jìn)制數(shù)
29、>
30、e<指數(shù)部分>
31、ε2.<十進(jìn)制小數(shù)>àd<余留十進(jìn)制小數(shù)>3.<余留十進(jìn)制小數(shù)>e<指數(shù)部分>
32、d<余留十進(jìn)制小數(shù)>
33、ε4.<指數(shù)部分>àd<余留整指數(shù)>
34、+<整指數(shù)>
35、-<整指數(shù)>5.<整指數(shù)>àd<余留整指數(shù)>6.<余留整指數(shù)>àd<余留整指數(shù)>
36、ε2)無(wú)符號(hào)數(shù)的有窮自動(dòng)機(jī)實(shí)現(xiàn)的思想用0-----表示無(wú)符號(hào)數(shù);用1-----表示余留無(wú)符號(hào)數(shù);用2----表示十進(jìn)制小數(shù);用3-----表示余留十進(jìn)制小數(shù);用4-----表示指數(shù)部分;用5-----表示整指數(shù);用6-----表示余留整指數(shù)。輸入無(wú)符號(hào)數(shù)序列,從左到右掃描,遇到“#”號(hào)結(jié)束掃描。
37、設(shè)一個(gè)字符數(shù)組,接收輸入的無(wú)符號(hào)數(shù),對(duì)輸入的無(wú)符號(hào)數(shù)逐一進(jìn)行分析,用一個(gè)中間變量接收當(dāng)前字符。當(dāng)前字符值發(fā)生錯(cuò)誤時(shí),輸出錯(cuò)誤信息;當(dāng)前字符值正確時(shí),分析下一個(gè)字符,反復(fù)判斷,直至分析完畢。143)無(wú)符號(hào)數(shù)的有窮自動(dòng)機(jī)(Z表示結(jié)束符)無(wú)符號(hào)數(shù)有窮自動(dòng)機(jī)由圖1所示。圖14)無(wú)符號(hào)數(shù)有窮自動(dòng)機(jī)的狀態(tài)轉(zhuǎn)換矩陣無(wú)符號(hào)數(shù)有窮自動(dòng)機(jī)的狀態(tài)轉(zhuǎn)換矩陣由表1所示。de·+-ε0142ΦΦΦ1142ΦΦZ23ΦΦΦΦΦ334Φ5ΦZ46ΦΦΦ5Φ56ΦΦΦΦΦ66ΦΦΦΦZ145)算法流程圖初始化讀一個(gè)字符YN是否為#?N是#?讀一個(gè)字符是數(shù)字?YYN是數(shù)字?是小數(shù)點(diǎn)
38、.出錯(cuò)NY讀一個(gè)字符出錯(cuò)N讀一個(gè)字符是指數(shù)eYYN是#?讀一個(gè)字符是符號(hào)+/-讀一個(gè)字符是#?YY是數(shù)字?是數(shù)字?出錯(cuò)NNNY出錯(cuò)Y讀一