%{
#include <stdio.h>
#include <ctype.h>
#include <string.h>
%}
%%
/* Objective 1: Extract numbers */
[0-9]+ { printf("%s\n", yytext); }
/* Objective 2: Replace 'charusat' with 'university' */
[Cc]harusat { printf("university"); }
/* Objective 3: Count characters, words, and lines */
. { char_count++; }
\n { line_count++; word_count++; }
[ \t]+ { word_count++; }
/* Objective 4: Password validation */
^[a-zA-Z0-9*;#$@]{9,15}$ {
int has_upper = 0, has_lower = 0, has_digit = 0, has_symbol = 0;
for (int i = 0; i < yyleng; i++) {
if (isupper(yytext[i])) has_upper = 1;
if (islower(yytext[i])) has_lower = 1;
if (isdigit(yytext[i])) has_digit = 1;
if (strchr("*;#$@", yytext[i])) has_symbol = 1;
}
if (has_upper && has_lower && has_digit && has_symbol) {
printf("Valid password\n");
} else {
printf("Invalid password\n");
}
}
%%
int char_count = 0, word_count = 1, line_count = 0;
int main() {
yylex();
printf("Characters: %d\n", char_count);
printf("Words: %d\n", word_count);
printf("Lines: %d\n", line_count);
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiV9CgolJQoKLyogT2JqZWN0aXZlIDE6IEV4dHJhY3QgbnVtYmVycyAqLwpbMC05XSsgICAgICB7IHByaW50ZigiJXNcbiIsIHl5dGV4dCk7IH0KCi8qIE9iamVjdGl2ZSAyOiBSZXBsYWNlICdjaGFydXNhdCcgd2l0aCAndW5pdmVyc2l0eScgKi8KW0NjXWhhcnVzYXQgIHsgcHJpbnRmKCJ1bml2ZXJzaXR5Iik7IH0KCi8qIE9iamVjdGl2ZSAzOiBDb3VudCBjaGFyYWN0ZXJzLCB3b3JkcywgYW5kIGxpbmVzICovCi4gICAgICAgICAgICB7IGNoYXJfY291bnQrKzsgfQpcbiAgICAgICAgICAgeyBsaW5lX2NvdW50Kys7IHdvcmRfY291bnQrKzsgfQpbIFx0XSsgICAgICAgeyB3b3JkX2NvdW50Kys7IH0KCi8qIE9iamVjdGl2ZSA0OiBQYXNzd29yZCB2YWxpZGF0aW9uICovCl5bYS16QS1aMC05KjsjJEBdezksMTV9JCB7CiAgICBpbnQgaGFzX3VwcGVyID0gMCwgaGFzX2xvd2VyID0gMCwgaGFzX2RpZ2l0ID0gMCwgaGFzX3N5bWJvbCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHl5bGVuZzsgaSsrKSB7CiAgICAgICAgaWYgKGlzdXBwZXIoeXl0ZXh0W2ldKSkgaGFzX3VwcGVyID0gMTsKICAgICAgICBpZiAoaXNsb3dlcih5eXRleHRbaV0pKSBoYXNfbG93ZXIgPSAxOwogICAgICAgIGlmIChpc2RpZ2l0KHl5dGV4dFtpXSkpIGhhc19kaWdpdCA9IDE7CiAgICAgICAgaWYgKHN0cmNocigiKjsjJEAiLCB5eXRleHRbaV0pKSBoYXNfc3ltYm9sID0gMTsKICAgIH0KICAgIGlmIChoYXNfdXBwZXIgJiYgaGFzX2xvd2VyICYmIGhhc19kaWdpdCAmJiBoYXNfc3ltYm9sKSB7CiAgICAgICAgcHJpbnRmKCJWYWxpZCBwYXNzd29yZFxuIik7CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiSW52YWxpZCBwYXNzd29yZFxuIik7CiAgICB9Cn0KCiUlCgppbnQgY2hhcl9jb3VudCA9IDAsIHdvcmRfY291bnQgPSAxLCBsaW5lX2NvdW50ID0gMDsKCmludCBtYWluKCkgewogICAgeXlsZXgoKTsKICAgIHByaW50ZigiQ2hhcmFjdGVyczogJWRcbiIsIGNoYXJfY291bnQpOwogICAgcHJpbnRmKCJXb3JkczogJWRcbiIsIHdvcmRfY291bnQpOwogICAgcHJpbnRmKCJMaW5lczogJWRcbiIsIGxpbmVfY291bnQpOwogICAgcmV0dXJuIDA7Cn0KCmludCB5eXdyYXAoKSB7CiAgICByZXR1cm4gMTsKfQ==