题意:
给字符串s判断是否符合文法X->CXX|DXX|EXX|IXX|NX|p~z。
分析:
线性文法直接归约就好。
代码;
//poj 1126
//sep9
#include <iostream>
#include <string>
using namespace std;
char s[300];
bool solve()
{_strrev(s);int cnt=0;for(int i=0;s[i];++i){if(s[i]>='p'&&s[i]<='z')++cnt;else if(s[i]=='N'){if(cnt==0)return false;}else if(s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='I'){--cnt;if(cnt==0)return false;}elsereturn false;}return cnt==1;
}int main()
{while(scanf("%s",s)==1){if(solve())puts("YES");elseputs("NO"); }return 0;
}