安徽工業(yè)大學(xué)編譯原理試驗報告_第1頁
安徽工業(yè)大學(xué)編譯原理試驗報告_第2頁
安徽工業(yè)大學(xué)編譯原理試驗報告_第3頁
安徽工業(yè)大學(xué)編譯原理試驗報告_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——安徽工業(yè)大學(xué)編譯原理試驗報告

編譯原理試驗報告

姓名:葉玉虎班級:計122班指導(dǎo)老師:王森玉試驗日期:2023/5/11

試驗內(nèi)容:

1.求出每個非終結(jié)符的FIRST集合2.求出每個產(chǎn)生式右部的FIRST集合3.求出每個非終結(jié)符的Follow集合試驗環(huán)境:

VisualStudio2023試驗?zāi)康?

讓同學(xué)們把握FIRST集合和FOLLOW集合的求法

試驗代碼:

#include#include#defineMAX50

charcss[MAX][MAX];//保存所有的產(chǎn)生式intcount=0;intcnt=0;

structL{//保存所有的終結(jié)符charch;

intflag;//1:能推出ε,0:不能,初值:-1intnum;

charfirst[MAX];ints;//first的長度charfollow[MAX];intl;//follow的長度}l[MAX];

//對輸入的格式進行控制,并校驗輸入是否符合格式inthandle(chara[]){

intlen,i=0,j,k;

len=strlen(a);

while(a[i]!=10){if(a[i]=='$')return2;

if((''==a[i])||(9==a[i])){i++;continue;}

if((a[i]>='A')}else{j=i;k=0;while((a[j]!='')count++;if((a[j+1]=='')||(a[j]==9)||(a[j]=='$')||(a[j]==10)){printf(\產(chǎn)生式格式錯誤\\n\return0;}css[count][0]=a[i];css[count][1]=a[i+1];css[count][2]=a[i+2];k=3;j++;continue;}css[count][k]=a[j];k++;j++;}css[count][k]='\\0';i=j;count++;}

}else{printf(\產(chǎn)生式格式錯誤\\n\return-1;}}

return0;}

//從鍵盤獲得輸入intinput(){

chara[MAX*MAX];intv;

printf(\輸入產(chǎn)生式,產(chǎn)生式之間以空格回車或Tab鍵分隔,并以$鍵終止.\\n\printf(\用@表示虛擬符號ε,終結(jié)符用大寫字母表示,其他字符表示非終結(jié)符\\n\

while(1){fgets(a,MAX*MAX,stdin);v=handle(a);if(v==-1)return-1;if(v==2)return0;}}

//求出能推出ε的非終結(jié)符voidseekEmpty(){

inti,j,k,t;

intflag=0,flag2=0;intlen,c;

chara[MAX][MAX],ch;for(i=0;i

{/*將該非終結(jié)符的FIRST集合除去ε并入到當(dāng)前非終結(jié)符的FIRST集合中*/for(k=0;k'Z')){r[i].first[r[i].s]=r[i].a[j];r[i].s++;r[i].first[r[i].s]='\\0';break;}else{for(k=0;k='A')}}if(j!=len){strcpy(a[c],css[i]);c++;}}

l[0].follow[l[0].l]='#';l[0].l++;

l[0].follow[l[0].l]='\\0';

while(1){

fchange=0;for(i=0;i='A')k//將該產(chǎn)生式左部非終結(jié)符的Follow集合//參與到當(dāng)前非終結(jié)符的Follow集合中.

//然后從當(dāng)前終結(jié)符開始向右判斷是否為非終結(jié)符,是的話,進行相應(yīng)處理//循環(huán)直到當(dāng)前非終結(jié)符推不出ε或當(dāng)前為終結(jié)符時退出if(j==len-1){t3=j;strcpy(ch,a[i]);while(!flag){if((ch[t3]>='A')k='A')kMH|aH->LSo|@K->dML|@L->eHfM->K|bLM

測試數(shù)據(jù)2:S->aHH->aMd|dM->Ab|@A->aM|e

試驗感想:

經(jīng)過這幾次的試驗,不僅讓我們更加深刻的知道了first集合和follow集合的計算步驟和方法,還很好的培養(yǎng)了我們動手能力。雖然這兩個集合用筆算的方法很簡單,但是要讓計算機來演算就不是那么簡單了,這需要設(shè)計合理的數(shù)據(jù)結(jié)構(gòu)和算法才能正確地求出結(jié)果。當(dāng)然在設(shè)計算法的時候難免會出現(xiàn)錯誤,這就需要我們這些程序員們細(xì)心

溫馨提示

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

評論

0/150

提交評論