實(shí)驗(yàn)-編譯原理預(yù)測分析表方法試驗(yàn)報告_第1頁
實(shí)驗(yàn)-編譯原理預(yù)測分析表方法試驗(yàn)報告_第2頁
實(shí)驗(yàn)-編譯原理預(yù)測分析表方法試驗(yàn)報告_第3頁
實(shí)驗(yàn)-編譯原理預(yù)測分析表方法試驗(yàn)報告_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

實(shí)驗(yàn)7-8預(yù)測分析表方法一、實(shí)驗(yàn)?zāi)康睦斫忸A(yù)測分析表方法的實(shí)現(xiàn)原理。二、實(shí)驗(yàn)內(nèi)容:編寫一通用的預(yù)測法分析程序,要求有一定的錯誤處理能力,出錯后能夠使程序繼續(xù)運(yùn)行下去,直到分析過程結(jié)束??赏ㄟ^不同的文法(通過數(shù)據(jù)表現(xiàn))進(jìn)行測試。三.實(shí)驗(yàn)要求:給定算術(shù)表達(dá)式文法,編寫程序,測試數(shù)據(jù)。算術(shù)表達(dá)式文法E→TE’E’→+TE’|-TE’|εT→FT’T’→*FT’|/FT’|%FT’|εF→(E)|id|num四.實(shí)驗(yàn)過程:1.實(shí)驗(yàn)代碼:importjava.io.*;importjavax.swing.JOptionPane;publicclasspredict{ int length_vn=5,length_vt=10; staticinti,j,i1=0,e_flag=0;publicpredict(){} staticStringVN[]={"E","e","T","t","F"}; staticString staticStringCS[]={"Te","+Te","-Te","$","Ft","*Ft","/Ft","%Ft","","(E)","d","n"}; staticStringfollow[][]={{"#",")"},{"#",")"},{"#",")","+","-"},{"#",")","+","-"},{"#",")","+","-","*","/","%"}};staticintanalysis_table[][]={{-1,-1,-1,-1,-1,0,-1,0,0,-1},{1,2,-1,-1,-1,-1,3,-1,-1,3},{-1,-1,-1,-1,-1,4,-1,4,4,-1},{8,8,5,6,7,-1,8,-1,-1,8},{-1,-1,-1,-1,-1,9,-1,10,11,-1}};publicvoidlocate(Stringvn,Stringvt){ for(inta=0;a<5;a++){ if(VN[a].equals(vn)){ i=a;break; } elsei=-1; } for(intb=0;b<10;b++){ if(VT[b].equals(vt)){ j=b;break; } elsej=-1; }}publicvoidequal(intvn,intvt){ Stringcs=""; if(analysis_table[vn][vt]==-1) { inta; for(a=0;a<follow[vn].length;a++) { if(follow[vn][a].equals(VT[vt]))break; } if(a<follow[vn].length)error1(); elseerror2(vt); } else{ cs=CS[analysis_table[vn][vt]]; intcs_length=cs.length(); charachar[]=newchar[cs_length]; charbchar[]=newchar[cs_length]; cs.getChars(0,cs_length,achar,0); for(inta=0,b=cs_length-1;a<cs_length;a++,b--){ bchar[b]=achar[a]; } Stringnewstr=newString(bchar); in_Stack(newstr); }}publicvoiderror1(){ System.out.println("出錯,彈出棧頂符號");}publicvoiderror2(intvt){ System.out.println("出錯,跳過"+VT[vt]); in_Stack(VN[i]); i1++; }publicvoiderror3(Stringstr){ System.out.println("錯誤,不匹配終結(jié)符"+str); i1++; }publicvoidin_Stack(Stringstr){ try{ FileWriterfw=newFileWriter("test.txt",true); PrintWriterpw=newPrintWriter(fw); pw.write(str); pw.close(); fw.close(); }catch(IOExceptionef){}}publicStringout_Stack(){ Stringc=""; try{Readerdu=newFileReader("test.txt");BufferedReaderbr=newBufferedReader(du); c=br.readLine(); br.close(); du.close(); Filef1=newFile("test.txt"); f1.delete(); }catch(IOExceptioneio){} c=c.trim(); Stringsub_str=c.substring(0,c.length()-1); in_Stack(sub_str); Stringzhand=c.substring(c.length()-1,c.length()); returnzhand;}publicstaticvoidmain(Stringargs[]){ Filef=newFile("test.txt"); f.delete(); predictpd=newpredict(); Stringfenxi; Stringinput=JOptionPane.showInputDialog("請輸入算術(shù)表達(dá)式:"); input=input.trim(); chargchar[]=newchar[1]; pd.in_Stack("#E"); fenxi="E"; while(i1<input.length()){ inta,b,c; fenxi=pd.out_Stack(); System.out.println("------------------------------------------------"); System.out.print("棧頂元素:"+fenxi+'\t'); input.getChars(i1,i1+1,gchar,0); Stringvt=newString(gchar); vt=vt.trim(); System.out.print("當(dāng)前單詞記號:"+vt+"\t"); for(c=0;c<10;c++){ if(VT[c].equals(fenxi))break; } for(a=0;a<5;a++){ if(VN[a].equals(fenxi)){ System.out.print("展開非終結(jié)符"+fenxi+"->"); for(b=0;b<10;b++){ if(VT[b].equals(vt)&&analysis_table[a][b]!=-1){ System.out.print(CS[analysis_table[a][b]]+"\n");break; } } } } if(c<10&&!fenxi.equals(vt))pd.error3(fenxi); if(fenxi.equals(vt)){ System.out.println("匹配終結(jié)符"+fenxi+'\t'); i1++; } else{ pd.locate(fenxi,vt); pd.equal(i,j); } } System.out.println("結(jié)束");}}2.試驗(yàn)測試:給定一符合該文法的句子,如d+n/d,運(yùn)行預(yù)測分析程序,給出分析過程和每一步的分析結(jié)果,輸出形式如下圖:給定一不符合該文法的句子,如dd**n,運(yùn)行預(yù)測分析程序,給出分析和每一步的分析過程,并給出對錯誤的處理分析過程,輸出形式如下圖:四、實(shí)驗(yàn)總結(jié):1.本次通過試驗(yàn),我學(xué)會了預(yù)測分析表的構(gòu)造方法,即給文法的正規(guī)式編號:存放在字符數(shù)組中,從0開始編號,正規(guī)式的編號即為該正規(guī)式在數(shù)組中對應(yīng)的下標(biāo)。2.明白了錯誤處理機(jī)制,緊急方式的錯誤恢復(fù)方法(拋棄某些符號,繼續(xù)向下分析)(1)棧頂為非終結(jié)符A,串中當(dāng)前單詞屬于FOLLOW(A),則從棧中彈出A(此時可認(rèn)為

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論