资源描述:
《编译原理实验二 预测分析法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二预测分析法一、实验项目名称预测分析法二、实验目的根据某一LL(1)文法编制调试预测分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析法的理解。三、实验环境Win8系统,VC++6.0软件,C语言开发工具四、实验内容本次实验的LL(1)文法为表达式文法:E→E+T
2、TT→T*F
3、FF→i
4、(E)编写识别表达式文法的合法句子的预测分析程序,对输入的任意符号串,给出分析过程及分析结果。分析过程要求输出步骤、分析栈、剩余输入串和所用产生式。如果该符号串不是表达式文法的合法句子,要给出尽量详细的错误提示。五、实
5、验步骤首先将终结符和非终结符以及预测分析表计算出来,并保存到数组中然后对输入的字符进行分析,将一个个终结符进行分配在分配的过程中输出每一步步骤对错误处,显示步骤数和错误字符六、源程序清单、测试数据、结果源程序:#include#include#includeusingnamespacestd;charzhong[6]={'i','+','*','(',')','#'};charfzhong[5]={'E','R','T','Y','F'};charshu[20];9//R代表
6、E'Y代表T'stringbiao[5][6]={{"TR","","","TR","",""},{"","+TR","","","@","@"},//@代表空{"FY","","","FY","",""},{"","@","*FY","","@","@"},{"i","","","(E)","",""}};#defineN20;typedefchartype;typedefstruct{type*base;type*top;intstacksize;}sqstack;voidinitstack(sqstack&s){s.base=
7、newtype[2];if(!s.base)cout<<"错误";s.top=s.base;s.stacksize=N;}voidpush(sqstack&s,typee){if(s.top-s.base==s.stacksize)cout<<"栈满";*s.top++=e;}voidpop(sqstack&s,type&e){if(s.top==s.base)cout<<"栈空";e=*--s.top;}typegettop(sqstacks)9{if(s.top==s.base)cout<<"栈空";return*(s.top-
8、1);}intfind1(charx){for(inti=0;i<5;i++){if(x==fzhong[i]){break;}}returni;}intfind2(charx){for(inti=0;i<6;i++){if(x==zhong[i]){break;}}returni;}voidshowstack(sqstackfen){chara;sqstackx;initstack(x);while(fen.top!=fen.base){pop(fen,a);push(x,a);}9while(x.top!=x.base){pop
9、(x,a);cout<10、p(fen,ch2);}elseif(gettop(fen)=='#'){cout<11、d2(shu[i])]=="@"){cout<
|