%{
#include <stdio.h>
int yylex(void);
void yyerror(const char *s);
%}
%token A B C
%%
S : A S B
| B S A
| C
;
%%
int yylex()
{
int ch;
ch = getchar();
if (ch == 'a')
return A;
if (ch == 'b')
return B;
if (ch == 'c')
return C;
return 0;
}
void yyerror(const char *s)
{
printf("Invalid string\n");
}
int main()
{
printf("Enter string: ");
if (yyparse() == 0)
printf("Valid string\n");
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgeXlsZXgodm9pZCk7CnZvaWQgeXllcnJvcihjb25zdCBjaGFyICpzKTsKJX0KCiV0b2tlbiBBIEIgQwoKJSUKClMgOiBBIFMgQgogIHwgQiBTIEEKICB8IEMKICA7CgolJQoKaW50IHl5bGV4KCkKewogICAgaW50IGNoOwoKICAgIGNoID0gZ2V0Y2hhcigpOwoKICAgIGlmIChjaCA9PSAnYScpCiAgICAgICAgcmV0dXJuIEE7CiAgICBpZiAoY2ggPT0gJ2InKQogICAgICAgIHJldHVybiBCOwogICAgaWYgKGNoID09ICdjJykKICAgICAgICByZXR1cm4gQzsKCiAgICByZXR1cm4gMDsKfQoKdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKnMpCnsKICAgIHByaW50ZigiSW52YWxpZCBzdHJpbmdcbiIpOwp9CgppbnQgbWFpbigpCnsKICAgIHByaW50ZigiRW50ZXIgc3RyaW5nOiAiKTsKCiAgICBpZiAoeXlwYXJzZSgpID09IDApCiAgICAgICAgcHJpbnRmKCJWYWxpZCBzdHJpbmdcbiIpOwoKICAgIHJldHVybiAwOwp9Cg==