![詞法分析器文檔_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b931.gif)
![詞法分析器文檔_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b932.gif)
![詞法分析器文檔_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b933.gif)
![詞法分析器文檔_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b934.gif)
![詞法分析器文檔_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b935.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、詞法分析程序文檔說明:該詞法分析器實(shí)現(xiàn)對(duì)C語言源代碼進(jìn)行詞法分析的功能,由文件輸入,將輸入的源代碼輸出為token序列,用二元組形式由文件和屏幕輸出,文件輸出首先輸入源文件路徑和文件名稱,將注釋過濾,能夠報(bào)告不合法字符,并且記錄源代碼的行數(shù),單詞數(shù)(包括關(guān)鍵字,標(biāo)識(shí)符和常量)和字符數(shù)(包括字母,數(shù)字,標(biāo)點(diǎn)符號(hào),運(yùn)算符,空格和換行符)。程序設(shè)計(jì):具體見源代碼源代碼:#include #include #include #include using namespace std;#define MAX 32char ch = ;int line=1,zifu=1,word=0;/*line記錄行數(shù)z
2、ifu記錄字符數(shù)(包括字母,數(shù)字,標(biāo)點(diǎn)符號(hào),運(yùn)算符,空格和換行符)word記錄單詞數(shù)(包括關(guān)鍵字,標(biāo)識(shí)符和常量)*/ string key32= auto,break,case,char,const,continue,default,do,double, else,enum,extern,float,for,goto,if,int,long,register, return,short,signed,sizeof,static,struct,switch,typedef, union,unsigned,void,volatile,while ;/c語言中的所有關(guān)鍵字int Iskey(stri
3、ng c) /關(guān)鍵字判斷 int i; for(i=0; iMAX; i+) if(pare(c)=0) /將字符串與關(guān)鍵字一一進(jìn)行比較 return 1; return 0;int IsLetter(char c) /判斷是否為字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判斷是否為數(shù)字 if(c=0&c=9) return 1; else return 0;void analyse(FILE *fpin,FILE *fpout) string arr=;string str=; while(ch=
4、fgetc(fpin)!=EOF) zifu+;/將文件中的字符逐一進(jìn)行掃描,包括字母,數(shù)字,標(biāo)點(diǎn)符號(hào),運(yùn)算符,空格和換行符 arr=; if(IsLetter(ch)/對(duì)開頭是字母或數(shù)字的字符串進(jìn)行判斷 while(IsLetter(ch)|IsDigit(ch)|ch=_)/符合標(biāo)識(shí)符或者關(guān)鍵字標(biāo)準(zhǔn)的字符串進(jìn)行判斷 if(ch=A) ch=ch+32; arr=arr+ch;/將每個(gè)單個(gè)讀取的字符連成字符串 ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR);/不滿足條件的多讀取的字符回退一格 if (Iskey(arr)/判斷字符串是否是關(guān)鍵字 fprint
5、f(fpout,(%s %s)n,arr.c_str(),key); printf(%s %s)n,arr.c_str(),key);word+; else/字符串不是關(guān)鍵字則判定為標(biāo)識(shí)符 fprintf(fpout,(%s %s)n,arr.c_str(),id); printf(%s %s)n,arr.c_str(),id);word+; else if(IsDigit(ch)/開頭為數(shù)字的串即為常量 while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR)
6、; fprintf(fpout,(%s %s)n,arr.c_str(),num); printf(%s %s)n,arr.c_str(),num);word+; else switch(ch)/既不是數(shù)字也不是字母的符號(hào)判定 case+: ch=fgetc(fpin);/判定+,+=,+ if(ch=+) fprintf(fpout,(%s %s)n,+,-); printf(%s %s)n,+,-);zifu+; if(ch=) fprintf(fpout,(%s %s)n,+=,-); printf(%s %s)n,+=,-);zifu+; else fprintf(fpout,(%s
7、%s)n,+,-); printf(%s %s)n,+,-); fseek(fpin,-1L,SEEK_CUR); break; case- : ch=fgetc(fpin); if(ch=-)/判定-,-=,- fprintf(fpout,(%s %s)n,-,-); printf(%s %s)n,-,-);zifu+; if(ch=) fprintf(fpout,(%s %s)n,-=,-); printf(%s %s)n,-=,-);zifu+; else fprintf(fpout,(%s %s)n,-,-); printf(%s %s)n,-,-); fseek(fpin,-1L,S
8、EEK_CUR); break; case* : fprintf(fpout,(%s %s)n,*,-); printf(%s %s)n,*,-); break; case= : ch=fgetc(fpin);/判定=,= if(ch=) fprintf(fpout,(%s %s)n,=,-); printf(%s %s)n,=,-);zifu+; else fprintf(fpout,(%s %s)n,=,EQ); printf(%s %s)n,=,EQ); fseek(fpin,-1L,SEEK_CUR); break; case/ : ch=fgetc(fpin);/判定是注釋還是運(yùn)算符
9、/ if(ch=*)/形如/* */的注釋,將注釋過濾 zifu-; ch=fgetc(fpin); while(ch!=*)&(ch=fgetc(fpin)=/) ; else if(ch=/)/形如/的注釋,將注釋過濾 zifu-; ch=fgetc(fpin); while(ch!=n) ch=fgetc(fpin);line+; else fprintf(fpout,(%s %s)n,/,-); printf(%s %s)n,/,-); fseek(fpin,-1L,SEEK_CUR); break; case %: fprintf(fpout,(%s %s)n,%,-); print
10、f(%s %s)n,%,-); break; case #: fprintf(fpout,(%s %s)n,#,-); printf(%s %s)n,#,-); break; case !: ch=fgetc(fpin);/判定!=還是! if(ch=) fprintf(fpout,(%s %s)n,!=,-); printf(%s %s)n,!=,-);zifu+; else fprintf(fpout,(%s %s)n,!,-); printf(%s %s)n,!,-); fseek(fpin,-1L,SEEK_CUR); break; case |: ch=fgetc(fpin); if
11、(ch=|)/判定|還是| fprintf(fpout,(%s %s)n,|,-); printf(%s %s)n,|,-);zifu+; else fprintf(fpout,(%s %s)n,|,-); printf(%s %s)n,|,-); fseek(fpin,-1L,SEEK_CUR); break; case &: ch=fgetc(fpin); if(ch=&)/判定&還是& fprintf(fpout,(%s %s)n,&,-); printf(%s %s)n,&,-);zifu+; else fprintf(fpout,(%s %s)n,&,-); printf(%s %s
12、)n,&,-); fseek(fpin,-1L,SEEK_CUR); break; case( : fprintf(fpout,(%s %s)n,(,-); printf(%s %s)n,(,-); break; case) : fprintf(fpout,(%s %s)n,),-); printf(%s %s)n,),-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case; :
13、fprintf(fpout,(%s %s)n,;,-); printf(%s %s)n,;,-); break; case. : fprintf(fpout,(%s %s)n,.,-); printf(%s %s)n,.,-); break; case, : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); brea
14、k; case :fprintf(fpout,(%s %s)n,引號(hào),-); printf(%s %s)n,引號(hào),-); break; case ?: fprintf(fpout,(%s %s)n,?,-); printf(%s %s)n,?,-); break; case: : fprintf(fpout,(%s %s)n,:,-); printf(%s %s)n,:,-); break; case : ch=fgetc(fpin); if(ch=)/判定=還是 fprintf(fpout,(%s %s)n,=,GE); printf(%s %s)n,=,GE);zifu+; else fp
15、rintf(fpout,(%s %s)n,GT); printf(%s %s)n,GT); fseek(fpin,-1L,SEEK_CUR); break; case : ch=fgetc(fpin);/判定=還是還是 if(ch=) fprintf(fpout,(%s %s)n,=,LE); printf(%s %s)n,) fprintf(fpout,(%s %s)n,NE); printf(%s %s)n,NE); zifu+; else fprintf(fpout,(%s %s)n,LT); printf(%s %s)n,LT); fseek(fpin,-1L,SEEK_CUR); break; case : break; case n: line+;/每讀到n,記錄行數(shù) break; default : fprintf(fpout,(%c %s)n,ch,不合法); printf(%c %s)n,ch,不合法); break; int main() char in_fn30; FILE * fpin,*fpout; fpout = fopen(playov
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年五年級(jí)數(shù)學(xué)下冊(cè) 五 分?jǐn)?shù)除法練習(xí)五說課稿 北師大版001
- Unit 3 Amazingt animals Part A Letters and sounds(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)
- Unit 3 Weather B learn(說課稿)-2023-2024學(xué)年人教PEP版英語四年級(jí)下冊(cè)
- 2023八年級(jí)數(shù)學(xué)上冊(cè) 第15章 數(shù)據(jù)的收集與表示15.1數(shù)據(jù)的收集 1數(shù)據(jù)有用嗎說課稿 (新版)華東師大版
- 2023八年級(jí)道德與法治上冊(cè) 第二單元 遵守社會(huì)規(guī)則 第三課 社會(huì)生活離不開規(guī)則第2課時(shí) 遵守規(guī)則說課稿 新人教版
- 2024八年級(jí)英語下冊(cè) Unit 1 Spring Is ComingLesson 4 The Spring City說課稿(新版)冀教版
- 17 要是你在野外迷了路(說課稿)-2023-2024學(xué)年統(tǒng)編版語文二年級(jí)下冊(cè)
- 2025回遷房買賣合同模板
- 2025勞動(dòng)合同書的范本
- Unit 8 What's his job單元整體(說課稿)-2024-2025學(xué)年接力版(2024)英語三年級(jí)上冊(cè)
- 大樹扶正施工方案
- 《造血干細(xì)胞移植護(hù)理》課件
- 課題申報(bào)參考:全齡友好視角下的社區(qū)語言景觀評(píng)估及空間優(yōu)化研究
- 中央2025年公安部部分直屬事業(yè)單位招聘84人筆試歷年參考題庫附帶答案詳解
- 五年級(jí)下冊(cè)語文四大名著??贾R(shí)點(diǎn)
- 光伏發(fā)電項(xiàng)目施工組織設(shè)計(jì)方案及技術(shù)措施
- 2025年1月日歷表(含農(nóng)歷-周數(shù)-方便記事備忘)
- 2024年同等學(xué)力人員申請(qǐng)碩士學(xué)位英語試卷與參考答案
- 臨床用血管理培訓(xùn)
- 介入手術(shù)室護(hù)理風(fēng)險(xiǎn)
- 2024年江蘇省公務(wù)員錄用考試《行測(cè)》題(A類)
評(píng)論
0/150
提交評(píng)論