Problem Description
法G[S]:
S→Ap
S→Bq
A→ a
A→cA
B→ b
B→dB
编写递归下降法的语法分析程序, 判断文法G所能接受的串。
Input 输入多行由终止符构成的符号串,输入EOF结束。
Output 判断每行输入的符号串在语法结构上是否合法,如果是合法的语法结构,输出"syntax correct";否则输出:“syntax error”。
Sample Input
ccap#
ccaaap#
Sample Output
syntax correct
syntax error
C++代码实现
#include <iostream>
using namespace std;
string S;
int f(string s){
int length;
length = s.length();//获取字符串长度
int i,j;
if(s[length-1]!='#')return -1;
if(s[length-2]=='p'){
if(s[length-2-1]=='a'){
for(i=0;i<length-3;i++){
if(s[i]=='c')continue;
else return -1;
}
if(i==length-3)return 1;
}
else{
return -1;
}
}
else if(s[length-2]=='q'){
if(s[length-2-1]=='b'){
for(i=0;i<length-3;i++){
if(s[i]=='d')continue;
else return -1;
}
if(i==length-3)return 1;
}
else{
return -1;
}
}
}
int main()
{
while(cin>>S&&S!="EOF"){
if(f(S)==1)cout<<"syntax correct"<<endl;
else cout<<"syntax error"<<endl;
}
return 0;
}