編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第1頁
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第2頁
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第3頁
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第4頁
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

}#運(yùn)行結(jié)果:}#運(yùn)行結(jié)果:測(cè)試數(shù)據(jù):試驗(yàn)一詞法分析一、試驗(yàn)?zāi)康耐ㄟ^設(shè)計(jì)編制調(diào)試一個(gè)具體的詞法分析程序,加深對(duì)詞法分析原理的理解。并把握在對(duì)程序設(shè)計(jì)語言源程序進(jìn)展掃描過程中將其分解為各類單詞的詞法分析方法。編制一個(gè)讀單詞過程,從輸入的源程序中,識(shí)別出各個(gè)具有獨(dú)立意義的單詞,即根本保存字、標(biāo)識(shí)符、常數(shù)、運(yùn)算符、分隔符五大類。并依次輸出各個(gè)單詞的內(nèi)部編碼及單詞符號(hào)自身值。二、試驗(yàn)內(nèi)容功能描述:詞符號(hào)的屬性值)。本試驗(yàn)中,承受的是將單詞分為五種的方法。、do、return、break、continue;1。2。常數(shù):為無符號(hào)整形數(shù);單詞種別碼為3。4。5。程序構(gòu)造描述:處理:分別出關(guān)鍵字、標(biāo)識(shí)符、數(shù)值、運(yùn)算符和界符。輸出:在詞法分析結(jié)果表中輸出每個(gè)單詞所在行號(hào)、類型以及它所對(duì)應(yīng)的 編碼。其中,編碼是自定義的,一種類型對(duì)應(yīng)一個(gè)編碼。詞法分析結(jié)果顯示在掌握臺(tái)上。程序設(shè)計(jì)思路1、定義編碼表,用ArrayList是固定的,只需要初始化一次就夠了,所以將集合定義為static2、staticcharallstr[]newchar[100000];該數(shù)組用于存儲(chǔ)用戶從掌握臺(tái)輸入的全部字符。3、//從鍵盤獵取一個(gè)一個(gè)的字符publiccharGetchar{try{ch=(char)System.in.read;}catch(Exceptione){e.printStackTrace;}returnch;}4、用whileallstr5、Reserve三、試驗(yàn)過程記錄試驗(yàn)過程中,比較費(fèi)力的是如何分割出一個(gè)一個(gè)的單詞,定義一個(gè)變量jallstrindexString類中的通過加斷點(diǎn),對(duì)程序一步一步的調(diào)試,查看j、index測(cè)試數(shù)據(jù):main{int a=10;b=b+a;Intabc{Inta=5,b=6;While(a>=0){a--;}==>>>運(yùn)行結(jié)果:Returnb;==>>>運(yùn)行結(jié)果:}#運(yùn)行結(jié)果:測(cè)試數(shù)據(jù):inta=10,b=5;if(a>=9)returnb;#四、主要源代碼//推斷是否為字母publicbooleanIsLetter(charch){returnjava.lang.Character.isLetter(ch);}//推斷是否為數(shù)字publicbooleanIsDigit(charch){returnjava.lang.Character.isDigit(ch);}publicintReserve{name=newString(allstr).substring(j,index);//取子串for(inti=0;i<5;i++)if(table[i].key.contains(name))returntable[i].code;return0;}publicstaticvoidmain(String[]args){WordAnalyzera=newWordAnalyzer;ch=a.Getchar;intm=0;while(ch!=”#”){allstr[index]=ch;index++;ch=a.Getchar;}intk=index;index=0;while(j<k){m=j;//標(biāo)示符if(a.IsLetter(allstr[j])){while(a.IsLetter(allstr[index])||a.IsDigit(allstr[index])){index++;}if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(2,“+name+“)“);j=index;}//數(shù)字if(a.IsDigit(allstr[j])){while(a.IsDigit(allstr[index]))index++;if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(3,“+name+“)“);j=index;//識(shí)別分界符//推斷”(”if(allstr[j]==”(”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//識(shí)別運(yùn)算符//推斷=和==if(allstr[j]==”=”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}五、試驗(yàn)總結(jié)做本次試驗(yàn)大約用了三個(gè)小時(shí),用了一個(gè)多小時(shí)思考,設(shè)計(jì),查資料,剩余的時(shí)間來編碼。由于剛開頭對(duì)問題的理解不太深入,造成在編碼過程中消滅了很多問題,始終在考慮是用一個(gè)單詞一個(gè)編碼還是將單詞分為五種編碼,鋪張了很長時(shí)間,最終選擇了將單詞分為五種編碼的方法來編寫詞法分ArrayList集合來存儲(chǔ),這些編碼數(shù)據(jù)是固定的,所以定static運(yùn)行。來回重復(fù),最終的得到了正確的運(yùn)行結(jié)果。packagecom.fgy.practice;importjava.util.ArrayList;importjava.util.List;publicclassWordAnalyzer{staticcharch;staticintindex=0;staticintj=0;staticcharallstr[]=newchar[100000];staticStringname;staticKeyTable[]table=newKeyTable[5];static{List<String>al=newArrayList<>;al.add(“main“);al.add(“if“);al.add(“else“);al.add(“int“);al.add(“for“);al.add(“while“);al.add(“return“);List<String>al1=newArrayList<>;List<String>al2=newArrayList<>;List<String>al3=newArrayList<>;al3.add(“+“);al3.add(“++“);al3.add(“-“);al3.add(“--“);al3.add(“=“);al3.add(“==“);al3.add(“>“);al3.add(“>=“);al3.add(“<“);al3.add(“<=“);List<String>al4=newArrayList<>;al4.add(“,“);al4.add(“;“);al4.add(“{“);al4.add(“}“);al4.add(“(“);al4.add(“)“);table[0]=newKeyTable(al,1);//關(guān)鍵字table[1]=newKeyTable(al1,2);//標(biāo)示符table[2]=newKeyTable(al2,3);//常數(shù)table[3]=newKeyTable(al3,4);//運(yùn)算符table[4]=newKeyTable(al4,5);//分界符}//從鍵盤獵取一個(gè)一個(gè)的字符publiccharGetchar{try{ch=(char)System.in.read;}catch(Exceptione){e.printStackTrace;}returnch;}//推斷是否為字母publicbooleanIsLetter(charch){returnjava.lang.Character.isLetter(ch);}//推斷是否為數(shù)字publicbooleanIsDigit(charch){returnjava.lang.Character.isDigit(ch);}publicintReserve{name=newString(allstr).substring(j,index);//for(inti=0;i<5;i++)if(table[i].key.contains(name))returntable[i].code;return0;}publicstaticvoidmain(String[]args){WordAnalyzera=newWordAnalyzer;ch=a.Getchar;intm=0;while(ch!=”#”){allstr[index]=ch;index++;ch=a.Getchar;}intk=index;index=0;while(j<k){m=j;//標(biāo)示符if(a.IsLetter(allstr[j])){while(a.IsLetter(allstr[index])||a.IsDigit(allstr[index])){index++;}if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(2,“+name+“)“);j=index;}//數(shù)字if(a.IsDigit(allstr[j])){while(a.IsDigit(allstr[index]))index++;if(a.Reserve!=0)System.out.println(“(“+a.Reserve+“,“+name+“)“);elseSystem.out.println(“(3,“+name+“)“);j=index;}//識(shí)別分界符//推斷”(”if(allstr[j]==”(”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推斷”)”if(allstr[j]==”)”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推斷‘{’if(allstr[j]==”{”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推斷‘}’if(allstr[j]==”}”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//if(allstr[j]==”;”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//推斷,if(allstr[j]==”,”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}//識(shí)別運(yùn)算符//推斷=和==if(allstr[j]==”=”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}if(allstr[j]==”<”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}//推斷‘>’和‘>=’if(allstr[j]==”>”){index++;if(allstr[index]==”=”){index++;System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}else{System.out.println(“(“+a.Reserve+“,“+name+“)“);j=index;}}//推斷‘+’和‘++’if(allstr[j]==”+”){index++;if(allstr[index]==”+”){index++;System.out.println(“(“+a.Reserve+“,“+name

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論