www.pudn.com > LL(1)while.rar > LL(1).cpp
/* * 文件名称: 语法分析.h * 摘 要: 对任意输入LL(1)文法的分析表及字符串,本程序能自动判断所给字符串是 * 否为该文法的句子,并能给出分析过程。 */ #include#include #include #include using namespace std; void showstack(stack< char > st) { int i,j; char ch[100]; j=st.size(); for(i=0;i =0;i--) { cout< >str; for(i=0;i st; st.push('#'); st.push(Vn[0]); //#与识别符号入栈 j=0; h=1; w=str[0]; cout<<"步骤 "<<"分析栈 "<<"剩余输入串 "<<" 所用产生式"< "< =0;m--) { st.push(str0[m]); } goto opt1; } } } } } main() { int i,k,n,r; char Vn[100],Vt[100],select; string M[100][100]; cout<<"* 文件名称: 语法分析"< >n; cout<<"请输入各终结符(#号表示结束)Vt[i]:"; for(i=0;i<100;i++) { cin>>Vt[i]; if(Vt[i]=='#') { r=i; break; } } for (i=0;i >Vn[i]; cout<<"请输入此非终结符对应各终结符的产生式右部(null或NULL表示出错;$表示空串):"; for(k=0;k<=r;k++) { cin>>M[i][k]; } } opt3: cout<<"请输入要分析的字符串,且以#结束:"; analyse(Vn, Vt, M); cout<<" ************************请选择***********************"< >select; switch(select) { case '1': {goto opt3;break;} case '2': {goto opt2;} case '0': {break;} default: {cout<<"输入错误!请重新选择:"<