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

下載本文檔

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

文檔簡介

1、詞法分析實(shí)驗(yàn)報(bào)告班級:姓名:學(xué)號:1. 實(shí)驗(yàn)要求a) 可以識(shí)別每個(gè)單詞符號,并以記號形式輸出;b) 識(shí)別注釋c) 統(tǒng)計(jì)字符,單詞,行,列數(shù)等d) 檢查錯(cuò)謀并報(bào)告位置e) 發(fā)現(xiàn)錯(cuò)誤修正并恢復(fù)2. 程序自動(dòng)機(jī)設(shè)計(jì)如手寫圖片。3. 程序源代碼詞法分析器by程聞博以下保留字以及運(yùn)算符取自c語言核心技術(shù);/部分位運(yùn)算符("<<" >>"<< = ">> = ")未列入;內(nèi)存定位運(yùn)算符*算作算數(shù)運(yùn)算符;/char * keyword34 = “auto; "break", hase; ”c

2、har: "const", "continue", "default", "do ”double: "else", wenum "extern", float; ”for: "goto; 'if; "int"r tong: "register", “return; bshort "signed; "sizeof; ”static; “struct: 'switch: btypedef"r -

3、print化 "union", "unsigned*, "void", 'volatile爲(wèi)"while", ”mairt;/保留字/char * count_op5 =:"*"r v %”;/算數(shù)運(yùn)算符/char * assignment_opll = r = "f" += ,"*= 7= b%= "& "a = u;/賦值運(yùn)算符/char * self_op2 = +:/char * comparison_op6 = r<&quo

4、t;f <=",-> = - = w!="/符/char * logic.op=&&”. -| t;邏輯運(yùn)算符/char * bool_op4 ="|u怖爾位運(yùn)算符/char * getmem_op5 = ”&丁;內(nèi)存定位運(yùn)算符/char * else_op51 = "(?。黄渌\(yùn)算符/char * note3 = 7/ 7二"廠;注釋/char * sentence =丁語句分割#inelude <stdio.h>#inelude <stdlib.h>#include <str

5、ing.h>#inelude <ctype.h>#inelude <vector>using namespace std;file *fpfpo;文件指針char curr;/讀入的字符int line, row;char temp1000;int i = 0;int total_words, total_word;struct errint line;int row;int mode;;typedef struct err err;vector<err> errjist;struct id_saveint times;char contain1000

6、;struct id_save* next;;typedef struct id_save* id_saveptr;id_saveptr idjist;void id_countoint k;for(id_saveptr curr = idist; curr->next != null; curr = curr->next) int flag = 1;for(k = 0; tempk !=、0: k+)if(curr->containk != tempk)f-ag ho;break;if(f_ag : 1c?p?currjcomainsnn 0)( cur7vtimes+ r

7、eturn"idsavep= curr2 m new(idisave);curr2otimes hl;for(k h 0 二 empsllxo; k+)( curr2 "contains » tempz;)curr2vcontainsn 3 curr2lvnex( m idl-istvnext; id-isunext u curr2; void 0urputdl=st2 int j h t printf(*d 卑rr); if(idl-istjnextnnull) for(idsaveptr curr n id=stvnext; curtvnex-nnuf cur

8、r h curtvnex 三 printfnoa-%-30s%30d 3j cuuconep cumtimes);j+void bugrepoaint reason)-er 二 emp;(empine h -inp temp.row n row;(emp.mode h reason;errl-ist.pushbackaemp)void outputbugrepo二0亠printf(n 丼i+%ds>t§ 3errl=stsizeeint j h twhi 一 ecerrl=slempty()=err temp;temp n erristback();erris(popback(

9、);switch(tempmode)(case lprintf(-%dillem>商制皿 ewf2dn?sa>hm朋前 %d%dg_l 3j temp.-inptemp.row) break;case 2printf(-%dillemwb。0隔幾直需朋質(zhì)。%d®%d_k 3二 emp=ne temp, row) break;case wprintf(yd>frdb5-dld。%d®%d5= 3j iemp-ine remp.row); break;j+void ourpuuchar* s ismode)(switch(mode)(case lprintf(

10、y,20s 寂b§#w s); fprimf(fpo、*%,20s 拓昭呵nj y break;case 2- idcount(rprints 沬心 0sox3s); fprimf(fpo、*%20sid3s)八 break;case 3-prints%,20s 磬為己 s); fprhf、衣20s 常3s);break;case 4:printfcn%sntt整行注釋內(nèi)容n s);fprintf(fpor "n%sntt整行注釋內(nèi)容比 s);break;case 5: printfcn%sntt整段注釋內(nèi)容n s);fprintf(fpoz "n%sntt整段注

11、釋內(nèi)容n: s);break;case 6: printf(w%-20s 符號n; s); fprintf(fpor "%-20s 符號n”, s);break;case 7: printfc%-20s 單弓 i號字符n; s); fprintf(fpor "%-20s 單引號字符s);break;case & printf(w%-20s雙引號內(nèi)字符串n: s); fprintf(fpor h%-20s雙弓i號內(nèi)字符串比s);break;if(mode != 4 && mode != 5)total_words+;void jumptoblank()

12、 while(curr != *n' && !feof(fp) && int(curr) != 32)curr = fgetc(fp);row+;char alpha jirst() while(isalnum(curr) != 0 | curr = t) tempfi = curr;i+;curr = fgetc(fp);row+;tempi =char keyword(34(10 = "auto"f 'break: hase: "char", const: "continue: "d

13、efault: "do: "double; welse wenum wextern ”float: for", ”goto: "if, hint *long ”register; “return; "short", "signed", "sizeof: "static "struct*, "switch", mtypedef "printf*, *union"r "unsigned", bvoid"r "v

14、olatile*, "while: 'main”;/保留字 for(intj = 0;j < 34;j +)if(strcmp(keywordjl temp) = 0) 這是f保留字 output(temp, 1); return curr;output(tempz 2);return curr;char digit_first()tempfi = curr;i+;數(shù)字部分if(curr = o)curr = fgetc(fp);row+;switch(curr)十六逬制case *x': case *x*:tempi = curr;i+;curr = fget

15、c(fp);row+;if( (isdigit(curr) != 0 | curr = far | curr = tv | curr =| curr = *b* | curr = 'c11| curr =c | curr = d | curr = d | curr =| curr = t* | curr = t | curr = f | curr =?) = 0)bugreport(2);jumptoblanko;return curr;while(isdigit(curr)!= 0 | curr =| curr = tv | curr = b | curr = 8 | curr =|

16、 curr=rc | curr = d | curr = 'd* | curr =宅 curr = t* | curr = f | curr = f) tempi = curr;i+;curr = fgetc(fp);row+;if(curr = t) tempfi = curr; i+; curr = fgetc(fp); row+;if( (isdigit(curr) != 0 | curr = 'a* | curr = a | curr = 'b' | curr = 8 | curr = *c* | curr = 'c | curr = '

17、cf | curr = *d* | curr = *e* | curr = *e* | curr = f | curr = 7*) = o)bugreport(2);jumptobla nk();return curr;while(isdigit(curr) != 0 | curr = *a* | curr = 'a* | curr =| curr = 'b' | curr = *c'| curr = *c | curr =| curr =| curr = 'e* | curr = 'e* | curr = f | curr = 'f*)

18、tempi = curr;i+;curr = fgetc(fp);row+;if(curr = p | curr " p)tempfi = curr;i+;curr = fgetc(fp);row+;if(curr = *-*)tempfi = curr;i+;curr = fgetc(fp);row+;if(isdigit(curr) = 0)bugreport(2);jumptobla nk(); return curr;while(isdigit(curr) != 0)tempi = curr;i+;curr = fgetc(fp);row+;break;八逬制case 

19、9;o': case t: case 2: case 3: case 4: case s: case & case 7:tempfi = curr; i+;curr = fgetc(fp);row+;while(isdigit(curr)!= 0 && curr != 8 && curr != 9) tempi = curr;i+;curr = fgetc(fp);row+;if(curr = t) tempi = curr; i+; curr = fgetc(fp); row+;if(isdigit(curr) = 0 | curr != 8

20、| curr != 9) bugreport(2); jumptoblanko; return curr;while(isdigit(curr) != 0 && curr != 8 && curr != 9) tempfi = curr;i+;curr = fgetc(fp); row+; break;十逬制數(shù)字elsecurr = fgetc(fp);row+;while(isdigit(curr) != 0)tempfi = curr;i+;curr = fgetc(fp);row+;if(curr = *.')tempi = curr;i+;whi

21、le(isdigit(curr) != o)tempi = curr;i+;curr = fgetc(fp);row+;if(curr = *e' | curr = 'e*)tempfi = curr;i+;curr = fgetc(fp);row+;while(isdigit(curr) != o)tempfi = curr;i+;curr = fgetc(fp);row+;if(curr = t)tempi = curr;i+;while(isdigit(curr) != o)tempi = curr;i+;curr = fgetc(fp);row+;if(curr = *

22、ur | curr =tempi = curr;i+;curr = fgetc(fp); row+;else if(curr = t |curr =卡') tempi = curr;i+;curr = fgetc(fp); row+;if(isalpha(curr) != 0) bugreport(l); tempi =、0: output(temp, 3); jumptoblanko; return curr;tempi =output(tempz 3);return curr;char symbo_first()char curr.next;curr.next = fgetc(fp

23、);row+;負(fù)數(shù)判斷if(curr =&& isdigit(curr.next)!二 0)tempi = curr;i+;curr = curr. next;curr = digit_first(); return curr;引號判定單引號中只含一個(gè)字符,視為一個(gè)記號 if(curr =、”) tempi = curr;i+;curr = curr. next;if(curr =召tempi = curr; i+; curr = fgetc(fp); row+; tempfi = curr; i+; curr = fgetc(fp); row+; if(curr =、”) t

24、empi = curr; temp(i + 1 = ao1; output(temp, 7);curr = fgetc(fp); row+; return curr; else bugreport(2); jumptoblanko; return curr;仮弓i號中視為字符串整體輸岀視為f記號 if(curr =、)tempi = curr;i+;curr = curr.next;while(curr != v* && curr != *nr && !feof(fp) tempi = curr;i+;curr = fgetc(fp);row+;if(curr

25、= v) tempi = curr; tempi + 1 =、0' output(tempz 8);curr = fgetc(fp);row+; return curr;elsebugreport(3); tempi =、0; output(tempz 8); return curr;注釋判定if(curr = 7' && curr.next = 7*)curr = fgetc(fp);row+;curr.next = fgetc(fp);row+;i = 0;while(curr_next != *n* && !feof(fp) tempfi

26、= curr; curr = curr. next; curr.next = fgetc(fp);row+; i+;tempfi = curr;temp(i + 1 =、0'line+;total_word = totalword + row 2; row = 0;output(temp, 4);curr = fgetc(fp);row+;return curr;if(curr = 7* && curr.next = *)curr = fgetc(fp);row+;curr.next = fgetc(fp);row+;i = 0;while( !(curr = '

27、;* && curr.next = 7) && !feof(fp) tempi = curr; curr = curr.next; curr.next = fgetc(fp);row+; if(curr_next =、n') lin e+;total_word = totalword + row - 2; row = 0; i+;iffcurr.next = 7') tempi =、0;elsetempi = curr; temp(i + 1 = ao1;output(temp, 5);curr = fgetc(fp);row+;return c

28、urr;判定符號if( (curr =&& curr_next = '=') | (curr = -* && curr.next = =*) |(curr = * && currnext = *=*) | (curr = 7* && currnext = '=') | (curr =' && curr.next = *=*) | (curr = *&* && curr.next = =") | (curr =,a,&& cur

29、r.next = =*) | (curr = t && curr.next = *=*) | (curr = > && curr.next = =*) | (curr = '<' && currnext = *=*) | (curr =&' && curr.next = '&') | (curr = t && curr.next = t) | (curr = *!' && curr.next = '=*) | (cu

30、rr = *=* && curr_next = '=") | (curr = *+* && curr.next = '+*) | (curr =&& cur匚next = *-*) |(curr =&& currnext = *>')tempo = curr;templ = curr.next;temp2 =output(tempz 6);curr = fgetc(fp);row+;return curr;tempo = curr;templ =output(tempz 6);return

31、curr.next;void analysis()curr = fgetc(fp);row+;while(!feof(fp)if(int(curr) != 32 && curr !=、n && curr!=&& curr != r') /處理數(shù)字開頭 if(isdigit(curr) != 0)curr = digitjirsto;/處理字母開頭else if(isalpha(curr) != 0)curr = alpha_first();/處理符號開頭elsecurr = symbojirsto;i = o;temp0 = o:elserow+;if(curr = 'n*)line+;total_word = totalword + row - 2; row = 0;curr = fgetc(fp);row+;totalword = totalword + row - 2;totalword 一;文件結(jié)束符號main()line = 1;row = 0;totalwords = 0; totalword = 0;idjist = n ew(id_save);id.saveptr idjist

溫馨提示

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

評論

0/150

提交評論