E - 表达式语法分析——预测分析法
include<bits/stdc++.h>
using namespace std;
stack
stack
int num=1;//输出编号
int f(char at,char bt)
{
if(atbt)//匹配
{
a.pop();
b.pop();
return 1;
}
else if(at'E')
{
if(bt'i'||bt'(')
{
cout<<num++<<" "<<"E->TG"<<endl;
a.pop();
a.push('G');
a.push('T');
return 1;
}
else
{
return 0;
}
}
else if(at'G')
{
if(bt'+')
{
cout<<num++<<" "<<"G->+TG"<<endl;
a.pop();
a.push('G');
a.push('T');
a.push('+');
return 1;
}
else if(bt')'||bt'#')
{
cout<<num++<<" "<<"G->^"<<endl;
a.pop();
return 1;
}
else
{
return 0;
}
}
else if(at'T')
{
if(bt'i'||bt'(')
{
cout<<num++<<" "<<"T->FS"<<endl;
a.pop();
a.push('S');
a.push('F');
return 1;
}
else
{
return 0;
}
}
else if(at'S')
{
if(bt'+'||bt')'||bt'#')
{
cout<<num++<<" "<<"S->^"<<endl;
a.pop();
return 1;
}
else if(bt'')
{
cout<<num++<<" "<<"S->FS"<<endl;
a.pop();
a.push('S');
a.push('F');
a.push('*');
return 1;
}
else
{
return 0;
}
}
else if(at'F')
{
if(bt'i')
{
cout<<num++<<" "<<"F->i"<<endl;
a.pop();
a.push('i');
return 1;
}
else if(bt=='(')
{
cout<<num++<<" "<<"F->(E)"<<endl;
a.pop();
a.push(')');
a.push('E');
a.push('(');
return 1;
}
else
{
return 0;
}
}
}
int main()
{
string s;
cin>>s;
int len=s.length();
for(int i=len-1;i>=0;i--)
{
b.push(s[i]);
}
a.push('#');
a.push('E');
while(1)
{
if(a.top()'#'&&b.top()'#')
{
cout<<"acc!"<<endl;
return 0;
}
else
{
int z=f(a.top(),b.top());
if(z==0)
{
cout<<"error!"<<endl;
return 0;
}
}
}
return 0;
}

浙公网安备 33010602011771号