詞法的實(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è),還剩6頁(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、詞法分析實(shí)驗(yàn)報(bào)告目錄 TOC o 1-5 h z HYPERLINK l bookmark0 o Current Document 目錄1 HYPERLINK l bookmark2 o Current Document 1實(shí)驗(yàn)?zāi)康? HYPERLINK l bookmark4 o Current Document 2實(shí)驗(yàn)內(nèi)容2TINY計(jì)算機(jī)語(yǔ)言描述2實(shí)驗(yàn)要求2 HYPERLINK l bookmark8 o Current Document 3此法分析器的程序?qū)崿F(xiàn)3狀態(tài)轉(zhuǎn)換圖3程序源碼-4實(shí)驗(yàn)運(yùn)行效果截圖9 HYPERLINK l bookmark12 o Current Document

2、4實(shí)驗(yàn)體會(huì)101實(shí)驗(yàn)?zāi)康?、學(xué)會(huì)針對(duì)DFA轉(zhuǎn)換圖實(shí)現(xiàn)相應(yīng)的高級(jí)語(yǔ)言源程序。2、深刻領(lǐng)會(huì)狀態(tài)轉(zhuǎn)換圖的含義,逐步理解有限自動(dòng)機(jī)。3、掌握手工生成詞法分析器的方法,了解詞法分析器的內(nèi)部工作原理2實(shí)驗(yàn)內(nèi)容2.1TINY計(jì)算機(jī)語(yǔ)言描述TINY計(jì)算機(jī)語(yǔ)言的編譯程序的詞法分析部分實(shí)現(xiàn)。從左到右掃描每行該語(yǔ)言源程序的符號(hào),拼成單詞,換成統(tǒng)一的內(nèi)部表示(token)送給語(yǔ)法分析程序。為了簡(jiǎn)化程序的編寫(xiě),有具體的要求如下:1、數(shù)僅僅是整數(shù)。2、空白符僅僅是空格、回車(chē)符、制表符。3、代碼是自由格式。4、注釋?xiě)?yīng)放在花括號(hào)之內(nèi),并且不允許嵌套TINY語(yǔ)言的單詞保留字特殊符號(hào)其他if+標(biāo)識(shí)符(一個(gè)或更多的字母)then-

3、else*end/repeat=數(shù)(一個(gè)或更多的數(shù)字)untilreadwrite;2.2實(shí)驗(yàn)要求要求實(shí)現(xiàn)編譯器的以下功能1、按規(guī)則拼單詞,并轉(zhuǎn)換成二元式形式2、刪除注釋行3、刪除空白符(空格、回車(chē)符、制表符)4、列表打印源程序,按照源程序的行打印,在每行的前面加上行號(hào),并且打印出每行包含的記號(hào)的二元形式5、發(fā)現(xiàn)并定位錯(cuò)誤詞法分析進(jìn)行具體的要求1、記號(hào)的二元式形式中種類(lèi)采用枚舉方法定義;其中保留字和特殊字符是每個(gè)都一個(gè)種類(lèi),標(biāo)示符自己是一類(lèi),數(shù)字是一類(lèi);單詞的屬性就是表示的字符串值。2、詞法分析的具體功能實(shí)現(xiàn)是一個(gè)函數(shù)GetTokenQ每次調(diào)用都對(duì)剩余的字符串分析得到一個(gè)單詞或記號(hào)識(shí)別其種類(lèi),

4、收集該記號(hào)的符號(hào)用屬性,當(dāng)識(shí)別一個(gè)單詞完畢,采用返回值的形式返回符號(hào)的種類(lèi),同時(shí)采用程序變量的形式提供當(dāng)前識(shí)別出記號(hào)的屬性值。這樣配合語(yǔ)法分析程序的分析需要的記號(hào)及其屬性,生成一個(gè)語(yǔ)法樹(shù)。3、標(biāo)示符和保留字的詞法構(gòu)成相同,為了更好的實(shí)現(xiàn),把語(yǔ)言的保留字建立一個(gè)表格存儲(chǔ),這樣可以把保留字的識(shí)別放在標(biāo)示符之后,用識(shí)別出的標(biāo)示符對(duì)比該表格,如果存在該表格中則是保留字,否則是一般標(biāo)示符。3此法分析器的程序?qū)崿F(xiàn)圖1TINY語(yǔ)言的確定有限自動(dòng)機(jī)(DFA3.2程序源碼#includeusingnamespacestd;#include#include#includeclassCApublic:voidget

5、Token();識(shí)另1J標(biāo)識(shí)符voidpreDo(char);/預(yù)處理源程序voiddisplay。;打印出CA()private:long count2;char ID1010;int m;char Cons1010;int n;m=n=0;/符號(hào)表設(shè)m為符號(hào)表中已有的標(biāo)識(shí)符的個(gè)數(shù)/常數(shù)表設(shè)n為常數(shù)表中已有的常數(shù)的個(gè)數(shù)charbuffeU99999;boolisDigit(char);/檢查是否為數(shù)字boolisLetter(char);/檢查是否為字符intInsertID(char*strToken);/添力口符號(hào)intInsertConst(char*strToken);/添力口符號(hào)i

6、ntSearch(chara10,constchar*,int);/二分查找;/enumvariety標(biāo)識(shí)符,數(shù)字,關(guān)鍵字1,關(guān)鍵字2,關(guān)鍵字3,關(guān)鍵字4,關(guān)鍵字5,關(guān)鍵字6,關(guān)鍵字7,關(guān)鍵字8,特殊符號(hào)1,/特殊符號(hào)2,特殊符號(hào)3,特殊符號(hào)4,特殊符號(hào)5,特殊符號(hào)6,特殊符號(hào)7,特殊符號(hào)8,特殊符號(hào)9,特殊符號(hào)10;/關(guān)鍵字bi編碼12345678charK1810=else,end,if,read,repeat,then,until,write,boolCA:isDigit(charc)if(c=0)returntrue;elsereturnfalse;boolCA二isLetter(ch

7、arc)if(c=a&c=A&c=Z)returntrue;elsereturnfalse;intCA:Search(chara1810,constchar*b,intn)intleft=0;intright=n-1;intmid=0;while(left=right)mid=(left+right)/2;if(strcmp(amid,b)=0)returnmid;elseif(strcmp(amid,b)0)left=mid+1;elseright=mid-1;return-1;intCA:InsertID(char*strToken)inti=0;while(im)設(shè)m為符號(hào)表中已有的標(biāo)識(shí)

8、符的個(gè)數(shù)if(!strcmp(IDi,strToken)returni;i+;strcpy(IDi,strToken);m+;returni;intCA:InsertConst(char*strToken)inti=0;while(in)設(shè)n為常數(shù)表中已有的常數(shù)的個(gè)數(shù)if(!strcmp(Consi,strToken)returni;i+;strcpy(Consi,strToken);n+;returni;voidCA:display()charfilename30;輸入的時(shí)候一定要是:/格式cout請(qǐng)輸入源程序代碼.cpp文件的絕對(duì)路徑:filename;ifstreaminfile(fil

9、ename,ios:in);if(!infile)cerropenerror!endl;abort();charch;intcount1=1;count2=0;cout第count1行;while(infile.get(ch)preDo(ch);coutch;逐行打印出源程序if(ch=n)count1+;cout第count1行;buffer1count2+1=0;coutendl;對(duì)buffeU中的字符進(jìn)行掃描getToken();infile.close();coutendl;cout符號(hào)表:;for(inti=0;im;i+)coutIDi;coutendl;cout數(shù)字表:;for(

10、intj=0;jn;j+)coutConsj;coutendl;voidCA二preDo(charc)char*p=buffer1;buffer10=#;/賦#給掃描緩沖區(qū)的第一個(gè)元素count2+;*(p+count2)=c;if(buffer1count2-1=)/刪除注釋if(c=)cout注釋不允許嵌套!;/注釋不允許嵌套if(c!=)count2-;elsecount2=count2-2;elseif(buffer1count2-1=&c=)count2-;若干相繼的空白符結(jié)合成一個(gè)if(c=r)count2-;if(c=t)count2-;voidCA二getToken()intn

11、=1;cout第1行:;for(inti=1;istrlen(buffer1);i+)if(buffer1i=n)n+;coutn第n行:;elseif(isLetter(buffer1i)stringtok=;tok+=buffer1i;while(isLetter(buffer1+i)tok+=buffer1i;intr=Search(K,tok.c_str(),8);i-;if(r!=-1)cout(關(guān)鍵字r+1,tok);/關(guān)鍵字編碼elsecout(標(biāo)識(shí)符,tok);/標(biāo)識(shí)符編碼r=InsertID(char*)tok.c_str();elseif(isDigit(buffer1i)

12、stringtok=;tok+=buffer1i;while(isDigit(buffer1+i)tok+=buffer1i;inty=InsertConst(char*)tok.c_str();cout(數(shù)字,tok);i-;/數(shù)字編碼elseif(buffer1i=)elsestringtok=;tok+=buffer1i;intq=Search(K,tok.c_str(),18);if(q!=-1)cout(特殊符號(hào),tok);elsecout非法符號(hào)!;/*main int main()CA ca;ca.display();couth;1 urite a;,write b;end ;鬻海 澧宣里:烹 鼐符Q 特殊符號(hào)L標(biāo)識(shí)符a(特殊符號(hào),一數(shù)字,1 褊?。患?字1 I咂膻.番甯:篇彘a(特殊符號(hào)標(biāo)識(shí)符特殊符號(hào)標(biāo)識(shí)符4碉殊符號(hào).;第9行: 天裨字7.unm第1斤:(關(guān)鍵字4-(D (第1組缶標(biāo)識(shí)符Q特殊符號(hào),春行;關(guān)鍵丈8婚心 電識(shí):第13札笑舞學(xué)Qnd特赫符號(hào)Q第遙74實(shí)驗(yàn)體會(huì)本次實(shí)驗(yàn)是編譯技術(shù)的第一次實(shí)驗(yàn),按理說(shuō)也應(yīng)該是最簡(jiǎn)單的一次實(shí)驗(yàn)驗(yàn),但是在具體的實(shí)現(xiàn)過(guò)程中還是遇到了這樣或那樣的問(wèn)題,比如對(duì)原輸入用進(jìn)

溫馨提示

  • 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)論