




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)編譯原理實(shí)驗(yàn) 班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)113班 姓名: 學(xué)號(hào):南昌大學(xué)信息工程學(xué)院計(jì)算機(jī)系實(shí)驗(yàn)1 詞法分析程序的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康恼莆沼?jì)算機(jī)語(yǔ)言的詞法分析程序的開發(fā)方法。 二、實(shí)驗(yàn)內(nèi)容編制一個(gè)能夠分析三種整數(shù)、標(biāo)識(shí)符、主要運(yùn)算符和主要關(guān)鍵字的詞法分析程序。三、實(shí)驗(yàn)要求1、根據(jù)以下的正規(guī)式,編制正規(guī)文法,畫出狀態(tài)圖;標(biāo)識(shí)符<字母>(<字母>|<數(shù)字字符>)*十進(jìn)制整數(shù)0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*如有余力,則進(jìn)一步分析八進(jìn)制和十六進(jìn)制整數(shù),其正規(guī)式如下:八進(jìn)制整數(shù) 0(1|2|3|4|5|6
2、|7)(0|1|2|3|4|5|6|7)*十六進(jìn)制整數(shù)0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*運(yùn)算符和界符+ - * / > < = <= >= ( ) ; 關(guān)鍵字main if then else while do int (可根據(jù)需要添加)2、根據(jù)狀態(tài)圖,設(shè)計(jì)詞法分析函數(shù)int scan( ),完成以下功能:1) 從文本文件中讀入測(cè)試源代碼,根據(jù)狀態(tài)轉(zhuǎn)換圖,分析出一個(gè)單詞,2) 以二元式形式輸出單詞<單詞種類,單詞屬性>其中單詞種類用整數(shù)表示:0:標(biāo)識(shí)符1:
3、十進(jìn)制整數(shù)2:八進(jìn)制整數(shù)3:十六進(jìn)制整數(shù)運(yùn)算符和界符,關(guān)鍵字采用一字一符,不編碼其中單詞屬性表示如下:標(biāo)識(shí)符,整數(shù)由于采用一類一符,屬性用單詞表示運(yùn)算符和界符,關(guān)鍵字采用一字一符,屬性為空3、編寫測(cè)試程序,反復(fù)調(diào)用函數(shù)scan( ),輸出單詞種別和屬性。 四、實(shí)驗(yàn)環(huán)境PC微機(jī)DOS操作系統(tǒng)或 Windows 操作系統(tǒng)Turbo C 程序集成環(huán)境或 Visual C+ 程序集成環(huán)境 五、實(shí)驗(yàn)步驟1、 根據(jù)正規(guī)式,畫出狀態(tài)轉(zhuǎn)換圖;2、 根據(jù)狀態(tài)圖,設(shè)計(jì)詞法分析算法;3、 采用C或C+語(yǔ)言,設(shè)計(jì)函數(shù)scan( ),實(shí)現(xiàn)該算法;4、 編制測(cè)試程序(主函數(shù)main);5、調(diào)試程序:讀
4、入文本文件program.txt,運(yùn)行程序得到輸出結(jié)果result.txt,并檢查輸出結(jié)果是否正確。 六、測(cè)試數(shù)據(jù) 輸入數(shù)據(jù):編輯一個(gè)文本文件program.txt,在文件中輸入一段程序代碼,如:if data+92>0x3f thendata=data+01;elsedata=data-01; 將輸出結(jié)果存放在result.txt文件中,輸出格式如下:<if , -><0 , data><+ , -><1 , 92><> , -><3 , 3f><then , -><0 , dat
5、a><= , -><0 , data><+ , -><2 , 1>< ,-><else , -><0 , data><= , -><0 , data><- , -><2 , ->< , ->七、實(shí)驗(yàn)報(bào)告要求實(shí)驗(yàn)報(bào)告應(yīng)包括以下幾個(gè)部分:1、詞法的正規(guī)式描述;2、變換后的狀態(tài)圖;3、詞法分析程序的數(shù)據(jù)結(jié)構(gòu)與算法?!驹闯绦颉?include <iostream>#include<string>using namespace st
6、d;#define LENGTH 5 char ch =' 'string key5="if","then","else","while","do"int Iskey(string c) /關(guān)鍵字判斷 int i; for(i=0;i<LENGTH;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判斷是否為字母 if(c<='z')&&(c>=&
7、#39;a')|(c<='Z')&&(c>='A') return 1; else return 0;int IsLetter1(char c) /判斷是否為af字母 if(c<='f')&&(c>='a')|(c<='F')&&(c>='A') return 1; else return 0;int IsNum(char c) /判斷是否為數(shù)字 if(c>='0'&&c
8、<='9') return 1; else return 0;void scan(FILE *fpin) string arr="" while(ch=fgetc(fpin)!=EOF) arr="" if(ch=' '|ch='t'|ch='n') else if(IsLetter(ch)|ch='_') arr=arr+ch; ch=fgetc(fpin); while(IsLetter(ch)|IsNum(ch) if(ch<='Z')&am
9、p;&(ch>='A') ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)cout<<"<"<<arr<<",關(guān)鍵字>"<<endl; else cout<<"<"<<arr<<",普通標(biāo)識(shí)符>"<<endl; else if(IsNum(ch) int fla
10、g=0;if(ch='0')arr=arr+ch;ch=fgetc(fpin);if(ch>='0'&&ch<='7') while(ch>='0'&&ch<='7') flag=1; arr=arr+ch; ch=fgetc(fpin);else if(ch='x'|ch='X')flag=2;arr=arr+ch; ch=fgetc(fpin);while(IsNum(ch)|IsLetter1(ch) arr=arr+ch
11、; ch=fgetc(fpin);else if(ch=' '|ch=','|ch='' )cout<<"<"<<arr<<",整數(shù)0>"<<endl;fseek(fpin,-1L,SEEK_CUR); if(flag=1) cout<<"<"<<arr<<",八進(jìn)制整數(shù)>"<<endl;else if(flag=2) cout<<&qu
12、ot;<"<<arr<<",十六進(jìn)制整數(shù)>"<<endl; else arr=arr+ch;ch=fgetc(fpin);while(IsNum(ch) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); cout<<"<"<<arr<<",十進(jìn)制整數(shù)>"<<endl; else switch(ch) case'+': case'-'
13、; : case'*' : case'=' : case'/' :cout<<"<"<<ch<<",運(yùn)算符>"<<endl;break; case'(' : case')' : case'' : case'' : case'' : case'.' : case',' : case'' : case'' :c
14、out<<"<"<<ch<<",界符>"<<endl;break; case':' :ch=fgetc(fpin); if(ch='=') cout<<"<"<<":="<<",運(yùn)算符>"<<endl; else cout<<"<"<<":"<<",界符&
15、gt;"<<endl; fseek(fpin,-1L,SEEK_CUR); break; case'>' :ch=fgetc(fpin); if(ch='=') cout<<"<"<<">="<<",運(yùn)算符>"<<endl; if(ch='>')cout<<"<"<<">>"<<",輸入
16、控制符>"<<endl; else cout<<"<"<<">"<<",運(yùn)算符>"<<endl; fseek(fpin,-1L,SEEK_CUR); break; case'<' :ch=fgetc(fpin); if(ch='=')cout<<"<"<<"<="<<",運(yùn)算符>"<&l
17、t;endl; else if(ch='<')cout<<"<"<<"<<"<<",輸出控制符>"<<endl; else if(ch='>') cout<<"<"<<"<>"<<",運(yùn)算符>"<<endl; elsecout<<"<"<<"<"<<",運(yùn)算符>"<<endl; fseek(fpin,-1L,SEEK_CUR); break; default : cout<<"<"<<ch<<",無(wú)法識(shí)別字符>"<<endl; void main() char in_fn30; FILE * fpin; cout<<"請(qǐng)輸入文件路徑及文件名:" for(;) cin>>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 血腥教育案例分析
- 急性呼吸道感染護(hù)理常規(guī)
- 酒店與新郎新娘合同范本
- 解除藝人經(jīng)紀(jì)合同協(xié)議書
- 2024年四川南充衛(wèi)生職業(yè)學(xué)院引進(jìn)招聘筆試真題
- 2024年嘉峪關(guān)市商務(wù)局招聘公益性崗位人員筆試真題
- 2024年廣東省農(nóng)村信用社聯(lián)合社各部室招聘筆試真題
- 中學(xué)生結(jié)核病防治課件
- 鋼結(jié)構(gòu)幕墻維修合同范本
- 買房沒合同只認(rèn)購(gòu)協(xié)議
- 2025江蘇蘇州昆山國(guó)創(chuàng)投資集團(tuán)有限公司第一期招聘17人筆試參考題庫(kù)附帶答案詳解版
- 2025年安徽皖信人力招聘筆試備考題庫(kù)(帶答案詳解)
- 【南通】2025年江蘇省通州區(qū)西亭鎮(zhèn)招聘民政協(xié)理員1人筆試歷年典型考題
- 2025年商務(wù)英語(yǔ)(BEC)中級(jí)考試真題卷:商務(wù)英語(yǔ)模擬面試與應(yīng)對(duì)策略試題
- 光伏電站安全管理課件
- 編輯校對(duì)員筆試試題及答案
- 廣西玉林職業(yè)技術(shù)學(xué)院招聘教職人員考試真題2024
- 耳鼻喉護(hù)理教學(xué)查房
- 2025年七一黨課-作風(fēng)建設(shè)永遠(yuǎn)在路上學(xué)習(xí)教育黨課
- 2025年高考數(shù)學(xué)全國(guó)二卷試題真題及答案詳解(精校打?。?/a>
- 2025年淮南新東辰控股集團(tuán)有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論