編譯原理詞法分析實驗報告_第1頁
編譯原理詞法分析實驗報告_第2頁
編譯原理詞法分析實驗報告_第3頁
編譯原理詞法分析實驗報告_第4頁
編譯原理詞法分析實驗報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

}#運行結(jié)果:}#運行結(jié)果:測試數(shù)據(jù):試驗一詞法分析一、試驗?zāi)康耐ㄟ^設(shè)計編制調(diào)試一個具體的詞法分析程序,加深對詞法分析原理的理解。并把握在對程序設(shè)計語言源程序進展掃描過程中將其分解為各類單詞的詞法分析方法。編制一個讀單詞過程,從輸入的源程序中,識別出各個具有獨立意義的單詞,即根本保存字、標(biāo)識符、常數(shù)、運算符、分隔符五大類。并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。二、試驗內(nèi)容功能描述:詞符號的屬性值)。本試驗中,承受的是將單詞分為五種的方法。、do、return、break、continue;1。2。常數(shù):為無符號整形數(shù);單詞種別碼為3。4。5。程序構(gòu)造描述:處理:分別出關(guān)鍵字、標(biāo)識符、數(shù)值、運算符和界符。輸出:在詞法分析結(jié)果表中輸出每個單詞所在行號、類型以及它所對應(yīng)的 編碼。其中,編碼是自定義的,一種類型對應(yīng)一個編碼。詞法分析結(jié)果顯示在掌握臺上。程序設(shè)計思路1、定義編碼表,用ArrayList是固定的,只需要初始化一次就夠了,所以將集合定義為static2、staticcharallstr[]newchar[100000];該數(shù)組用于存儲用戶從掌握臺輸入的全部字符。3、//從鍵盤獵取一個一個的字符publiccharGetchar{try{ch=(char)System.in.read;}catch(Exceptione){e.printStackTrace;}returnch;}4、用whileallstr5、Reserve三、試驗過程記錄試驗過程中,比較費力的是如何分割出一個一個的單詞,定義一個變量jallstrindexString類中的通過加斷點,對程序一步一步的調(diào)試,查看j、index測試數(shù)據(jù):main{int a=10;b=b+a;Intabc{Inta=5,b=6;While(a>=0){a--;}==>>>運行結(jié)果:Returnb;==>>>運行結(jié)果:}#運行結(jié)果:測試數(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;//識別分界符//推斷”(”if(allstr[j]==”(”){index++;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;}}五、試驗總結(jié)做本次試驗大約用了三個小時,用了一個多小時思考,設(shè)計,查資料,剩余的時間來編碼。由于剛開頭對問題的理解不太深入,造成在編碼過程中消滅了很多問題,始終在考慮是用一個單詞一個編碼還是將單詞分為五種編碼,鋪張了很長時間,最終選擇了將單詞分為五種編碼的方法來編寫詞法分ArrayList集合來存儲,這些編碼數(shù)據(jù)是固定的,所以定static運行。來回重復(fù),最終的得到了正確的運行結(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);//運算符table[4]=newKeyTable(al4,5);//分界符}//從鍵盤獵取一個一個的字符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;}//識別分界符//推斷”(”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;}//識別運算符//推斷=和==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等.壓縮文件請下載最新的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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論