4、>E+TE->TT->T*FT->FF->(E)F->i⑴計(jì)算FIRSTVE和LASTVT集合FirstVT(E)={+,*,(,i}LastVT(E)={+,*,),i}FirstVT(T)={*,(,i}LastVT(T)={*,),i}FirstVT(F)={(,i}LastVT(F)={),i}FirstVT(Q)={#}LastVT(Q)={#}⑵構(gòu)造算符優(yōu)先矩陣 +*()i#+><<><>*>><><>(<<<=<)>>>>i>> > > #<<< <= ⑶對于輸入串i+i*i+i#的手動分析過程:步驟符號棧當(dāng)前符號+剩余輸入串移進(jìn)或歸約0#i+i
5、*i+i#預(yù)備1#i+i*i+i#移進(jìn)2#N+i*i+i#歸約3#N+i*i+i#移進(jìn)4#N+i*i+i#移進(jìn)5#N+N*i+i#歸約6#N+N*i+i#移進(jìn)7#N+N*i+i#移進(jìn)8#N+N*N+i#歸約9#N+N+i#歸約10#N+i#歸約11#N+i#移進(jìn)12#N+i#移進(jìn)13#N+N#歸約14#N#歸約15#N#接受24見附錄3.4程序調(diào)試?yán)?、輸入產(chǎn)生式的個數(shù):2、輸入文法:3、判斷文法4、生成非終結(jié)符的FIRSTVT集和LASTVT集:5、生成算符優(yōu)先分析表:5、輸入字符串進(jìn)行分析:24輸出結(jié)果與自己做的結(jié)果一模一樣,說明設(shè)計(jì)成功。4.總結(jié)經(jīng)過此次
6、編譯課程設(shè)計(jì),使我對算符優(yōu)先分析有了更深更進(jìn)一步的理解,而且也鍛煉了自己的程序編碼能力,對自己今后的道路影響不小。當(dāng)然還有不足之處以后會慢慢改進(jìn)。在試驗(yàn)過程中,我忘記在程序最后面加上一句getchar();,導(dǎo)致我試驗(yàn)時,直接運(yùn)行.exe文件,當(dāng)運(yùn)行到最后輸入歸約字符串時,執(zhí)行完后界面自動關(guān)閉,導(dǎo)致我不能截圖,經(jīng)過不屑的努力,有兩種解決方法,第一可以用VC軟件運(yùn)行,界面就不會關(guān)閉。第二種是在程序里加上getchar();,.exe文件運(yùn)行到最后就不會自動關(guān)閉。附錄#include#include#include7、io.h>typedefstruct{charR;charr;24intflag;}array;typedefstruct{charE;chare;}charLode;typedefstruct{charLode*base;inttop;}charstack;charstr[80][80],arr[80][80],brr[80][80];arrayF[20];intm,kk,p,ppp,FF=1;charr[10];intcrr[20][20],FLAG=0;charccrr1[1][20],ccrr2[20][1];voidInitstack(charstac
8、k&s)//定義棧{s.