資源描述:
《實驗4算符優(yōu)先分析法》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、.實驗名稱:實驗任務:對下述描述算符表達式的算符優(yōu)先文法G[E],給出算符優(yōu)先分析的實驗結果。實驗內容:有上下無關文法如下:E->E+T
2、E-T
3、TT->T*F
4、T/F
5、FF->(E)
6、i說明:優(yōu)先關系矩陣的構造過程:(1)=關系由產生式F->(E)知‘(’=‘)’FIRSTVT集及LASTVT集FIRSTVT(E)={+,-,*,/,(,i}FIRSTVT(F)={(,i}FIRSTVT(T)={*,/,(,i}LASTVT(E)={+,-,*,/,),i}LASTVT(F)={),i}LASTVT(T)={*,/,),i}(2)<關系+T則有:+7、(T)-T則有:-關系E+則有:LASTVT(E)>+E-則有:LASTVT(E)>-T*則有:LASTVT(T)>*T/則有:LASTVT(T)>/E)則有:LASTVT(E)>)(4)請大家畫出優(yōu)先關系矩陣終結符之間的優(yōu)先關系是唯一的,所以該文法是算符優(yōu)先文法。程序的功能描述:程序由文件讀入字符串(以#結束),然后進行算符優(yōu)先分析,分析過程中如有錯誤,則終止程序并報告錯誤位置,最終向屏幕輸出移近——規(guī)約過程。..(5)依據(jù)文法和
8、求出的相應FirstVT和LastVT集生成算符優(yōu)先分析表。算法描述如下:for每個形如P->X1X2…Xn的產生式dofori=1ton-1dobeginifXi和Xi+1都是終結符thenXi=Xi+1ifi<=n-2,Xi和Xi+2是終結符,但Xi+1為非終結符thenXi=Xi+2ifXi為終結符,Xi+1為非終結符thenforFirstVT中的每個元素adoXiXi+1end(6)構造總控程序算法描述如下:stackS;k=1;//符號棧S的使用深度..S[k]=‘#
9、’REPEAT把下一個輸入符號讀進a中;IfS[k]?VTthenj=kelsej=k-1;WhileS[j]>adoBeginRepeatQ=S[j];ifS[j-1]?VTthenj=j-1elsej=j-2untilS[j]10、include"iostream.h"chardata[20][20];//算符優(yōu)先關系chars[100];//模擬符號棧scharlable[20];//文法終極符集charinput[100];//文法輸入符號串charstring[20][10];//用于輸入串的分析intk;chara;intj;charq;intr;//文法規(guī)則個數(shù)intr1;//轉化后文法規(guī)則個數(shù)charst[10][30];//用來存儲文法規(guī)則charfirst[10][10];//文法非終結符FIRSTVT集charlast[10][10];//文法非終結符LASTVT集intff
11、lag[10]={0};//標志第i個非終結符的FIRSTVT集是否已求出intlflag[10]={0};//標志第i個非終結符的LASTVT集是否已求出intdeal();//對輸入串的分析intzhongjie(charc);//判斷字符c是否是終極符intxiabiao(charc);//求字符c在算符優(yōu)先關系表中的下標voidout(intj,intk,char*s);//打印s棧voidfirstvt(charc);//求非終結符c的FIRSTVT集voidlastvt(charc);//求非終結符c的LASTVT集voidtable();//創(chuàng)建文法優(yōu)
12、先關系表voidmain(){inti,j,k=0;printf("請輸入文法規(guī)則數(shù):");scanf("%d",&r);printf("請輸入文法規(guī)則:");for(i=0;i