return 0; }
void out(sqstack st,string str,int sp,int k)//输出函数 { int n,m=0; for(int i=0;i<=sp;i++)//输出栈(符号) { if(st.data[i]<7) { cout< m=n+m; } for(i=m;i<30;i++) cout<<\ for(i=0;i<=sp;i++) //输出栈(数字) cout< void init(int Yy_pushtab[13][4],int Yy_d[264][7]) //初始化分析栈Yy_d[]与Yy_pushtab[] { int i,j; ifstream infile1(\ ifstream infile2(\ for(i=0;i<13;i++) { for(j=0;j<4;j++) { infile1>>Yy_pushtab[i][j]; // cout< //cout< for(i=256;i<264;i++) { for(j=0;j<7;j++) { infile2>>Yy_d[i][j]; // cout< // cout< if(str[i]>='0'&&str[i]<='9') st1[i]=6; } } void Foreparser(sqstack st,int Yy_pushtab[13][4],int Yy_d[264][7], int st1[],string str) 分析法 { int i,k=0,what_to_do; while(st.top!=-1) //预测 { out(st,str,st.top,k); if(st.data[st.top]>=0&&st.data[st.top]<=6)//栈顶元素为终结符 if(st.data[st.top]!=st1[k]) { cout<<\未能分析成功\ break; } else { st.top--; k++; cout< if(Yy_pushtab[what_to_do][i]!=-1&&Yy_pushtab[what_to_do][i]!=0) { st.top++; st.data[st.top]=Yy_pushtab[what_to_do][i]; } } } if(st.top==-1&&st1[k]==0) cout< 初始化文件需要放在代码文件夹 1、初始化Yy_pushtab[] 文件: 2、初始化Yy_d[] 文件: 程序运行截图: 1、对文法句子 1+2;# 进行分析: 1+2;# 是本文法句子,与手工分析一致。 2、对文法句子 2-1;# 进行分析: 2-1;#不是本文法句子,与手工分析一致。