詞法分析實(shí)驗(yàn)報(bào)告_第1頁(yè)
詞法分析實(shí)驗(yàn)報(bào)告_第2頁(yè)
詞法分析實(shí)驗(yàn)報(bào)告_第3頁(yè)
詞法分析實(shí)驗(yàn)報(bào)告_第4頁(yè)
詞法分析實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、詞法分析器(1,V main ”(5,”()(5,”)(5,”)(1,”i nt ”)(2,” a”)(5,”,”)(2,” b”)(5,;”(2,a ”(4,”=”)(3,”10”)(5,”;”)(2,” b”)(4,=)(2,a ”(4,”+”、實(shí)驗(yàn)?zāi)康?通過(guò)設(shè)計(jì)編制調(diào)試一個(gè)具體的詞法分析程序,加深對(duì)詞法分析原理的理解。 并掌握在對(duì)程序設(shè)計(jì)語(yǔ)言源程序進(jìn)行掃描過(guò)程中將其分解為各類單詞的詞法分析方法。編制一個(gè)讀單詞過(guò)程,從輸入的源程序中,識(shí)別出各個(gè)具有獨(dú)立意義的單詞,即基本保留字、標(biāo)識(shí)符、常數(shù)、運(yùn)算符、分隔符五大類。并依次輸出各個(gè)單詞的內(nèi)部編碼及單詞符號(hào)自身值。、實(shí)驗(yàn)要求 如源程序?yàn)镃語(yǔ)言。輸

2、入如下一段:main ()int a,b;a = 10;b = a + 20;#要求輸出如右圖。要求:1、將單詞分為五種識(shí)另U關(guān)鍵字:main、if、int、for、while、do、return、break、continue ;單詞種別碼為1。標(biāo)識(shí)符;單詞種別碼為 2。常數(shù)為無(wú)符號(hào)整形數(shù);單詞種別碼為 3。運(yùn)算符包括:+、-、*、/、=、=、=、!=;單詞種別碼為4。分隔符包括:,、;、卜(、);單詞種別碼為5。2、使用一符一種的分法關(guān)鍵字、運(yùn)算符和分界符可以每一個(gè)均為一種標(biāo)識(shí)符和常數(shù)仍然一類一種三、實(shí)驗(yàn)內(nèi)容1、功能描述改程序是一個(gè)實(shí)現(xiàn)詞法分析的功能,能識(shí)別5種單詞,其他單詞報(bào)錯(cuò)。2、程序結(jié)

3、構(gòu)描述int lsKey(char *Word)關(guān)鍵字匹配函數(shù),查詢是否為關(guān)鍵字,若是,返回值為1,否則為0。int lsAlpha(char c)查看是否為字母,若是,返回值為1,否則為0。int IsNum(char c) 查看是否為數(shù)字,若是,返回值為1,否則為0。void scanner(FILE *fp)掃描函數(shù),掃描程序中的字符串并調(diào)用上述三種函數(shù)檢查是否是字母、 數(shù)字,是否是關(guān)鍵字,并輸出。fseek (fp, -1, 1)回退一個(gè)字符。fgetc (fp)從數(shù)據(jù)流中區(qū)下一個(gè)字符。fope n文件打開(kāi)函數(shù),返回指向文件第一個(gè)字符的指針?biāo)摹?shí)驗(yàn)結(jié)果測(cè)試內(nèi)容為mai n() int

4、a,b; a = 10;b = a + 20;#結(jié)果( - E: vcgonechtngiDebugw.測(cè)試代碼為void mai n() int a,b; if(a = 10;) b +=20;c=%;#結(jié)果為測(cè)試代碼main ()int a,b;if(a :(? 宀主于 -宦 4,無(wú)藝pe t iipn ,ac),b)十,20if A,int ,b五、實(shí)驗(yàn)過(guò)程記錄1、 因?yàn)橛玫交赝撕瘮?shù)fseek (),而以前沒(méi)有用過(guò)這個(gè)函數(shù),所以開(kāi)始時(shí)很苦惱,不知道如 何回退一個(gè)字符,后來(lái)問(wèn)了同學(xué),才明白原來(lái)有這么一個(gè)函數(shù),頓時(shí)豁然開(kāi)朗。2、本次試驗(yàn)中word20保存字符串時(shí),不能正確保存,總是出錯(cuò),原因

5、是 while(lsNum(ch)|lsAlpha(ch)Wordi=ch;i+;ch=fgetc(fp);中,i+與Wordi=ch;次序不對(duì),后來(lái)多次思索,發(fā)現(xiàn)問(wèn)題。六、實(shí)驗(yàn)總結(jié)本次實(shí)驗(yàn)花了將近一個(gè)下午才完成。在紙上設(shè)計(jì)的時(shí)間大約40分鐘,剩下的時(shí)間是錄入和調(diào)試。本次實(shí)驗(yàn)使我認(rèn)識(shí)到,一段時(shí)間擱置,不編程序,水平會(huì)下降,好多有關(guān)c語(yǔ)言的知識(shí)會(huì)忘掉,所以以后我會(huì)經(jīng)常寫(xiě)寫(xiě)程序。另外,通過(guò)本次實(shí)驗(yàn),我又進(jìn)一步加深對(duì)詞法分析原理的理解??偟膩?lái)說(shuō),獲益匪淺!附錄#in clude#in clude#in clude#in clude#in cludeChar*Key9=void,main,int,if

6、,then,else,return,break,continue; char ch;/ 存儲(chǔ)識(shí)別出的單詞流int IsAlpha(char c) / 判斷是否為字母if(c=a)|(c=A) return 1; else return 0;int IsNum(char c) / 判斷是否為數(shù)字 if(c=0&c=9) return 1;else return 0;int IsKey(char *Word) / 識(shí)別關(guān)鍵字函數(shù)int m,i;for(i=0;i8;i+)if(m=strcmp(Word,Keyi)=0)return 1; return 0;/ 掃描函數(shù)void scanner(F

7、ILE *fp)char Word20=0;char ch;int i,c; ch=fgetc(fp); if(IsAlpha(ch)/ 獲取字符,指針 fp 并自動(dòng)指向下一個(gè)字符/ 判斷該字符是否是字母Word0=ch; ch=fgetc(fp); i=1; while(IsNum(ch)|IsAlpha(ch) / 判斷該字符是否是字母或數(shù)字 Wordi=ch; i+;ch=fgetc(fp);Wordi=0; /0 代表字符結(jié)束 ( 空格 )fseek(fp,-1,1); / 回退一個(gè)字符 c=IsKey(Word); / 判斷是否是關(guān)鍵字 if(c=0) cout(2,Word)end

8、l;/ 不是關(guān)鍵字else cout(1,Word)endl; / 輸出關(guān)鍵字else/ 開(kāi)始判斷的字符不是字母 if(IsNum(ch) / 判斷是否是數(shù)字 Word0=ch; ch=fgetc(fp);i=1; while(IsNum(ch) Wordi=ch; i+; ch=fgetc(fp);Wordi=0; fseek(fp,-1,1); / 回退 cout(3,Word)endl;else / 開(kāi)始判斷的字符不是字母也不是數(shù)字 Word0=ch; switch(ch) case: case: case(: case): case: case: case,: case: case;:

9、cout(5,Word)endl; break; case+:ch=fgetc(fp);if(ch=|ch=+)Word1=ch;+cout(4,Word)endl;/ 運(yùn)算符 += 或判斷結(jié)果為 else fseek(fp,-1,1);cout(4,Word)endl;/ 判斷結(jié)果為 +break;case-:ch=fgetc(fp);if(ch=|ch=-)Word1=ch;cout(4,Word)endl; else fseek(fp,-1,1);cout(4,Word)endl; / 判斷結(jié)果為 -break;case*:case/:case!:case=:ch=fgetc(fp);i

10、f(ch=)Word1=ch;cout(4,Word)endl;else fseek(fp,-1,1);cout(4,Word)endl;break;case:ch=fgetc(fp);if(ch=|ch=)Word1=ch; cout(4,Word)endl;else fseek(fp,-1,1);cout4tWordendl; / 判斷結(jié)果為 :ch=fgetc(fp);if(ch=|ch=)Word1=ch;cout(4,Word)endl;else fseek(fp,-1,1);cout(4,Word)endl;break;default:cout( 無(wú)法識(shí)別字符 ,Word)endl; break;void main()FILE *fp;fp=fopen(c:,r);if(fp=NULL) / 讀取文件內(nèi)容,并返回文件指針,該指針指向文件的第一個(gè)字符 cout 讀入文件錯(cuò)誤 !endl;exi

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論