%{
#include <stdio.h>
#include <string.h>
// Define an array of C reserved words
char *keywords[] = {
"auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum",
"extern", "float", "for", "goto", "if", "inline", "int", "long", "register", "restrict", "return",
"short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void",
"volatile", "while"
};
#define NUM_KEYWORDS 32
// Function to check if a word
is a keyword
int is_keyword(char *word) {
for (int i = 0; i < NUM_KEYWORDS; i++) {
if (strcmp(word, keywords[i]) == 0) {
return 1; // It's a keyword
}
}
return 0; // It's not a keyword
}
%}
%%
[ \t\n]+ ; // Ignore spaces, tabs, and newlines
"int"|"float"|"char"|"void"|"long"|"short"|"double"|"return"|"if"|"else"|"for"|"while"|"do"|"break"|"continue" {
printf("Keyword: %s\n", yytext); // Print matched keywords
}
[A-Za-z_][A-Za-z0-9_]* {
if (is_keyword(yytext)) {
printf("Keyword: %s\n", yytext); // If it's a reserved word
} else {
printf("Identifier: %s\n", yytext); // If it's an identifier
}
}
. { ECHO; } // Print unmatched characters
%%
int main() {
printf("Enter C code:\n");
yylex(); // Start the lexical analysis
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KLy8gRGVmaW5lIGFuIGFycmF5IG9mIEMgcmVzZXJ2ZWQgd29yZHMKY2hhciAqa2V5d29yZHNbXSA9IHsKICAgICJhdXRvIiwgImJyZWFrIiwgImNhc2UiLCAiY2hhciIsICJjb25zdCIsICJjb250aW51ZSIsICJkZWZhdWx0IiwgImRvIiwgImRvdWJsZSIsICJlbHNlIiwgImVudW0iLCAKICAgICJleHRlcm4iLCAiZmxvYXQiLCAiZm9yIiwgImdvdG8iLCAiaWYiLCAiaW5saW5lIiwgImludCIsICJsb25nIiwgInJlZ2lzdGVyIiwgInJlc3RyaWN0IiwgInJldHVybiIsIAogICAgInNob3J0IiwgInNpZ25lZCIsICJzaXplb2YiLCAic3RhdGljIiwgInN0cnVjdCIsICJzd2l0Y2giLCAidHlwZWRlZiIsICJ1bmlvbiIsICJ1bnNpZ25lZCIsICJ2b2lkIiwgCiAgICAidm9sYXRpbGUiLCAid2hpbGUiCn07CiNkZWZpbmUgTlVNX0tFWVdPUkRTIDMyCi8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgd29yZCBpcyBhIGtleXdvcmQKaW50IGlzX2tleXdvcmQoY2hhciAqd29yZCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fS0VZV09SRFM7IGkrKykgewogICAgICAgIGlmIChzdHJjbXAod29yZCwga2V5d29yZHNbaV0pID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIDE7IC8vIEl0J3MgYSBrZXl3b3JkCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7IC8vIEl0J3Mgbm90IGEga2V5d29yZAp9CiV9CiUlClsgXHRcbl0rICAgICAgICAgICAgICAgICAgICA7IC8vIElnbm9yZSBzcGFjZXMsIHRhYnMsIGFuZCBuZXdsaW5lcwoiaW50InwiZmxvYXQifCJjaGFyInwidm9pZCJ8ImxvbmcifCJzaG9ydCJ8ImRvdWJsZSJ8InJldHVybiJ8ImlmInwiZWxzZSJ8ImZvciJ8IndoaWxlInwiZG8ifCJicmVhayJ8ImNvbnRpbnVlIiB7CiAgICBwcmludGYoIktleXdvcmQ6ICVzXG4iLCB5eXRleHQpOyAvLyBQcmludCBtYXRjaGVkIGtleXdvcmRzCn0KW0EtWmEtel9dW0EtWmEtejAtOV9dKiB7CiAgICBpZiAoaXNfa2V5d29yZCh5eXRleHQpKSB7CiAgICAgICAgcHJpbnRmKCJLZXl3b3JkOiAlc1xuIiwgeXl0ZXh0KTsgLy8gSWYgaXQncyBhIHJlc2VydmVkIHdvcmQKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJJZGVudGlmaWVyOiAlc1xuIiwgeXl0ZXh0KTsgLy8gSWYgaXQncyBhbiBpZGVudGlmaWVyCiAgICB9Cn0KLiB7IEVDSE87IH0gLy8gUHJpbnQgdW5tYXRjaGVkIGNoYXJhY3RlcnMKJSUKaW50IG1haW4oKSB7CiAgICBwcmludGYoIkVudGVyIEMgY29kZTpcbiIpOwogICAgeXlsZXgoKTsgLy8gU3RhcnQgdGhlIGxleGljYWwgYW5hbHlzaXMKICAgIHJldHVybiAwOwp9Cg==