安工大王森玉編譯原理實驗報告_第1頁
安工大王森玉編譯原理實驗報告_第2頁
安工大王森玉編譯原理實驗報告_第3頁
安工大王森玉編譯原理實驗報告_第4頁
安工大王森玉編譯原理實驗報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、編譯原理實驗報告 老師:王森玉 姓名: 學號: 班級: 實驗內(nèi)容: 輸入一個文法 1. 求出每個非終結符的FIRST集合 2. 求出每個產(chǎn)生式右部的FIRST集合 3. 求出每個非終結符的Follow集合 實驗環(huán)境: Visual C+ 實驗目的: 讓同學們通過編寫代碼求出FIRST集合和FOLLOW,加深對這兩種集合 求法的理解。 實驗內(nèi)容一: 測試文法:S-S;D|D D-(T)|H H-a|(S) T-T+S|S 源碼:#include #include #define MAX 50 char cssMAXMAX;n); printf(用#表示空符號 ,非終結符用大寫字母表示,其他字符表

2、示終結符n); while(1) fgets(a,MAX*MAX,stdin); v=handle(a); if(v=-1) return -1; if(v=2) return 0; h=ai0) lj.num+; flag=1; break; else flag=0; if(!cnt)|(!flag) lcnt.ch=ai0; lcnt.flag=-1; lcnt.num=1; lcnt.s=0; lcnt.l=0; cnt+; flag=1; continue; c=count; while(c) for(i=0;ic;i+) h) lj.flag=1; break; i-; contin

3、ue; len=strlen(ai); for(j=3;jlen;j+) h) lk.num-; if(lk.num=0) lk.flag=0; break; if(i!=c-1) for(k=i;kc-1;k+) strcpy(ak,ak+1); c-; i-; flag2=0; continue; h) if(lk.flag=0) flag2=1; break; else if(lk.flag=1) for(t=j;tlen-1;t+) ait=ait+1; ailen-1=0; j-; len-; break; break; if(flag2) break; if(ai3=0) ch=a

4、i0; for(j=0;jc;j+) if(ch=aj0) if(j!=c-1) for(k=j;kc-1;k+) strcpy(ak,ak+1); c-; j-; else c-; j-; i-; for(k=0;kcnt;k+) if(ch=lk.ch) lk.flag=1; break; if(flag2) for(k=0;kcnt;k+) if(ai0=lk.ch) lk.num-; if(lk.num=0) lk.flag=0; if(i!=c-1) for(k=i;kc-1;k+) strcpy(ak,ak+1); c-; i-; flag2=0; continue; h) for

5、(t=0;tlk.s;t+) if(aij=lk.firstt) flag=1; break; if(!flag) lk.firstlk.s=aij; lk.s+; lk.firstlk.s=0; fchange=1; flag=0; break; h) for(t=0;tcnt;t+) if(ai0=lt.ch) for(t1=0;t1lk.s;t1+) for(t2=0;t2lt.s;t2+) if(lk.firstt1=lt.firstt2) break; if(t2=lt.s) lt.firstlt.s=lk.firstt1; lt.s+; lt.firstlt.s=0; break;

6、 break; if(lk.flag) continue; else break; if(!fchange) for(i=0;iS;D|D D-(T)|H H-a|(S) T-T+S|S 于符表不 PinsTcs FinSTCD FIMST FIRST 結符用大寫字母表示 -;DI 卜-MKD M-a!CS T-r+S! FIRST= a= aC FIRSTD: a FIflST:盤 FIRST: C FIBST: a FIRSTS?; at 部分源碼: ) flag=1; break; if(flag) flag=0; continue; strcpy(rj.a,cssi+3); rj.s=

7、O; cnt+; for(i=0;icnt;i+) len=strlen(ri.a); for(j=0;jlen;j+) j=#) ri.firstri.s=#; ri.s+; ri.firstri.s=0; break; else if(ri.ajZ) ri.firstri.s=ri.aj; ri.s+; ri.firstri.s=0; break; else for(k=0;kcnt;k+) if(ri.aj=lk.ch) len1=strlen(lk.first); for(t=0;tlen1;t+) if(lk.firstt!=#) ri.firstri.s=lk.firstt; ri

8、.s+; ri.firstri.s=0; break; if(lk.flag) if(j=len-1) ri.firstri.s=#; ri.s+; ri.firstri.s=0; continue; else break; for(i=0;iBoT!T r-raF!F F-nF:CBltlf 2 FIRSTCB: FIRST: nCtf n: nCtf FIRT: nCt PIHSTCTaFJ: nCtf FIRKF: nCtF PIRT(nF: n FIRT: C pmTCt: t FIRST: F FOLLOWSB: FOLLOLICT = F0LLQW = Press any key

9、to continue ollowl0.l=#; l0.l+; l0.followl0.l=0; while(1) fchange=0; for(i=0;ic;i+) len=strlen(ai); for(j=3;j=A)tcnt;t+) if(aij=lt.ch) for(t1=0;t1lt.s;t1+) if(lt.firstt1=#) continue; for(t2=0;t2=A)kcnt;k+) if(ch0=lk.ch) for(t=0;tcnt;t+) if(cht3=lt.ch) for(t1=0;t1lk.l;t1+) for(t2=0;t2lt.l;t2+) if(lk.

10、followt1=lt.followt2) break; if(t2!=lt.l) continue; else lt.followlt.l=lk.followt1; fchange=1; lt.l+; lt.followlt.l=0; if(lt.flag) cht3-=0; else flag=1; t3-; break; break; else break; flag=0; h) for(t=0;tlk.l;t+) if(aij=lk.followt) break; if(t=lk.l) fchange=1; lk.followlk.l=aij; lk.l+; lk.followlk.l=0; if(!fchange) for(i=0;icnt;i+) printf(FOLLOW(%c): %sn,li.ch,li.follow); break; 實驗感想 : 通過這幾次的編碼實驗,不僅加強了我對求 f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論