%{
#include <stdio.h>
#include <string.h>
int is_keyword(char *str); // Function to check keywords
%}
%%
[a-zA-Z_][a-zA-Z0-9_]* {
if (is_keyword(yytext))
printf("\"%s\" is a keyword, not a valid identifier.\n", yytext);
else
printf("\"%s\" is a valid identifier.\n", yytext);
}
[^a-zA-Z0-9_] {
printf("\"%s\" is not a valid identifier.\n", yytext);
}
%%
int is_keyword(char *str) {
// List of some common C keywords
char *keywords[] = {"int", "return", "void", "if", "else", "while", "for", "char", "float", "double", "switch", "case", "break", "continue", "struct", "typedef", "static", "const", "goto", NULL};
for (int i = 0; keywords[i] != NULL; i++) {
if (strcmp(str, keywords[i]) == 0)
return 1;
}
return 0;
}
int main() {
printf("Enter an identifier: ");
yylex();
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBpc19rZXl3b3JkKGNoYXIgKnN0cik7IC8vIEZ1bmN0aW9uIHRvIGNoZWNrIGtleXdvcmRzCiV9CgolJQoKW2EtekEtWl9dW2EtekEtWjAtOV9dKiB7CiAgICBpZiAoaXNfa2V5d29yZCh5eXRleHQpKQogICAgICAgIHByaW50ZigiXCIlc1wiIGlzIGEga2V5d29yZCwgbm90IGEgdmFsaWQgaWRlbnRpZmllci5cbiIsIHl5dGV4dCk7CiAgICBlbHNlCiAgICAgICAgcHJpbnRmKCJcIiVzXCIgaXMgYSB2YWxpZCBpZGVudGlmaWVyLlxuIiwgeXl0ZXh0KTsKfQoKW15hLXpBLVowLTlfXSB7CiAgICBwcmludGYoIlwiJXNcIiBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyLlxuIiwgeXl0ZXh0KTsKfQoKJSUKCmludCBpc19rZXl3b3JkKGNoYXIgKnN0cikgewogICAgLy8gTGlzdCBvZiBzb21lIGNvbW1vbiBDIGtleXdvcmRzCiAgICBjaGFyICprZXl3b3Jkc1tdID0geyJpbnQiLCAicmV0dXJuIiwgInZvaWQiLCAiaWYiLCAiZWxzZSIsICJ3aGlsZSIsICJmb3IiLCAiY2hhciIsICJmbG9hdCIsICJkb3VibGUiLCAic3dpdGNoIiwgImNhc2UiLCAiYnJlYWsiLCAiY29udGludWUiLCAic3RydWN0IiwgInR5cGVkZWYiLCAic3RhdGljIiwgImNvbnN0IiwgImdvdG8iLCBOVUxMfTsKCiAgICBmb3IgKGludCBpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmNtcChzdHIsIGtleXdvcmRzW2ldKSA9PSAwKQogICAgICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiRW50ZXIgYW4gaWRlbnRpZmllcjogIik7CiAgICB5eWxleCgpOwogICAgcmV0dXJuIDA7Cn0K