資源描述:
《無符號數(shù)有窮自動機實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、內(nèi)蒙古工業(yè)大學信息工程學院實驗報告成績:指導教師審核(簽名):年月日預習報告□實驗報告□無符號數(shù)的有窮自動機的實現(xiàn)(一)實驗目的無符號數(shù)的有窮自動機的實現(xiàn)目的是使學生掌握文法的形式描述,窮自動機的概念。將文法轉(zhuǎn)換成有窮自動機的方法,理解出錯處理程序思想,如何用狀態(tài)矩陣實現(xiàn)一個窮自動機的機內(nèi)表示。(二)實驗內(nèi)容1.無符號數(shù)的BNF描述1)<無符號數(shù)>àd<余留無符號數(shù)>
2、.<十進制數(shù)>
3、e<指數(shù)部分>2)<余留無符號數(shù)>àd<余留無符號數(shù)>
4、.<十進制數(shù)>
5、e<指數(shù)部分>
6、ε3)<十進制小數(shù)>àd<余留
7、十進制小數(shù)>4)<余留十進制小數(shù)>e<指數(shù)部分>
8、d<余留十進制小數(shù)>
9、ε5)<指數(shù)部分>àd<余留整指數(shù)>
10、+<整指數(shù)>
11、-<整指數(shù)>6)<整指數(shù)>àd<余留整指數(shù)>7)<余留整指數(shù)>àd<余留整指數(shù)>
12、ε2.將G[<無符號數(shù)>]文法轉(zhuǎn)換成有窮自動機。3.構(gòu)造狀態(tài)矩陣;將有窮自動機的狀S1S2……Sn及輸入的字a1a2……am構(gòu)成一個n*m的矩陣。4.用狀態(tài)矩陣設計出一個詞法分析程序。5.掃描無符號數(shù),根據(jù)文法給出無符號數(shù)出錯的位置。(三)實驗要求1.學生課前要認真閱讀實驗指導,理解實驗內(nèi)容與相關理
13、論知識的關系,并完成預習報告2.用C語言或其它高級語言編寫程序3.寫出實驗報告第頁內(nèi)蒙古工業(yè)大學信息工程學院實驗報告成績:指導教師審核(簽名):年月日預習報告□實驗報告□無符號數(shù)的有窮自動機的實現(xiàn)(一)實驗目的通過上機實習,熟悉詞法分析程序所用的工具自動機,進一步理解自動機理論。掌握文法轉(zhuǎn)換成自動機的技術及有窮自動機實現(xiàn)的方法。(二)實驗內(nèi)容1.無符號數(shù)的BNF描述1)<無符號數(shù)>àd<余留無符號數(shù)>
14、.<十進制數(shù)>
15、e<指數(shù)部分>2)<余留無符號數(shù)>àd<余留無符號數(shù)>
16、.<十進制數(shù)>
17、e<指數(shù)部分
18、>
19、ε3)<十進制小數(shù)>àd<余留十進制小數(shù)>4)<余留十進制小數(shù)>e<指數(shù)部分>
20、d<余留十進制小數(shù)>
21、ε5)<指數(shù)部分>àd<余留整指數(shù)>
22、+<整指數(shù)>
23、-<整指數(shù)>6)<整指數(shù)>àd<余留整指數(shù)>7)<余留整指數(shù)>àd<余留整指數(shù)>
24、ε2.無符號數(shù)的有窮自動機實現(xiàn)的思想用0-----表示無符號數(shù);用1-----表示余留無符號數(shù);用2----表示十進制小數(shù);用3-----表示余留十進制小數(shù);用4-----表示指數(shù)部分;用5-----表示整指數(shù);用6-----表示余留整指數(shù)。輸入無符號數(shù)序列,從左到
25、右掃描,遇到“#”號結(jié)束掃描。設一個字符數(shù)組,接收輸入的無符號數(shù),對輸入的無符號數(shù)逐一進行分析,用一個中間變量接收當前字符。當前字符值發(fā)生錯誤時,輸出錯誤信息;當前字符值正確時,分析下一個字符,反復判斷,直至分析完畢。3.無符號數(shù)的有窮自動機(Z表示結(jié)束符)無符號數(shù)有窮自動機由圖1所示。第頁內(nèi)蒙古工業(yè)大學信息工程學院圖1有窮自動機4.無符號數(shù)有窮自動機的狀態(tài)轉(zhuǎn)換矩陣無符號數(shù)有窮自動機的狀態(tài)轉(zhuǎn)換矩陣由表1所示。de·+-ε0142ΦΦΦ1142ΦΦZ23ΦΦΦΦΦ334Φ5ΦZ46ΦΦΦ5Φ56ΦΦΦΦ
26、Φ66ΦΦΦΦZ(三)實驗要求1.學生課前要認真閱讀實驗指導,理解實驗內(nèi)容與相關理論知識的關系,并完成預習報告2.用C語言或其它高級語言編寫程序3.寫出實驗報告(四)程序流程圖第頁內(nèi)蒙古工業(yè)大學信息工程學院是#?是數(shù)字?Y是數(shù)字?讀一個字符Y是#?出錯結(jié)束Y初始化讀一個字符是否為#?是數(shù)字?讀一個字符是#?N是小數(shù)點.讀一個字符是數(shù)字?出錯讀一個字符是#?N是指數(shù)e讀一個字符出錯是符號+/-讀一個字符YYNYNNYNYYYYNNN出錯N(五)程序代碼//zhangtianyou.cpp:定義控制臺應用
27、程序的入口點。//#include"stdafx.h"#include#defineLEN30第頁內(nèi)蒙古工業(yè)大學信息工程學院intmain(){charnumber[LEN]={0};lab0:inti=0;printf("Pleaseinputanumber:");scanf("%s",number);if(number[i]=='#'){printf("inputthisnumberisright!");gotolast;}else{lab1:if(number[i]>=
28、'0'&&number[i]<='9'){i++;if(number[i]=='#'){printf("inputthisnumberisright!");gotolast;}elsegotolab1;}else{if(number[i]=='.'){i++;do{if(number[i]>='0'&&number[i]<='9')i++;else{printf("inputthisnumberiserror!");gotolast;}}whil