将E::=T*F|i形式的规则转化为E::=T*F 和E::=i的形式
#include<bits/stdc++.h>
using namespace std;
struct GRAM //定义一个产生式结构体
{
string left; //定义产生式的左部
string right; //定义产生式的右部
};
int main()
{
char str[7][80];
const char *ch = "|";
char *result;
vector<string> strN;
string grammer;
cin>>grammer;
for(int i=0;i<grammer.length();i++)
{
str[0][i]=grammer[i];
}
result = strtok(str[0],ch);
while(result!=NULL)
{
strN.push_back(result);
result = strtok(NULL,ch);
}
for(int i=0;grammer!="#";i++)
{
cin>>grammer;
//gets(str[i]);//注意用的是gets()可以连带空格都扫描进去
for(int h=0;h<grammer.length();h++)
{
str[i][h]=grammer[h];
}
result = strtok(str[i],ch);
while(result!=NULL)
{
strN.push_back(result);
result = strtok(NULL,ch);
}
}
cout<<"转化后的形式如下:"<<endl;
for(unsigned i=0;i<strN.size()-1&&i-1>=0;i++)
{
if(strN[i].find("::")==-1)
{
string add="";
add=add+strN[i-1][0]+"::="+strN[i];
strN[i]=add;
//cout<<add<<endl;
}
cout<<strN[i]<<endl;
}
}