版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
河南工業(yè)大學(xué)實驗報告課程名稱 實驗項目實驗一詞法分析院系信息科學(xué)與工程學(xué)院專業(yè)班級計科F1505班姓名李杰學(xué)號201516010118指導(dǎo)老師閻娟日期2018.4.16批改日期成績實驗?zāi)康?.深入理解有限自動機及其應(yīng)用2.掌握根據(jù)語言的詞法規(guī)則構(gòu)造識別其單詞的有限自動機的方法3.基本掌握詞法分析程序的開發(fā)。實驗內(nèi)容及要求編制一個能夠分析三種整數(shù)、標識符和主要關(guān)鍵字的詞法分析器。實驗要求1根據(jù)以下的正規(guī)式,編制正規(guī)文法,畫出狀態(tài)圖標識符 <字母>(<字母>|<數(shù)字字符>)*十進制整數(shù) 0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*八進制整數(shù) 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六進制整數(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)*關(guān)鍵字 ifthenelsewhiledo2根據(jù)狀態(tài)圖,設(shè)計詞法分析函數(shù)intscan(),完成以下功能:從鍵盤讀入數(shù)據(jù),分析出一個單詞。返回單詞種別(用整數(shù)表示),返回單詞屬性(不同的屬性可以放在不同的全局變量中)。3編寫測試程序,反復(fù)調(diào)用函數(shù)scan(),輸出單詞種別和屬性。實驗過程①詞法的正規(guī)式描述標識符〈字母〉(〈字母>|<數(shù)字字符>)*(£|_|.)(<字母>|<數(shù)字字符>)*十進制整數(shù)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(e|.)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*八進制整數(shù)0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* (e|.)(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六進制整數(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)* ( e |.)(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)*運算符和分隔符+-*/><=()關(guān)鍵字ifthenelsewhiledQ變換后的正規(guī)文法(1)標識符設(shè)〈字母〉的表示符為A(alpha),〈數(shù)字字符〉的表示符為N(num),則標識符的正規(guī)文法可以表示為:id—AI|AI|NIJf£|.I(2) 十進制數(shù)S—0|1A|2A|3A|4A|5A|6A|7A|8A|9AA—e|1AB|2AB|3AB|4AB|5AB|6AB|7AB|8AB|9ABB—e|.S(3) 八進制數(shù)S—0AA—0B|1B|2B|3B|4B|5B|6B|7BB—e|0BC|1BC|2BC|3BC|4BC|5BC|6BC|7BCC—e|.A(4) 十六進制數(shù)S—0xM|0XNN—0M|1M|2M|3M|4M|5M|6M|7M|8M|9M|aM|bM|cM|dM|eM|fM|AM|BM|CM|DM|EM|FM|M—e|0M|R1MR|2MR|3MR|4MR|5MR|6MR|7MR|8MR|9MR|aMR|bMR|cMR|dMR|eMR|fMR|AMR|BMR|CMR|DMR|EMR|FMR|R—e|.N(5) 運算符和分隔符S—+|-|*|/|>|<|=|(|)|:=|#|;(6) 關(guān)鍵字S—if|then|else|while|do|switch|case|for?狀態(tài)圖L.RkOR■I'iIkii曲暗whig商嘗、mIItfi'r-'lfflill-dlIfft?II初I-KKOR?;辿HEdill制小m別II散T!l-@函數(shù)設(shè)計intIskey(stringc){ 〃關(guān)鍵字判斷inti;for(i=0;ivLENGTH;i++){if(key[i].compare(c)==0)return1;}return0;}intIsLetter(charc){ 〃判斷是否為字母if(((c<='z')&&(c>='a'))ll((cv='Z')&&(c>='A')))return1;elsereturn0;}if(((c<='f')&&(c>='a'))||((c<='F')&&(c>='A')))return1;elsereturn0;}intIsNum(charc){ //判斷是否為數(shù)字if(c>='0'&&c<='9')return1;elsereturn0;}?scan()函數(shù),實現(xiàn)該算法voidscan(FILE*fpin){stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";if(ch==''||ch=='\t'||ch=='\n'){}elseif(IsLetter(ch)||ch=='_'){arr=arr+ch;ch=fgetc(fpin);while(IsLetter(ch)||IsNum(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;
arr=arr+ch;ch=fgetc(fpin);}//fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){coutvv"v"vvarrvv",關(guān)鍵字>"vvendl;}elsecoutvv"v"vvarrvv",普通標識符〉"vvendl;}elseif(IsNum(ch)){intflag=0;if(ch=='0'){arr=arr+ch;ch=fgetc(fpin);if(ch>='0'&&chv='7'){while(ch>='0'&&chv='7'){flag=1;arr=arr+ch;ch=fgetc(fpin);elseif(ch=='x'||ch=='X'){flag=2;arr=arr+ch;ch=fgetc(fpin);while(IsNum(ch)||IsLetter1(ch)){arr=arr+ch;
ch=fgetc(fpin);}}elseif(ch==''||ch==','||ch==';'){coutvv"v"vvarrvv",整數(shù)0>"vvendl;}//fseek(fpin,-1L,SEEK_CUR);if(flag=l)coutvv"v"vvarrvv",八進制整數(shù)>"vvendl;elseif(flag==2) coutvv"v"vvarrvv",十六進制整數(shù)>"vvendl;}else{arr=arr+ch;ch=fgetc(fpin);while(IsNum(ch)){arr=arr+ch;ch=fgetc(fpin);}//fseek(fpin,-lL,SEEK_CUR);coutvv"v"vvarrvv",十進制整數(shù)>"vvendl;}}elseswitch(ch){case'+':case'-':case'*':case'=':case'/':coutvv"v"vvchvv",運算符>"vvendl;break;case'(':case')':case'[':case']':case';':case'.':case',':case'{':case'}':coutvv"v"vvchvv",界符>"vvendl;break;case':':{ch=fgetc(fpin);if(ch=='=')cout<<"<"<<":="<<"運算符>"vvendl;else{cout<<"<"<<"::"<<",界符>"vvendl;;//fseek(fpin,-1L,SEEK_CUR);}}break;case'>':{ch=fgetc(fpin);if(ch=='=')coutvv"v"vv">="vv"運算符>"vvendl;if(ch=='>')coutvv"v"vv">>"vv"輸入控制符>"vvendl;else{coutvv"v"vv">"vv"運算符>"vvendl;//fseek(fpin,-1L,SEEK_CUR);}}break;case'<':{ch=fgetc(fpin);if(ch=='=')coutvv"v"vv"v="vv"運算符>"vvendl;elseif(ch=='v')coutvv"v"vv"vv"vv"輸出控制符>"vvendl;elseif(ch=='>')coutvv"v"vv"v>"vv"運算符>"vvendl;else{coutvv"v"vv"v"vv"運算符>"vvendl;//fseek(fpin,-1L,SEEK_CUR);}}break;default:coutvv"v"vvchvv",無法識別字符〉"vvendl;}}}實驗結(jié)果經(jīng)過不斷的調(diào)試,分析,改錯,最終形成了以上的程序,樣例測試如下圖所示。輸入一個字符串,可以分析出十進制數(shù),八進制數(shù),十六進制數(shù),標識符,關(guān)鍵字,運算符,但此程序還存在一些不足:比如無法識別中文,回車,也就是說按下回車就會分析出結(jié)果,也就不能對一個程序進行分析詞法。
"Es\cadebl□clkml編譯]理長橙一*\bin\Debug爆驗"Es\cadebl□clkml編譯]理長橙一*\bin\Debug爆驗一.exe1ill13杯>>>乂薯爲(wèi)01W過狎20S縣昱耳1Gks/運運運運15J1運運運^1I>uI■■BTxI-uI一+一:t:/9」1-/TTW□實驗總結(jié)(心得)此次實驗難度較大,剛開始看這個實驗完全一頭霧水,不過隨
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識傳播愛心基金管理辦法
- 服裝店內(nèi)墻施工合同
- 旅游紀念品銷售租賃合同
- 2024年國際貨物交易服務(wù)平臺協(xié)議
- 城市管道保溫施工合同
- 漁業(yè)資源保護苗種管理
- 醫(yī)療云計算設(shè)備養(yǎng)護管理辦法
- 珠寶首飾流通新規(guī):典當(dāng)管理辦法
- 旅游設(shè)施施工代理協(xié)議
- 消防設(shè)施采購招投標注意事項
- 廣告宣傳費用巧籌劃三個方案
- 模板支架及腳手架安全使用培訓(xùn)課件
- 企業(yè)財產(chǎn)保險投保單
- CT報告單模板精編版
- 柿子品種介紹PPT課件
- 內(nèi)鏡清潔消毒登記表格模板
- 天然氣脫硫(課堂運用)
- 幼兒園教師師德師風(fēng)考核表(共2頁)
- 城鎮(zhèn)職工醫(yī)療保險運行中的問題分析及措施
- 學(xué)校食堂五常法管理制度
- 畢業(yè)設(shè)計500kv變電站設(shè)計
評論
0/150
提交評論