詞法分析設(shè)計實驗報告(附代碼)_第1頁
詞法分析設(shè)計實驗報告(附代碼)_第2頁
詞法分析設(shè)計實驗報告(附代碼)_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗一詞法分析設(shè)計實驗學(xué)時:4實驗類型:綜合實驗要求:必修一、實驗?zāi)康耐ㄟ^本實驗的編程實踐,使學(xué)生了解詞法分析的任務(wù),掌握詞法分析程序設(shè) 計的原理和構(gòu)造方法,使學(xué)生對編譯的根本概念、原理和方法有完整的和清楚的 理解,并能正確地、熟練地運用。二、實驗內(nèi)容用VC+/VB/JAVA語言實現(xiàn)對C語言子集的源程序進行詞法分析。通過輸入 源程序從左到右對字符串進行掃描和分解,依次輸出各個單詞的內(nèi)部編碼及單詞 符號自身值;假設(shè)遇到錯誤那么顯示“ Error ,然后跳過錯誤局部繼續(xù)顯示;同時 進行標識符登記符號表的管理。以下是實現(xiàn)詞法分析設(shè)計的主要工作:1從源程序文件中讀入字符。2統(tǒng)計行數(shù)和列數(shù)用于錯誤單詞的

2、定位。3刪除空格類字符,包括回車、制表符空格。4 按拼寫單詞,并用內(nèi)碼,屬性二元式表示。屬性值token的機內(nèi) 表示5如果發(fā)現(xiàn)錯誤那么報告出錯6根據(jù)需要是否填寫標識符表供以后各階段使用 。 單詞的根本分類:關(guān)鍵字:由程序語言定義的具有固定意義的標識符。也稱為保存字例如 if、 for 、while、printf ;單詞種別碼為 1。標識符:用以表示各種名字,如變量名、數(shù)組名、函數(shù)名; 常數(shù):任何數(shù)值常數(shù)。如125, 1,;運算符:+、-、*、/ ;關(guān)系運算符: 、=、=、=、; 分界符:;、,、;三、實驗要求1、編程時注意編程風(fēng)格:空行的使用、注釋的使用、縮進的使用等。2、將標識符填寫的相應(yīng)符

3、號表須提供應(yīng)編譯程序的以后各階段使用。3、 根據(jù)測試數(shù)據(jù)進行測試。測試實例應(yīng)包括以下三個局部:全部合法的輸入。各種組合的非法輸入。由記號組成的句子。4、詞法分析程序設(shè)計要求輸出形式:例:輸入VC+語言的實例程序:If i=0 the n n+;a< = 3b %;輸出形式為:單詞二兀序列類型位置行,列單詞種別,單詞屬性for(1,for )關(guān)鍵字(1, 1)i(6,i )標識符(1, 2)=(4,=)關(guān)系運算符(1, 3)0(5,0 )常數(shù)(1, 4)the n(1 ,the n)關(guān)鍵字(1, 5)n(6,n )標識符(1, 6)+ErrorError(1, 7)?(2,;)分界符(1,

4、 8)a(6,a )標識符(2, 1)< =(4,<=)關(guān)系運算符(2, 2)3bErrorError(2, 4)%ErrorError(2, 4)(2,)分界符(2, 5)(2,;)分界符(2, 6)實驗報告正文:即面對一段程序源代碼,通過該程序,功能描述:該程序具有詞法分析功能,能檢查出源代碼是否由詞法錯誤。三、詞法分析實驗設(shè)計思想及算法:首先構(gòu)造六個表,key="auto","break","case","catch","char","class",&quo

5、t;co nst","co ntin ue","default","delete","do","double","else","e num","float","for","if"," in t","lo ng"," new","private","protected","publ

6、ic","register", "return","short","static","struct","switch","this","void","while","then"關(guān)鍵字表,單詞種別碼1;Delimiter="","(",")","","",",",&quo

7、t;.","",""分界符表單詞種別碼Operator="+","-","*","/"算術(shù)運算符表單詞種別碼3R_operators="<","<=","=",">",">=",關(guān)鍵字表,單詞種別碼 1;string Number100; 常數(shù)表單詞種別碼5;string Identifier100;標示符表單詞種別碼6;構(gòu)造關(guān)鍵字判斷函數(shù)ls

8、key(),字母判斷函數(shù)Isletter(), 數(shù)字判斷函數(shù)Isnu mber();構(gòu)造標示符判別函數(shù)InsertId(),假設(shè)輸入的標示符在標示符數(shù)組Identifier中,返回其下標,假設(shè)不在,將該標示符插到數(shù)組末尾。構(gòu)造標示符判別函數(shù)InsertNumber(),假設(shè)輸入的數(shù)字在數(shù)字數(shù)組Number 中,返回其下標,假設(shè)不在,將該數(shù)字插到數(shù)組末尾。具體分析函數(shù)analyse()具體實現(xiàn)輸入源代碼的識別。anaiyse()構(gòu)造思路,程序設(shè)計圖:綜合以上分析,畫出整個程序的運行分析程序圖,如下:回退開始輸入源文 件路徑 +T文件結(jié)束?是空格,空白或換行嗎跳過該字符指向下一字符/輸出word為

9、 普通標示符否.是字母嗎將字符參加字符數(shù)組 Word是指向下一字符將word與關(guān)鍵字表key進行匹配匹配?輸出word 為關(guān)鍵字整個程序的運行分析程序圖是輸出Word 內(nèi)容為不可識別否卜是界符嗎是數(shù)字嗎否將字符 參加字 符數(shù)組Word指向下一字符將字符參加字符數(shù)組 Word否b是數(shù)將字符加 入字符數(shù) 組 Word4_1F指向下一字符是識別指針內(nèi)容輸出word為界符輸出word為常數(shù)將字符 參加字 符數(shù)組Word軟件的測試方法和測試結(jié)果: 首先,將要分析的源代碼寫入一個文本,存于磁盤中,然后運行程序,輸入源代 碼文件存放的路徑,假設(shè)輸入路徑正確,程序?qū)⒆詣臃治鲈创a,假設(shè)輸入路徑不正 確,程序?qū)?/p>

10、顯示,路徑錯誤,請重新輸入的提示。下面為具體的運行實例:源代碼為:If i=0 the n n+;a v = 3b %)同,r=' E:巧tdyPPTT躱譯關(guān)mOFbug'.葷癢H;X亡畑-X ). .t名 :e賂 站 .二 U 石名 .工X 內(nèi)IX 邑輸 石F 件褒 § 八;GX M MMM-KJEMMkMKMMM MMKMM ;單詞 ifi蘭分忻如下二兀於列< ±,if>< 6,1>< 4,->C b,M>< 1-th(?n>MMg曇鋰識系數(shù)"-k六4電歹春« -MM符# 字備列4

11、 aError< 2,;>< 、< 4,<-> fcri-or Error< 2, >>< 2,;> Press anv key to cant inueh【符 算 符運r 迥曹系ro 標ErwtKlir,3>,4>輸出滿足要求。實驗總結(jié)設(shè)計的特點、缺乏、收獲與體會:通過此次實驗,讓我了解到如何設(shè)計、編制并調(diào)試詞法分析程序,熟悉了構(gòu) 造詞法分析程序的手工方式的相關(guān)原理,加深了對編譯原理詞法分析的理解,本 次使用C+語言直接編寫此法分析程序,也讓我重新熟悉了 C+語言的相關(guān)內(nèi)容, 加深了對C+語言的用途的理解。本程序的

12、數(shù)據(jù)輸入采取直接從文件中讀取,而 不是由鍵盤輸入,因此在測試過程中,輸入得到大大簡化,但是本程序的關(guān)鍵字 表只初始化了一局部關(guān)鍵字,還可繼續(xù)擴充只需擴大數(shù)組,向其中補充要添加 的關(guān)鍵字,而且程序的測試數(shù)據(jù)存在缺乏,程序可能存在未發(fā)現(xiàn)的漏洞,以上兩點有待改善。附錄該程序的源代碼:#include <iostream>#include<string>using namespace std;,"",""&&IsNumber(fgetc(fpin)arr=arr+ch;ch=fgetc(fpin);if(IsLetter(

13、ch) while(IsLetter(ch)|IsNumber(ch)arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR); row+;tt("<<line<<","<<row<<")"<<endl;elseInsertNumber(arr); row+; :case',' :case'' :case'' :cout<<ch<<"tt( 2,"&l

14、t;<ch<<")"<<"tt 分界符 "<<"tt("<<line<<","<<row<<")"<<endl;b reak;if(ch='=')cout<<">="<<"tt( 4,>=)"<<" tt 關(guān)系運算符"<<"tt("<&

15、lt;line<<","<<row<<")"<<endl;else cout<<">"<<"tt( 4,> )"<<"tt 關(guān)系運算 符 "<<"tt("<<line<<","<<row<<")"<<endl;fseek(fpin,-1L,SEEK_CUR);break;

16、case'<' :ch=fgetc(fpin);if(ch='=')cout<<"<="<<"tt( 4,<=)"<<" tt 關(guān)系運算符 "<<"t("<<line<<","<<row<<")"<<endl;else if(ch='>')cout<<"<>&quo

17、t;<<"tt( 4,<>)"<<" tt 關(guān)系運算符 "<<"t("<<line<<","<<row<<")"<<endl; elsecout<<"<"<<"tt( 4,< )"<<"tt 關(guān)系 運算符 "<<"t("<<line<

18、<","<<row<<")"<<endl; fseek(fpin,-1L,SEEK_CUR);break;default : cout<<ch<<"ttError"<<"ttError"<<"t t("<<line<<","<<row<<")"<<endl;break;case'>':ch=fgetc(fpin);cout<<"n*分析如下*"<<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論