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