詞法分析程序構造原理與實現技術試驗報告文檔_第1頁
詞法分析程序構造原理與實現技術試驗報告文檔_第2頁
詞法分析程序構造原理與實現技術試驗報告文檔_第3頁
詞法分析程序構造原理與實現技術試驗報告文檔_第4頁
詞法分析程序構造原理與實現技術試驗報告文檔_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、詞法分析程序構造原理與實現技術實驗報告變更說明日期版本變更位置變更說明作者2014/4/91.0初稿生成房皓2014/4/91.0完善截稿房皓、實驗目的:本實驗的U的在于在教師的引導下以問題回朔與思維啟發(fā)的方式,使學生在 不斷的探究過程中掌握編譯程序設計和構造的基本原理和實現技術,啟迪學生的 抽象思維、激發(fā)學生的學習興趣、培養(yǎng)學生的探究精神和專業(yè)素養(yǎng),從而提高學 生發(fā)現問題、分析問題和解決問題的能力。二、實驗內容:實驗項口完成以下正則文法所描述的Pascal語言子集單詞符號的詞法分析 程序。標識符f字母I標識符字母I標識符數字無符號整數數字I無符號整數數字單字符分界符一+丨一丨*丨;丨(丨)雙

2、字符分界符f大于二I小于二I小于 I冒號二I斜豎*小于f 等于大于f冒號一:斜豎一/該語言的保留字:begin end if then else for do while and or not設計說明(1)該語言大小寫不敬感;(2)字母為a-z A-Z,數字為0-9; (3) 可以對上述文法進行擴充和改造;(4)'/*/'為程序的注釋部分。設計要求(1)給出各單詞符號的類別編碼;(2)詞法分析程序應能發(fā)現輸 入串中的錯誤;(3)詞法分析作為單獨一遍編寫,詞法分析結果為二元式序列 組成的中間文件;(4)設計兩個測試用例(盡可能完備),并給出測試結果。三、實驗環(huán)境:操作系統(tǒng):Win

3、dows 7軟件: VC+6.0四、程序功能描述:給出了各單詞符號的類別編碼;詞法分析程序能夠對給出的文件中的輸入串做出正確的詞法;詞法分析程序能發(fā)現文件輸入串中的錯誤;詞法分析結果為二元式序列組成的中間文件;詞法分析程序能兼容注釋并能發(fā)現文件注釋未關閉的錯誤五、數據結構設計:char T0KEN20;FILE *Fp_out=fopenC'result. txt",11 w11); char ch;intint zhushi=O;cti=Fgetc(fp);六、程序結構描述:設計方法:本程序采用從文件讀取字符串,根據已有文法、詞法的構成及規(guī)定對字 符串進行詞法分析,其種類主

4、要包括保留字.標識符、無符號數字、字符等, 將分析的結果寫入另一個文件。程序規(guī)定的單詞符號及其種別碼見下表:單詞符號及其種別碼表單詞符號種別碼單詞符號種別碼begin1無符號整數13end2+14If3-15then4*16else517for6(18do7)19whileX=20and9>21or10>=22not11<23標識符12<=24<>25 26/27/*28引29主要函數說明:匚麗 cffx classesEi tSGIobalsQ lookup (char *strj 金 mainOQ scannerJFILE *fp)lookupO:每調用

5、一次,就以TOKEN中的字符串查保留字表,若查到,就將 相應關鍵字的類別碼賦給整型變量C;否則將c置為0;main():主函數;scanner():掃描函數,完成程序的主要功能,包括讀字符串、分析處理、分 析處理等。函數調用關系說明:main()函數調用scanner()函數; scanner()函數調用lookupO函數。執(zhí)行框圖:1)總體結構圖:是2)掃描程序結構框圖:七、實驗過程結果截圖:inputtxt -記亙本CD | 回'文件(F)編牽(E)艷武(0)查看(V)密為(H)Iasdf 1234 a 4 < > <> ( ; tt*/*dfakldfj*

6、/ >=dfa1結果一:result.txt - F辜本a回文性®鋌(C)梧式(0) g§iV)辛助(H)蕩魂«®算強嚴J叫»(13, 0 (K,;)(非法字符,忙皿樹,/)測試用例二:文件(F)矚詢町格式(O) “(V)毎劉(H)123 2 asdf w ;678 (dfer) if then A888/ Ajff結果二:d result.brt13事本!上旦宣旦魁文性(F)編垢懺(6 EM辛助(H)(13,123) (13,2) (12, asdf) (12, w) (17,;) (13, 678) (18, 0 (12, dfer)

7、 (19, ) (3, if) (4, then) (28, /*)(程 序有錯誤,注釋沒有關閉I )八、實驗總結:實驗心得:通過本次實驗我鍛煉了自己的上機操作能力及編程能力,并對理論知識有了 進一步的了解。本實驗基本思路比較清晰,用較為簡單的算法就能實現;解 決實驗中遇到的問題也花費了一部分時間,我增長了處理關于文件錯誤的能 力;實驗中遇到的問題:主要問題就是在讀取文件時對文件末尾的判斷預處理,有兩個問題花費了大 部分時間,一個是在回退時要判斷是否為文件末尾,若是則不需要回退;另 外一個就是要先讀取一個字符再用feof(fp)來判斷是否為文件尾,且兩個應 緊密相連;程序的自我評價:此程序實現

8、了要求中的所有功能,并增加了對注釋的一些操作,但因編程能 力的欠缺,其中有的地方不免有些繁雜,還有一些潛藏的問題,需要進一步 測試來時程序變得更加具有健壯性。九、程序清單:/* *$*$*$*課題名稱:詞法分析程序構造原理與實現技術作者:房皓進修生13410801最后修改時間:2014.4.9 19:47*/* * * * * *$* * 單詞符號及 其分類編碼單詞符號種別碼單詞符號種別碼begin1無符號整數13end2+14if3-15then4*16else5;17for6(18do7)19while8=20and9>21or10>=22not11<23標識符12<

9、;=24o25 26/27/*28*/29/*$*奪*$* */#include<iostream> #include<ctype.h>#include<string.h>#include<stdlib.h> using namespace std;/int look叩(char *str)每調用一次,就以TOKEN中的字符串查保留字表,若查到,就將相應 關鍵字的類別碼賦給整型變量c:否則將c宜為0char*letter 11 = "begin","end","else","f

10、or","do”,"while","and","or", "not" -JI 保留 字int i;for(i=0;i<ll;i+)(if(strcmp(strJetteri)=O)比較是否相同return i+1;若相同,返回相應的種別碼return 0;/ int scanner(FILE *fp) charTOKEN20;FILE *fp_out=fopen(Mresult.txtn;,wH); char ch;int i=O,c;int zhushi=O;前不是注釋,zhushi=l

11、表示當前及以后的都是注釋 ch=fgetc(fp);while(!feof(fp)if(zhushi=O)i=0;if(ch=7lch=' )elseif(isalpha(ch)ch=tolower(ch);TOKEN0=ch;i+;ch=fgetc(fp);while(isalnum(ch)(if(isalpha(ch)ch=tolower(ch);TOKENi=ch;i+; ch=fgetc(fp);TOKENiW;if(ch!=EOF) 此判斷,遇到文件結尾仍返回的話,則 fseek(fp,-lL.l); 最后一個字符c=lookup(TOKEN):if(c=O)fprintf(

12、fp_out;,(%d,%s),12.TOKEN); printf("(%d,%s)n'15JOKEN);elsefprintf(fp_out;,(%d,%s),c.TOKEN); printf(,(%d,%s)n,c,TOKEN);/zhushi等于0表示當/判斷文件結朿是否為字母轉換成小寫數字或字母經驗證,若沒有/ch的值永遠為文件查找保留字/標識符/標識符/保留字/保留字else是否為數字if(isdigit(ch)TOKEN0=ch; ch=fgetc(fp);i卄;while(isdigit(ch)TOKENi=ch;i+;ch=fgetc(fp);)TOKENi=

13、0,; if(ch!=EOF)fseek(fp,-lL.l);fprintf(fp_out;,(%d.%s), 13 .TOKEN);無符號整數printf(,(%d,%s)n, 16.TOKEN);無符號整數elseswitch(ch)casek1:if(!feof(fp)ch=fgetc(fp);if(ch=,= )printf(H(%d,%s)n,24;,<=,r);elseif(ch=,>,)fprintf(fp_out/,(%d,%s),25;,<>H); printf(H(%d)%s)n,25;,oN);elseif(ch!=EOF)fscck(fp,l,l

14、);fprintf(fp_out/,(%d,%c),23;<,); printf(H(%d,%c)n,23;<r):break:case=*: fprintf(fp_out;,(%d,%c),20/=,); printf(,'(%d,%c)nH,20?=1);break;case、':if(!feof(fp) ch=fgetc(fp);if(ch=,)fprintf(fp_out;,(%d,%s)N22?,=H); primf(”(d,%s)n”,22,”);)elseif(ch!=EOF)fseek(fprLl); fprintf(fp_out;,(%d,%c),

15、21 A); printf(H(%d,%c)n,21;,);break;caseV:fprintf(fp_out;,(%d,%c),l 4,屮); printf(,'(%d,%c)n',t14,+,);)break:case-1:fprintf(fpout;,(%d,%c), 15,r);primf(”(d,%c)n”5,);break;case1*:fprintf(fp_out;,(%d,%c), 16/*1); printfC(%d,%c)n”,16 嚴);)break;case:':fprintf(fp_out;,(%d,%c),J 7,:');primf

16、(”(d,%c)n”J7,');break:caseV: fprintf(fp_out;,(%d,%c), 1 &'(');printf(H(%d,%c)nM8:(,);break;case1/: fprintf(fp_out;,(%d,%c), 19 J)'); printf(H(%d,%c)nM9,T);)break;case/:if(!feof(fp) ch=fgetc(fp);if(ch=w)zhushi=l;/zhushi=l;fprintf(fp_out;,(%d,%s),28;7*H); printf(H(%d,%s)n,28:,/*H);

17、)else if(ch!=EOF) fseek(fprLl);fprimf(fp_ou(d,%cy;27,7); primf("(%d,%c)n”,27,7);break:case?:if(!feof(fp) ch=fgetc(fp);if(ch=r) fprimf(fp_ou(d,%s)”,26=J; printf(M(%d,%s)n,26:,:=M);)else if(ch!=EOF) fseek(fp,-lj);break;default: fprimf(fp_ou(s,%c)T 非法字符 ch); printf(“ (s,%c)n","非法字符",ch); break;ch=fgetc(fp);if(zhushi= 1)該部分為檢査注釋是否結束,若結束,則令shuzhi=O;if(ch=,*')if(!feof(fp)ch=fgetc(fp);if(ch=7r)fprimf(fp_ou(s,%s)T 注釋結束 丁叨); prin

溫馨提示

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

評論

0/150

提交評論