现在的位置: 首页 > 综合 > 正文

poj1126 Simply Syntax

2013年08月13日 ⁄ 综合 ⁄ 共 526字 ⁄ 字号 评论关闭

        好像编译原理里边东西的简化版,只有一个产生式S->CSS|DSS|ESS|ISS|NS|p-z(CDEIN都是终结符),一个不是很麻烦的递归.......

#include <stdio.h>
#include <string.h>

char str[257];

char* legal(char* str){//str开头的字符串是否合法,如果合法,返回合法语句的下一个位置
	char c=str[0];
	if(c>='p'&&c<='z'){
		return str+1;
	}
	char* s1;
	char* s2;
	if(c=='N'){
		s1=legal(str+1);
		return s1;
	}
	if(c=='C'||c=='D'||c=='E'||c=='I'){
		s1=legal(str+1);
		if(s1){
			s2=legal(s1);
			return s2;
		}
		return NULL;
	}
	return NULL;
}

int main(void){
	int len;
	while(scanf("%s",str)!=EOF){
		len=strlen(str);
		if(str+len==legal(str)){
			printf("YES\n");
		}else{
			printf("NO\n");
		}
	}
	return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.