編譯原理詞法分析實驗報告_第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è)計語言源程序進展掃描過程中將其分解為各類單詞的詞法分析方法。編制一個讀單詞過程,從輸入的源程序中,識別出各個具有獨立意義的單詞,即根本保存字、標識符、常數(shù)、運算符、分隔符五大類。并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。二、試驗內(nèi)容功能描述:詞符號的屬性值)。本試驗中,承受的是將單詞分為五種的方法。、do、return、break、continue;1。2。常數(shù):為無符號整形數(shù);單詞種別碼為3。4。5。程序構(gòu)造描述:處理:分別出關(guān)鍵字、標識符、數(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;//標示符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);//標示符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;//標示符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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論