版權(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)告實(shí)驗(yàn)名稱:編寫(xiě)詞法分析程序 實(shí)驗(yàn)類型:設(shè)計(jì)性實(shí)驗(yàn) 指導(dǎo)教師:* 專業(yè)班級(jí):軟件工程1401 姓 名:* 學(xué) 號(hào):* 實(shí)驗(yàn)地點(diǎn):東六e座301 實(shí)驗(yàn)成績(jī):_ 日期: 2016 年 5 月 8 日實(shí)驗(yàn)一編寫(xiě)詞法分析程序一、實(shí)驗(yàn)?zāi)康?. 通過(guò)設(shè)計(jì)、調(diào)試詞法分析程序,掌握詞法分析程序的設(shè)計(jì)工具(有窮自動(dòng)機(jī)),進(jìn)一步理解自動(dòng)機(jī)理論2. 掌握正則文法和正則表達(dá)式轉(zhuǎn)換成有窮自動(dòng)機(jī)的方法及有窮自動(dòng)機(jī)實(shí)現(xiàn)的方法3. 確定詞法分析程序的輸出形式及標(biāo)識(shí)符與關(guān)鍵字的區(qū)分方法4. 加深對(duì)理論知識(shí)的理解二、實(shí)驗(yàn)設(shè)計(jì)1. 設(shè)計(jì)原理:對(duì)源程序代碼從頭到尾掃描,將符合詞法語(yǔ)言規(guī)則的單詞輸出,包括:標(biāo)識(shí)符、保留字
2、、無(wú)符號(hào)整數(shù)、分界符、運(yùn)算符、注釋分離;判斷程序的詞法是否正確test語(yǔ)言的詞法規(guī)則如下:1)、標(biāo)識(shí)符:字母打頭,后接任意字母或數(shù)字。2)、保留字:標(biāo)識(shí)符的子集,包括:if,else,for,while,do, int,write,read。3)、無(wú)符號(hào)整數(shù):由數(shù)字組成,但最高位不能為0,允許一位的0。4)、分界符:(、)、;、5)、運(yùn)算符:+、-、*、/、=、=、=、!=、=6)、注釋符:/* */2. 設(shè)計(jì)方法:1) 用正則表達(dá)式或正則文法描述程序設(shè)計(jì)語(yǔ)言的詞法規(guī)則,通常采用正則表達(dá)式;一個(gè)正則表達(dá)式對(duì)應(yīng)一條詞法規(guī)則2) 為每個(gè)正則表達(dá)式構(gòu)造一個(gè)nfa,用來(lái)識(shí)別正則表達(dá)式描述的單詞將每一個(gè)
3、nfa合并、化簡(jiǎn)得到最簡(jiǎn)的dfa3) 將多個(gè)nfa合并為一個(gè)nfa4) 將nfa轉(zhuǎn)換成等價(jià)的dfa。5) 最小化dfa6) 確定單詞的輸出形式。7) 化簡(jiǎn)后的dfa單詞輸出形式構(gòu)造詞法分析程序3. 設(shè)計(jì)過(guò)程:1) 將test語(yǔ)言的六個(gè)語(yǔ)法規(guī)則分別轉(zhuǎn)換成正則表達(dá)式2) 為每個(gè)正則表達(dá)式構(gòu)造一個(gè)nfa,用來(lái)識(shí)別正則表達(dá)式描述的單詞3) 將5個(gè)nfa轉(zhuǎn)換成一個(gè)nfa,再將nfa化簡(jiǎn)確定化。4. 設(shè)計(jì)結(jié)果:1) 每一條test語(yǔ)言對(duì)應(yīng)的正則表達(dá)式如下:標(biāo)識(shí)符:( a|b|z|a|b|z )( 0|1|9| a|b|z|a|b|z )*保留字:標(biāo)識(shí)符的子集無(wú)符號(hào)整數(shù): ( (1|9 )( 0|1|9)*
4、 )|0分界符:( | ) | ; | | 運(yùn)算符:+ | - | * | / | = | | = | = | != | =注釋符:/*(其他)*/2) nfa如圖3) 化簡(jiǎn)、確定化的dfa三、實(shí)驗(yàn)過(guò)程1. 將test語(yǔ)言的六個(gè)語(yǔ)法規(guī)則轉(zhuǎn)換成正則表達(dá)式2. 將每個(gè)正則表達(dá)式裝換成nfa,再將nfa合并化簡(jiǎn)3. 最終得到設(shè)計(jì)結(jié)果如上所示:4. 根據(jù)確定化的dfa編寫(xiě)代碼5. 測(cè)試實(shí)驗(yàn)數(shù)據(jù)三、實(shí)驗(yàn)結(jié)果1. 測(cè)試數(shù)據(jù):/*this a test program.*/int abc;int 123;int a$;int i;int n;int b,c;int 2a;int a2;read n;n =
5、012345;for (i=1;i=n; i= i+1) abc=abc+i;if(i!=n) n = n+i;if (!n) b = b+c;/*the loop endedwrite abc;2. 實(shí)驗(yàn)現(xiàn)象:a) 控制臺(tái)顯示的數(shù)據(jù):b) 輸出文本的數(shù)據(jù):intintidabc;intintnum123;intintidaerror$error;intintidi;intintidn;intintidberror,idc;intintnum2ida;intintida2;readreadidn;idn=num0num12345;forfor(idi=num1;idi=|=)可以直接結(jié)束,也可
6、以連接=,!必須與=連接才合法,對(duì)于/需要多重考慮,即在注釋這個(gè)部分也可能是/符號(hào)構(gòu)建詞法分析程序的一般過(guò)程:、1、 根據(jù)詞法規(guī)則寫(xiě)出正則文法或者正則文法。2、 為每一個(gè)正則表達(dá)式構(gòu)造一個(gè)nfa,然后將多個(gè)nfa合并為一個(gè)nfa3、 將nfa轉(zhuǎn)化成dfa,并且化簡(jiǎn)最小化dfa4、 確定單詞的輸出形式5、 根據(jù)化簡(jiǎn)后的dfa和單詞輸出程序構(gòu)造詞法分析程序五、附錄:關(guān)鍵代碼/開(kāi)始讀取文件中的字符 ch = getc(fin); while(ch != eof) i = 0; while(ch = | ch = n | ch = t) if(ch = n) line +; ch = getc(fin
7、); /標(biāo)識(shí)符處理 if(isalpha(ch) while(isalpha(ch) | isdigit(ch) buffi+ = ch; ch = getc(fin); buffi = 0; /保留字 int n = 0; while(n 8) & strcmp(buff,keywordn) n+; if(n 0) buff0 = ch; buff1 = 0; ch = getc(fin); fprintf(fout,%st%sn,buff,buff); /雙分界符 else if(strchr(doubleword,ch) 0) buff0 = ch; ch = getc(fin); if
8、(ch = =) buff1 = ch; buff2 = 0; ch = getc(fin); fprintf(fout,%st%sn,buff,buff); else buff1 = 0; if(buff0 = !) printf(line %dt%st%sn,line,錯(cuò)誤:,buff); fprintf(fout,%st%sn,error,buff); else fprintf(fout,%st%sn,buff,buff); /注釋 else if(ch = /) ch = getc(fin); if(ch = *) char ch1 = getc(fin); while(true) if(ch1 = eof) printf(line %dt%st沒(méi)有匹配!n, line,錯(cuò)誤: ); break; ch = ch1; ch1 = getc(fin); if(ch =* & ch1 = /) break; ch = getc(fin); else buff0 = /; buff1 = 0; /輸出單分界符/ fprintf(fout,%st%sn,buff,buff); else buff0 = ch; buff1 = 0;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小額汽車貸款合同范例
- 2024年企業(yè)租車合同協(xié)議樣本
- 標(biāo)準(zhǔn)版市政道路工程合同
- 上門(mén)服務(wù)協(xié)議合同范本2024年
- 小型貨車銷售合同
- 網(wǎng)絡(luò)廣告合作協(xié)議
- 2024年度網(wǎng)絡(luò)安全防護(hù)服務(wù)合同
- 辦公租賃合同模板
- (2024版)人工智能醫(yī)療診斷系統(tǒng)開(kāi)發(fā)合同
- 2024年度醫(yī)療器械獨(dú)家代理合同
- 跨境數(shù)據(jù)流動(dòng)的全球治理進(jìn)展、趨勢(shì)與中國(guó)路徑
- 【多旋翼無(wú)人機(jī)的組裝與調(diào)試5600字(論文)】
- 2023年遼陽(yáng)市宏偉區(qū)事業(yè)單位考試真題
- 環(huán)境工程專業(yè)英語(yǔ) 課件
- 繼電保護(hù)動(dòng)作分析報(bào)告課件
- 五年級(jí)數(shù)學(xué)上冊(cè)8解方程課件
- 教學(xué)工作中存在問(wèn)題及整改措施
- 內(nèi)部項(xiàng)目跟投協(xié)議書(shū)(正)
- 鋼管靜壓樁質(zhì)量監(jiān)理細(xì)則
- 5000頭奶牛養(yǎng)殖場(chǎng)新建項(xiàng)目環(huán)境評(píng)估報(bào)告書(shū)
- 16飛機(jī)顛簸教學(xué)課件
評(píng)論
0/150
提交評(píng)論