%{
#include <stdio.h>
%}
%%
[\t .,;:()*+_\-=!?/“”] { /* Ignore spacing and punctuation */ }
100 { printf("String contains '100'\n"); }
0[01]*1 { printf("String starts with '0' and ends with '1'\n"); }
(0|1)* { if (isBinaryDivisibleBy3(yytext)) printf("Binary string divisible by 3\n"); }
a|a*b+ { printf("String contains 'a' or 'a*b+'\n"); }
. { /* Ignore other characters */ }
%%
int isBinaryDivisibleBy3(char *bin) {
int state = 0;
for (int i = 0; bin[i] != '\0'; i++) {
if (bin[i] == '0') state = state == 0 ? 0 : (state == 1 ? 2 : 1);
else if (bin[i] == '1') state = state == 0 ? 1 : (state == 1 ? 0 : 2);
}
return (state == 0);
}
int main() {
yylex();
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiV9CgolJQpbXHQgLiw7OigpKitfXC09IT8v4oCc4oCdXSAgICB7IC8qIElnbm9yZSBzcGFjaW5nIGFuZCBwdW5jdHVhdGlvbiAqLyB9CjEwMCAgICAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIlN0cmluZyBjb250YWlucyAnMTAwJ1xuIik7IH0KMFswMV0qMSAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiU3RyaW5nIHN0YXJ0cyB3aXRoICcwJyBhbmQgZW5kcyB3aXRoICcxJ1xuIik7IH0KKDB8MSkqICAgICAgICAgICAgICAgICAgICB7IGlmIChpc0JpbmFyeURpdmlzaWJsZUJ5Myh5eXRleHQpKSBwcmludGYoIkJpbmFyeSBzdHJpbmcgZGl2aXNpYmxlIGJ5IDNcbiIpOyB9CmF8YSpiKyAgICAgICAgICAgICAgICAgICAgeyBwcmludGYoIlN0cmluZyBjb250YWlucyAnYScgb3IgJ2EqYisnXG4iKTsgfQouICAgICAgICAgICAgICAgICAgICAgICAgIHsgLyogSWdub3JlIG90aGVyIGNoYXJhY3RlcnMgKi8gfQolJQoKaW50IGlzQmluYXJ5RGl2aXNpYmxlQnkzKGNoYXIgKmJpbikgewogICAgaW50IHN0YXRlID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBiaW5baV0gIT0gJ1wwJzsgaSsrKSB7CiAgICAgICAgaWYgKGJpbltpXSA9PSAnMCcpIHN0YXRlID0gc3RhdGUgPT0gMCA/IDAgOiAoc3RhdGUgPT0gMSA/IDIgOiAxKTsKICAgICAgICBlbHNlIGlmIChiaW5baV0gPT0gJzEnKSBzdGF0ZSA9IHN0YXRlID09IDAgPyAxIDogKHN0YXRlID09IDEgPyAwIDogMik7CiAgICB9CiAgICByZXR1cm4gKHN0YXRlID09IDApOwp9CgppbnQgbWFpbigpIHsKICAgIHl5bGV4KCk7CiAgICByZXR1cm4gMDsKfQo=