%{
#include <stdio.h>
#include <string.h>
// List of C language keywords
char *keywords[] = {
"auto", "double", "int", "struct", "break", "else", "long", "switch",
"case", "enum", "register", "typedef", "char", "extern", "return", "union",
"continue", "for", "signed", "void", "do", "if", "static", "while",
"default", "goto", "sizeof", "volatile", "const", "float", "short", "unsigned",
NULL
};
// Function to check if a token
is a keyword
int is_keyword(char *s) {
for (int i = 0; keywords[i]; i++) {
if (strcmp(s, keywords[i]) == 0)
return 1;
}
return 0;
}
%}
%%
// Match valid identifiers (starting with letter or underscore)
[a-zA-Z_][a-zA-Z0-9_]* {
if (is_keyword(yytext))
printf("Keyword: %s\n", yytext);
else
printf("Identifier: %s\n", yytext);
}
// Match integers (not valid identifiers)
[0-9]+ {
printf("Not an Identifier: %s\n", yytext);
}
// Ignore any other characters (punctuation, whitespace, etc.)
.|\n {
// do nothing (skip)
}
%%
// Required function
int yywrap() {
return 1;
}
// Main driver function
int main(void) {
yylex();
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCi8vIExpc3Qgb2YgQyBsYW5ndWFnZSBrZXl3b3JkcwpjaGFyICprZXl3b3Jkc1tdID0gewogICAgImF1dG8iLCAiZG91YmxlIiwgImludCIsICJzdHJ1Y3QiLCAiYnJlYWsiLCAiZWxzZSIsICJsb25nIiwgInN3aXRjaCIsCiAgICAiY2FzZSIsICJlbnVtIiwgInJlZ2lzdGVyIiwgInR5cGVkZWYiLCAiY2hhciIsICJleHRlcm4iLCAicmV0dXJuIiwgInVuaW9uIiwKICAgICJjb250aW51ZSIsICJmb3IiLCAic2lnbmVkIiwgInZvaWQiLCAiZG8iLCAiaWYiLCAic3RhdGljIiwgIndoaWxlIiwKICAgICJkZWZhdWx0IiwgImdvdG8iLCAic2l6ZW9mIiwgInZvbGF0aWxlIiwgImNvbnN0IiwgImZsb2F0IiwgInNob3J0IiwgInVuc2lnbmVkIiwKICAgIE5VTEwKfTsKCi8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdG9rZW4gaXMgYSBrZXl3b3JkCmludCBpc19rZXl3b3JkKGNoYXIgKnMpIHsKICAgIGZvciAoaW50IGkgPSAwOyBrZXl3b3Jkc1tpXTsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmNtcChzLCBrZXl3b3Jkc1tpXSkgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQolfQoKJSUKCi8vIE1hdGNoIHZhbGlkIGlkZW50aWZpZXJzIChzdGFydGluZyB3aXRoIGxldHRlciBvciB1bmRlcnNjb3JlKQpbYS16QS1aX11bYS16QS1aMC05X10qIHsKICAgIGlmIChpc19rZXl3b3JkKHl5dGV4dCkpCiAgICAgICAgcHJpbnRmKCJLZXl3b3JkOiAlc1xuIiwgeXl0ZXh0KTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIklkZW50aWZpZXI6ICVzXG4iLCB5eXRleHQpOwp9CgovLyBNYXRjaCBpbnRlZ2VycyAobm90IHZhbGlkIGlkZW50aWZpZXJzKQpbMC05XSsgewogICAgcHJpbnRmKCJOb3QgYW4gSWRlbnRpZmllcjogJXNcbiIsIHl5dGV4dCk7Cn0KCi8vIElnbm9yZSBhbnkgb3RoZXIgY2hhcmFjdGVycyAocHVuY3R1YXRpb24sIHdoaXRlc3BhY2UsIGV0Yy4pCi58XG4gewogICAgLy8gZG8gbm90aGluZyAoc2tpcCkKfQoKJSUKCi8vIFJlcXVpcmVkIGZ1bmN0aW9uCmludCB5eXdyYXAoKSB7CiAgICByZXR1cm4gMTsKfQoKLy8gTWFpbiBkcml2ZXIgZnVuY3Rpb24KaW50IG1haW4odm9pZCkgewogICAgeXlsZXgoKTsKICAgIHJldHVybiAwOwp9Cg==