%{
#include <stdio.h>
%}
%define INITIAL 0
%define SAW_A 1
%define SAW_AB 2
%define SAW_ABA 3
%%
/* Define transitions for 'a' and 'b' */
a {
if (state == INITIAL) state = SAW_A; /* Transition from q0 to q1 */
else if (state == SAW_A) state = SAW_A; /* Stay in q1 */
else if (state == SAW_AB) state = SAW_ABA; /* Transition from q2 to q3 */
}
b {
if (state == INITIAL) state = INITIAL; /* Stay in q0 */
else if (state == SAW_A) state = SAW_AB; /* Transition from q1 to q2 */
else if (state == SAW_AB) state = INITIAL;/* Transition from q2 to q0 (reset) */
else if (state == SAW_ABA) state = SAW_ABA;/* Stay in q3 */
}
. /* Ignore any other characters */
%%
/* Main function to drive the Lex program */
int main() {
int state = INITIAL; /* Start in state q0 */
yylex(); /* Invoke Lex to process the input */
if (state == SAW_ABA) {
printf("Input string contains the substring 'aba'.\n");
} else {
printf("Input string does not contain the substring 'aba'.\n");
}
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiV9CgolZGVmaW5lIElOSVRJQUwgMAolZGVmaW5lIFNBV19BICAgMQolZGVmaW5lIFNBV19BQiAgMgolZGVmaW5lIFNBV19BQkEgMwoKJSUKCi8qIERlZmluZSB0cmFuc2l0aW9ucyBmb3IgJ2EnIGFuZCAnYicgKi8KYSAgIHsKICAgICAgICBpZiAoc3RhdGUgPT0gSU5JVElBTCkgc3RhdGUgPSBTQVdfQTsgICAgICAvKiBUcmFuc2l0aW9uIGZyb20gcTAgdG8gcTEgKi8KICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBTQVdfQSkgc3RhdGUgPSBTQVdfQTsgICAgLyogU3RheSBpbiBxMSAqLwogICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFNBV19BQikgc3RhdGUgPSBTQVdfQUJBOyAvKiBUcmFuc2l0aW9uIGZyb20gcTIgdG8gcTMgKi8KICAgIH0KCmIgICB7CiAgICAgICAgaWYgKHN0YXRlID09IElOSVRJQUwpIHN0YXRlID0gSU5JVElBTDsgICAgLyogU3RheSBpbiBxMCAqLwogICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFNBV19BKSBzdGF0ZSA9IFNBV19BQjsgIC8qIFRyYW5zaXRpb24gZnJvbSBxMSB0byBxMiAqLwogICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFNBV19BQikgc3RhdGUgPSBJTklUSUFMOy8qIFRyYW5zaXRpb24gZnJvbSBxMiB0byBxMCAocmVzZXQpICovCiAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gU0FXX0FCQSkgc3RhdGUgPSBTQVdfQUJBOy8qIFN0YXkgaW4gcTMgKi8KICAgIH0KCi4gICAvKiBJZ25vcmUgYW55IG90aGVyIGNoYXJhY3RlcnMgKi8KCiUlCgovKiBNYWluIGZ1bmN0aW9uIHRvIGRyaXZlIHRoZSBMZXggcHJvZ3JhbSAqLwppbnQgbWFpbigpIHsKICAgIGludCBzdGF0ZSA9IElOSVRJQUw7ICAvKiBTdGFydCBpbiBzdGF0ZSBxMCAqLwogICAgCiAgICB5eWxleCgpOyAgLyogSW52b2tlIExleCB0byBwcm9jZXNzIHRoZSBpbnB1dCAqLwogICAgCiAgICBpZiAoc3RhdGUgPT0gU0FXX0FCQSkgewogICAgICAgIHByaW50ZigiSW5wdXQgc3RyaW5nIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgJ2FiYScuXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJJbnB1dCBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc3Vic3RyaW5nICdhYmEnLlxuIik7CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9Cg==