EBNF表示法

EBNF表示法
EBNF中
[]中的内容表示可以出现一次或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;
}

你可能感兴趣的:(EBNF表示法)