资源描述:
《预测分析方法--c++版》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理上机实验一、实验题目:预测分析方法二、实验要求:用C++程序设计语言,构建预测分析程序、先进后出栈、预测分析表,实现用程序自动完成预测分析过程。三、程序流图:‘#’‘S’进栈,当前终结符送a上托栈顶符号放入XX∈VT?X=‘#’?X=a?X=a?M[X,a]是产生式吗出错结束读入下一符号出错若产生式为X→x1x2……xn按逆序即xn……x2x1入栈四、程序代码:#include#includeusingnamespacestd;stringtable(c
2、hara,charb){char*analist[5][6]={//在子函数中创建二维数组{"Te","1","1","Te","1","1"},//为了方便表示,用1代表出错{"1","+Te","1","1","0","0"},//ε用0代替{"Ft","1","1","Ft","1","1"},{"1","0","*Ft","1","0","0"},{"i","1","1","(E)","1","1"}};inti=0;intj=0;7switch(a){case'E':i=0;break;
3、case'e':i=1;break;case'T':i=2;break;case't':i=3;break;case'F':i=4;break;}switch(b){case'i':j=0;break;case'+':j=1;break;case'*':j=2;break;case'(':j=3;break;case')':j=4;break;case'#':j=5;break;}returnanalist[i][j];}boolisVt(chard)//判断是否是终结符{charvt[5]={'
4、i','+','*','(',')'};for(inti=0;i<5;i++){if(vt[i]==d)returntrue;}returnfalse;}voidmain(){intop1,op2;//op1、op2分别为两个栈的栈顶指针stringinputstr;//inputstr表示输入待分析的符号串intmark=0;//mark用来记录程序执行的次数stringstr;//定义str表示返回的产生式chara,X;//流程图中的a、Xcharstack1[30];//用两个数组定义两个
5、栈charstack2[30];op1=0;//初始化栈顶指针op2=0;stack1[op1]='#';//#放入栈1op1++;stack1[op1]='E';//E放入栈1cout<Te"<6、<"e->+Te
7、ε"<Ft"<*Ft
8、ε"<i
9、(E)"<>inputstr;//输入待分析符号串cout<10、utstr.length();a=stack2[op2];op2--;cout<<"对符号串"<11、'<<'t';X=stack1[op1];//上托栈顶符号放入Xop1--;for(intk=op2+1;k!=0;k--)//输出剩余符号串(即输出栈2){cout<