首页 > 代码库 > ECNU-2574 Principles of Compiler
ECNU-2574 Principles of Compiler
题意:
给出编译规则,求是否满足条件
A:= ‘(‘ B‘)‘|‘x‘.
B:=AC.
C:={‘+‘A}.
其中{}表示里面的内容可以出现0次或者多次
注意点见代码注释
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 const int maxn = 205; 5 6 int pos; 7 int len; 8 char a[ maxn ]; 9 10 bool solveA();11 bool solveB();12 bool solveC();13 14 bool solveA(){15 //printf("A:%c\n",a[pos]);16 //if( pos>=len ) return false;17 if( a[pos]==‘(‘ ){18 pos++;19 if( solveB() ){20 if( a[pos]==‘)‘ ){21 pos++;/*该字符后面可能还有字符*/22 return true;23 }24 else{25 return false;26 }27 }28 else 29 return false;30 }31 else32 if( a[pos]==‘x‘ ){33 pos++;34 return true;35 }36 else{37 pos++;/*同理,该字符后面可能还有字符*/38 return false;39 }40 }41 42 bool solveB(){43 //printf("B:%c\n",a[pos]);44 if( solveA() ){45 return solveC();46 }47 else return false;48 }49 50 51 bool solveC(){52 if( pos>=len ) return false;53 while( pos<len && a[pos]==‘+‘ ){54 pos++;55 solveA();56 }57 return true;58 }59 60 61 int main(){62 int T;63 scanf("%d",&T);64 while( T-- ){65 memset( a,‘\0‘,sizeof( a ) );66 scanf("%s",a);67 pos = 0;68 len = strlen( a );69 bool f = solveA();70 if( pos<len ) {printf("Bad\n");continue;}71 /*防止出现前半部分符合条件,后半部分不合的用例*/72 if( f ) printf("Good\n");73 else printf("Bad\n");74 }75 return 0;76 }
ECNU-2574 Principles of Compiler
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。