編譯原理詞法分析器的構(gòu)造_第1頁(yè)
編譯原理詞法分析器的構(gòu)造_第2頁(yè)
編譯原理詞法分析器的構(gòu)造_第3頁(yè)
編譯原理詞法分析器的構(gòu)造_第4頁(yè)
編譯原理詞法分析器的構(gòu)造_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí) 驗(yàn) 報(bào) 告(2014 / 2015 學(xué)年 第 一 學(xué)期)課程名稱(chēng)編譯原理實(shí)驗(yàn)名稱(chēng)詞法分析器的構(gòu)造實(shí)驗(yàn)時(shí)間2015年4月10日指導(dǎo)單位南京郵電大學(xué)指導(dǎo)教師蔣凌云學(xué)生姓名孫雪祿班級(jí)學(xué)號(hào)B12041213學(xué)院(系)計(jì)算機(jī)學(xué)院、軟件學(xué)院專(zhuān) 業(yè)軟件工程(服務(wù)外包)實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)名稱(chēng)詞法分析器的構(gòu)造指導(dǎo)教師蔣凌云實(shí)驗(yàn)類(lèi)型上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí)4實(shí)驗(yàn)時(shí)間2015.4.10一、 實(shí)驗(yàn)?zāi)康暮鸵?設(shè)計(jì)、編制、調(diào)試一個(gè)詞法分析程序,對(duì)單詞進(jìn)行識(shí)別和編碼,加深對(duì)詞法分析原理的理解。二、實(shí)驗(yàn)環(huán)境(實(shí)驗(yàn)設(shè)備) Microsoft Visual Stdio 2010二、 實(shí)驗(yàn)原理及內(nèi)容 1、實(shí)驗(yàn)內(nèi)容:設(shè)計(jì)并實(shí)現(xiàn)一個(gè)詞法

2、分析器,實(shí)現(xiàn)對(duì)指定位置的類(lèi)C語(yǔ)言源程序文本文件的讀取,并能夠?qū)υ撛闯绦蛑械乃袉卧~進(jìn)行分類(lèi),指出其所屬類(lèi)型,實(shí)現(xiàn)簡(jiǎn)單的詞法分析操作。例如下面為一段C語(yǔ)言源程序:main() int  a,b; a = 10;  b = a + 20;要求輸出如下(可以自行分類(lèi),分類(lèi)原則請(qǐng)?jiān)趫?bào)告中說(shuō)明)(1,main)(5,()(5,)(5, )(1,int)(2,a)(5,,)(2,b)(5,;)(2,a)(4,=)(3,10)(5,;)(2,b)(4,=)(2,a)(4,+)(3,20)(5,;)(5,) 2、實(shí)驗(yàn)要求:(1)、允許用戶(hù)自己輸入源程序并保存為文件(2)、系統(tǒng)能夠輸出經(jīng)過(guò)預(yù)

3、處理后的源程序(去掉注釋、換行、空格等)(3)、能夠?qū)⒃撛闯绦蛑兴械膯卧~根據(jù)其所屬類(lèi)型(整數(shù)、保留字、運(yùn)算符、標(biāo)識(shí)符等。定義的類(lèi)C語(yǔ)言中的標(biāo)識(shí)符只能以字母或下劃線(xiàn)開(kāi)頭)進(jìn)行歸類(lèi)顯示,例如:識(shí)別保留字:if、int、for、while、do、return、break、continue等,其他的都識(shí)別為標(biāo)識(shí)符;常數(shù)為無(wú)符號(hào)整形數(shù);運(yùn)算符包括:+、-、*、/、=、>、<、>=、<=、!=等;分隔符包括:,、;、(、)等。(4)、實(shí)現(xiàn)文件的讀取操作,而不是將文本以字符串形式預(yù)存于程序中。文本內(nèi)容為待分析的類(lèi)C語(yǔ)言程序。3、實(shí)驗(yàn)過(guò)程描述(1)首先講和書(shū)上一樣分成5類(lèi)分類(lèi)號(hào)分類(lèi)內(nèi)

4、容1保留字2標(biāo)識(shí)符3整數(shù)4運(yùn)算符(+,-,*,/,>,<,=等)5分隔符(,,;,(,))(2)、接著寫(xiě)出用到的簡(jiǎn)單文法并轉(zhuǎn)換成狀態(tài)轉(zhuǎn)換圖<標(biāo)識(shí)符>:=字母|字母<標(biāo)識(shí)符>|<標(biāo)識(shí)符>數(shù)字031字母非數(shù)字或字母字母或數(shù)字?jǐn)?shù)字?jǐn)?shù)字非數(shù)字+-*/=><, ; ( ) <整數(shù)>:=數(shù)字|數(shù)字<整數(shù)><運(yùn)算符>:=+|-|*|<|>|=<分隔符>:=,|;|(|)|保留字是一種特殊的標(biāo)識(shí)符,不獨(dú)立寫(xiě)出其文法031字母非數(shù)字或字母字母或數(shù)字?jǐn)?shù)字?jǐn)?shù)字非數(shù)字+-*/=><, ;

5、 ( ) 狀態(tài)轉(zhuǎn)換圖如下:(3) 按照書(shū)上的步驟寫(xiě)程序 因?yàn)槌绦蛞髮⒂脩?hù)的輸入保存到文件中所以這里要用到文件存貯操作,fopen(FILE *文件名,打開(kāi)方式)。一共有三個(gè)函數(shù)分別是bool LETTER(char A) /判斷字符是否是字母 if(A>='a'&&A<='z')return true;else if(A>='A'&&A<='Z')return true;else return false;bool DIGIT (char A) /判斷字符是否是數(shù)字if(A

6、>='0'&&A<='9')return true;elsereturn false;bool REAERVE(char *a) /判斷標(biāo)識(shí)符是否為保留字if(strcmp(a,"if")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"int")=0)cout<<"(1,'"<<

7、a<<"')"<<endl;return true;if(strcmp(a,"for")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"while")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;

8、if(strcmp(a,"do")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"return")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"break")=0)cout<<"(

9、1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"continue")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"main")=0)cout<<"(1,'"<<a<<"')"

10、<<endl;return true;return false;下面附上全部的代碼:#include <string.h>#include <iostream>#include <fstream> using namespace std;bool LETTER(char A) if(A>='a'&&A<='z')return true;else if(A>='A'&&A<='Z')return true;else return

11、false;bool DIGIT (char A)if(A>='0'&&A<='9')return true;elsereturn false;bool REAERVE(char *a)if(strcmp(a,"if")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"int")=0)cout<<"(1,

12、9;"<<a<<"')"<<endl;return true;if(strcmp(a,"for")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"while")=0)cout<<"(1,'"<<a<<"')"<<e

13、ndl;return true;if(strcmp(a,"do")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"return")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"break")=0)cou

14、t<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"continue")=0)cout<<"(1,'"<<a<<"')"<<endl;return true;if(strcmp(a,"main")=0)cout<<"(1,'"<<a<<&q

15、uot;')"<<endl;return true;return false;bool zimu(char A)if(A>='A'&&A<='Z')|A>='a'&&A<='z')return true;return false;int main()char a;FILE *f;char CHAR;char TOKEN120;f=fopen("code.txt","w");if(f=NULL)cout<

16、;<"con't create file"<<endl;exit(0);cout<<"please input you code"<<endl;while(a=getchar()!='?')fputc(a,f);fclose(f);cout<<"over"<<endl;f=fopen("code.txt","r");while(CHAR=fgetc(f)!=EOF)while(CHAR!=' 

17、9;)if(zimu(CHAR)/標(biāo)括?識(shí)?符?int k=0;doTOKENk=CHAR;k+;while(CHAR=fgetc(f)!=EOF&&CHAR!=' '&&zimu(CHAR);if(DIGIT(CHAR)/處鋦理?是?否?為a包悒?含?數(shù)簓字?的?標(biāo)括?識(shí)?符?doTOKENk=CHAR;k+;while(CHAR=fgetc(f)!=EOF&&CHAR!=' '&&DIGIT(CHAR);TOKENk='0'if(!(REAERVE(TOKEN)/判D斷?所

18、49;得?標(biāo)括?識(shí)?符?是?否?為a保饋?留?字?cout<<"(2,'"<<TOKEN<<"')"<<endl;if(DIGIT(CHAR) /整?數(shù)簓int i=0;doTOKENi=CHAR;i+;while(CHAR=fgetc(f)!=EOF&&CHAR!=' '&&DIGIT(CHAR);TOKENi='0'if(!REAERVE(TOKEN)cout<<"(3,'"<<TOKEN<<"')"<<endl;if(CHAR='+'|CHAR='-'|CHAR='*'|CHAR='/'|CHAR='>'|CHAR='<'|CHAR='=') /運(yùn)?算?符?cout<<"(4,'"<<CHAR<<")"<<endl;if(CHAR=','|CHAR=''|C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論