EBNF中
[]中的內容表示可以出現一次或0次
{}中的內容表示可以出現多次或0次
非終結符要放在單引號中
#include<iostream>
using namespace std;
#define maxn 101
char s[maxn];
int cnt,flag;
void A();
void B();
void C();
void A()


{
if(s[cnt]=='x')
cnt++;
else if(s[cnt]=='(')

{
cnt++;
B();
if(s[cnt]==')')
cnt++;
else flag=1;
}
else flag=1;
}
void C()


{
if(s[cnt]=='+')

{
cnt++;
A();
C();
}
else if(s[cnt]!='\0'&&s[cnt]!=')')
flag=1;
}
void B()


{
A();
C();
}
int main()


{
int t;
scanf("%d",&t);
getchar();
while(t--)

{
gets(s);
cnt=flag=0;
A();
if(flag==1||(s[cnt]!='\0')) printf("Bad\n");
else printf("Good\n");
}
return 0;
}
[]中的內容表示可以出現一次或0次
{}中的內容表示可以出現多次或0次
非終結符要放在單引號中
EOJ 2574 Principles of Compiler
#include<iostream>
using namespace std;
#define maxn 101
char s[maxn];
int cnt,flag;
void A();
void B();
void C();
void A()

{
if(s[cnt]=='x')
cnt++;
else if(s[cnt]=='(')
{
cnt++;
B();
if(s[cnt]==')')
cnt++;
else flag=1;
}
else flag=1;
}
void C()

{
if(s[cnt]=='+')
{
cnt++;
A();
C();
}
else if(s[cnt]!='\0'&&s[cnt]!=')')
flag=1;
}
void B()

{
A();
C();
}
int main()

{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(s);
cnt=flag=0;
A();
if(flag==1||(s[cnt]!='\0')) printf("Bad\n");
else printf("Good\n");
}
return 0;
}

