版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編譯原理程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告詞法分析掃描器的設(shè)計(jì)實(shí)現(xiàn)班級(jí):計(jì)算機(jī)1306班 姓名:張濤學(xué)號(hào):20133967實(shí)驗(yàn)?zāi)繕?biāo):設(shè)計(jì)一個(gè)詞法分析掃描程序,實(shí)現(xiàn)對(duì)所輸入源程 序的單詞切分和類碼翻譯功能,完成編譯程序的初步工作。實(shí)驗(yàn)內(nèi)容:概要設(shè)計(jì):程序總體要實(shí)現(xiàn)切分單詞和類碼翻譯兩部分功 能。兩部分可以同時(shí)進(jìn)行。在詞法分析階段,源程序可視為 單詞級(jí)語(yǔ)言,所對(duì)應(yīng)的文法為正則文法,故程序的實(shí)現(xiàn)可借 助有限狀態(tài)自動(dòng)機(jī)從左至右逐一掃描字符串,能夠完成從自 動(dòng)機(jī)初態(tài)掃描至終態(tài)即視為正確單詞。單詞級(jí)語(yǔ)言有關(guān)鍵 字、標(biāo)識(shí)符、數(shù)字和界符四種形式。 掃描至終態(tài)為單詞的即查關(guān)鍵字表,若為關(guān)鍵字則輸出其 對(duì)應(yīng)的類碼;否則; 查標(biāo)識(shí)符
2、表,如該單詞已存在,則輸出其標(biāo)識(shí)符類碼,否 則填入標(biāo)識(shí)符表,并輸出類碼; 掃描到終態(tài)為界符的,輸出對(duì)應(yīng)類碼; 掃描到終態(tài)為數(shù)字的,輸出數(shù)字類碼。數(shù)據(jù)結(jié)構(gòu):關(guān)鍵字表:用二維字符數(shù)組表示:char keywords610;界符表:用字符數(shù)組表示:char bound13;當(dāng)前掃描字符:字符類型變量:ch;當(dāng)前掃描單詞:字符數(shù)組表示:nowword10;注:因本實(shí)驗(yàn)詞法分析階段尚無(wú)需建立完整的符號(hào)表系統(tǒng), 故無(wú)界符表和常數(shù)表。流程圖:本程序采用精簡(jiǎn)狀態(tài)法開(kāi)始輸入源文件將文件內(nèi)容賦給字符數(shù)組結(jié)束YES否是取后字符NOstate=0NO讀入第一個(gè)字符;state=0 ;NOYES是否是界符YESYESE
3、RR=1OK=0NOTOK二true ; state=4 ;ERR=false;OK=true;state=4state=3YESYES是否是英文字母NO是否是數(shù)字NO 輸出數(shù)字及其類碼輸岀:無(wú)法識(shí)別輸岀:標(biāo)識(shí)符state=4state=0讀入下一字符否是數(shù)字YESOK=1ESOK=falseOK=false是否是英文字母OK=1岀:關(guān)鍵字ERR=false輸出界符及其對(duì)應(yīng)類碼關(guān)鍵函數(shù):int lsLetter(char ch)/判斷 ch 是否為字母int lsDigit(char ch) /判斷 ch 是否為數(shù)字int lskey(char *string)/判斷是否為關(guān)鍵字int lsb
4、ound(char ch) /判斷是否為界符int lsboundnum(char ch)/給出界符所在token 值源程序代碼:#in clude<iostream>#in clude<stri ng.h>#in clude<ctype.h>#in clude<wi ndows.h>#in clude<stdlib.h>#in clude<fstream>>using n amespace std;char ch;/當(dāng)前字符char no wword10=""/ 當(dāng)前單詞char keyword
5、s610="i nt","mai n","void","if","char"/ 關(guān)鍵字char bou nd13='=','<',',','(',')','','','',',',T,T,'"','”;/ 界符int IsLetter(char ch)/判斷 ch 是否為字母for(i nt i=0;i<=4
6、5;i+)if (ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')return 1;return 0;int IsDigit(char ch) /判斷 ch 是否為數(shù)字 for(i nt i=0;i<=10;i+)if (ch>='0'&&ch<='9')return 1;return 0;int lskey(char *stri ng)判斷是否為關(guān)鍵字for(i nt i=0;i<
7、;6;i+)if(!strcmp(keywordsi,stri ng) return 1;return 0;int Isbou nd(char ch)/判斷是否為界符for(i nt i=0;i<13;i+)if(ch=bo un di)return 1;return 0;int Isboundnum(char ch)給出界符所在 token 值for(i nt i=0;i<13;i+)if(ch=bo un di) return i+10;return 0; int mai n()FILE *fp;int q=0;char sour200=""cout<
8、<"請(qǐng)將源文件置于以下位置并按以下方式命名:F:1.txtn"if(fp=fope n( "F:1.txt","r")=NULL)/ 打開(kāi)文件cout<<"文件未找到! n"elsewhile(!feof(fp)if(isspace(ch=fgetc(fp);elsesourq=ch;q+;int state=O, no wle n=0;/定義狀態(tài),當(dāng)前單詞長(zhǎng)度sourq=''q+;bool OK=true,ERR=false;for(i nt i=0;i<q;i+)開(kāi)始掃描
9、switch(state)case 0:ch=souri;if(lsbou nd(ch)if(ERR)cout<<"無(wú)法識(shí)別n"ERR=false;OK=true;else if(!OK)printf("<2,%s> 標(biāo)識(shí)符 n",nowword);OK=true;state=4;else if(lsDigit(ch)if(OK)memset( no wword,0,strle n(no wword);no wle n=0;no wword no wle n=ch;no wle n+;state=3;OK=false;break;
10、else no wword no wle n=ch;no wle n+;else if(lsLetter(ch)if(OK)memset( no wword,0,strle n(no wword);no wle n=0;no wword no wle n=ch;no wle n+;OK=false;elseno wword no wle n=ch;no wle n+;if(Iskey( no wword)printf("<1,%s> 關(guān)鍵字 n”,nowword); OK=true;break;case 3:if(IsLetter(ch)printf("錯(cuò)誤 n
11、");no wword no wle n=ch;no wle n+;ERR=false;state=0;break;if(lsDigit(ch=souri)no wword no wle n=ch;no wle n+;elseprintf("<3,%s> 數(shù)字 n”,nowword);I-; state=O; OK=true;break;case 4:I-;printf("<%d,%c> 界符n",lsboundnum(ch),ch); state=0;break;return 0;程序運(yùn)行結(jié)果:(截屏)輸入:int mai n (void )int al = 1,d = 2,c ;if (a <=d )c = a ;a = d ;d = c ;char ch 10 = " OK "char x ,y = 'a'c = a +d ;注:如需運(yùn)行請(qǐng)將源文件放置 F盤,并命名為
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水產(chǎn)養(yǎng)殖行業(yè)助理工作總結(jié)
- 美容行業(yè)人力資源管理經(jīng)驗(yàn)總結(jié)
- 樓梯扶手銷售工作總結(jié)
- 潛水行業(yè)潛水技巧培訓(xùn)回顧
- 糧食行業(yè)話務(wù)員工作總結(jié)
- 2024年河南省商丘市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年四川省涼山自治州公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2022年山東省煙臺(tái)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 農(nóng)村先進(jìn)個(gè)人發(fā)言稿
- PEP小學(xué)生讀書(shū)心得體會(huì)作文選
- 2024版Amazon店鋪代運(yùn)營(yíng)與品牌授權(quán)及維權(quán)服務(wù)合同3篇
- 環(huán)境因素控制措施
- 采購(gòu)合同范例壁布
- 2024年下學(xué)期學(xué)校德育工作總結(jié)
- 公司員工出差車輛免責(zé)協(xié)議書(shū)
- 2024年陜西榆林市神木市公共服務(wù)輔助人員招聘775人歷年管理單位遴選500模擬題附帶答案詳解
- 安全生產(chǎn)事故案例分析
- 《電化學(xué)儲(chǔ)能系統(tǒng)艙大件運(yùn)輸特殊要求》
- 2025年采購(gòu)部工作計(jì)劃
- 期末檢測(cè)卷(一)(試卷)-2024-2025學(xué)年外研版(三起)英語(yǔ)六年級(jí)上冊(cè)(含答案含聽(tīng)力原文無(wú)音頻)
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識(shí)宣傳課件
評(píng)論
0/150
提交評(píng)論