实验内容
本分析程序所分析的文法如下:
G[E]:
E→eBaA
A→a|bAcB
B→dEd|aC
C→e|dC
要求输入一个语句,判断这个语句是不是属于这个文法的。如果是则输出“Right”,如果不是,则输出“Error”。
实验代码如下:
#include <bits/stdc++.h>
#define LEN 100
using namespace std;
int i;
void E();
void A();
void B();
void C();
bool flag=true;
char str[LEN];
int main()
{
while(cin>>str)
{
i=0;
E();
if(flag)
{
cout<<"Right\n";
}
else
{
cout<<"Error\n";
}
continue;
}
return 0;
}
void E()
{
if(str[i]=='e')
{
i++;
B();
if(str[i]=='a')
{
i++;
A();
flag=true;
}
}
else{i++;flag=false;}
}
void A()
{
if(str[i]=='a') i++;
else if(str[i]=='b')
{
i++;
A();
if(str[i]=='c')
{
i++;
B();
}
}
else{i++;flag=false;}
}
void B()
{
if(str[i]=='d')
{
i++;
E();
if(str[i]=='d') i++;
else{i++;flag=false;}
}
else if(str[i]=='a')
{
i++;
C();
}
else{i++;flag=false;}
}
void C()
{
if(str[i]=='e') i++;
else if(str[i]=='d')
{
i++;
C();
}
else{i++;flag=false;}
}
实验结果如下:
测试输入:
eadeaa
edeaebd
edeaeaadabacae
测试输出:
Right
Error
Right