#include<iostream>
#include<string>
using namespace std;
string m;
int ok;
void wenfa(int left,int right,char start)
{
switch(start){
case'E':{
int bracnt=0;
bool binope=false;
for(int i=right-1;i>=left;--i)
{
if(m[i]=='(') bracnt++;
if(m[i]==')') bracnt--;
if(!bracnt)
{
if(m[i]=='+'||m[i]=='-')
{
binope=true;
cout<<"ok"<<ok<<":";
cout<<start<<"->"<<start<<m[i]<<'T'<<endl;
ok++;
wenfa(left,i,'E');
wenfa(i+1,right,'T');
break;
}
}
}
if(!binope)
{
cout<<"ok"<<ok<<":";
cout<<start<<"->"<<'T'<<endl;
ok++;
wenfa(left,right,'T');
}
break;
}
case 'T':{
int bracnt=0;
bool binope=false;
for(int i=right-1;i>=left;--i)
{
if(m[i]=='(') bracnt++;
if(m[i]==')') bracnt--;
if(!bracnt)
{
if(m[i]=='*'||m[i]=='/')
{
binope=true;
cout<<"ok"<<ok<<":";
cout<<start<<"->"<<start<<m[i]<<'F'<<endl;
ok++;
wenfa(left,i,'T');
wenfa(i+1,right,'F');
break;
}
}
}
if(!binope)
{
cout<<"ok"<<ok<<":";
cout<<start<<"->"<<'F'<<endl;
ok++;
wenfa(left,right,'F');
}
break;
}
case 'F':{
if(m[left]=='(')
{
cout<<"ok"<<ok<<":";
cout<<start<<"->"<<"(E)"<<endl;
ok++;
wenfa(left+1,right,'E');
}
else
{
cout<<"ok"<<ok<<":";
cout<<start<<"->"<<"i"<<endl;
ok++;
}
break;
}
default:break;
}
}
int main(){
getline(cin,m);
wenfa(0,m.size(),'E');
cout<<m<<endl;
return 0;
}
DSADSA
最新推荐文章于 2024-07-14 15:36:20 发布