%{
#include <stdio.h>
#include <string.h>
// List of C keywords
char *keywords[] = {
"auto", "break", "case", "char", "const", "continue", "default", "do",
"double", "else", "enum", "extern", "float", "for", "goto", "if",
"int", "long", "register", "return", "short", "signed", "sizeof",
"static", "struct", "switch", "typedef", "union", "unsigned",
"void", "volatile", "while"
};
int is_keyword(char *word) {
int i;
for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); i++) {
if (strcmp(word, keywords[i]) == 0)
return 1;
}
return 0;
}
%}
%%
[a-zA-Z_][a-zA-Z0-9_]* {
if (is_keyword(yytext))
printf("Keyword: %s\n", yytext);
else
printf("Identifier: %s\n", yytext);
}
[0-9]+\.[0-9]+ {
printf
("Constant
(float): %s\n", yytext); }
[0-9]+ {
printf("Constant: %s\n", yytext);
}
"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--" {
printf("Operator: %s\n", yytext);
}
[+\-*/%=<>&|^~!] {
printf("Operator: %s\n", yytext);
}
[(){}\[\],;:.?] {
printf("Special Character: %s\n", yytext);
}
[ \t\n]+ ; // Ignore whitespace
. {
printf("Unknown: %s\n", yytext);
}
%%
int main(int argc, char **argv) {
yylex();
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KLy8gTGlzdCBvZiBDIGtleXdvcmRzCmNoYXIgKmtleXdvcmRzW10gPSB7CiJhdXRvIiwgImJyZWFrIiwgImNhc2UiLCAiY2hhciIsICJjb25zdCIsICJjb250aW51ZSIsICJkZWZhdWx0IiwgImRvIiwKImRvdWJsZSIsICJlbHNlIiwgImVudW0iLCAiZXh0ZXJuIiwgImZsb2F0IiwgImZvciIsICJnb3RvIiwgImlmIiwKImludCIsICJsb25nIiwgInJlZ2lzdGVyIiwgInJldHVybiIsICJzaG9ydCIsICJzaWduZWQiLCAic2l6ZW9mIiwKInN0YXRpYyIsICJzdHJ1Y3QiLCAic3dpdGNoIiwgInR5cGVkZWYiLCAidW5pb24iLCAidW5zaWduZWQiLAoidm9pZCIsICJ2b2xhdGlsZSIsICJ3aGlsZSIKfTsKaW50IGlzX2tleXdvcmQoY2hhciAqd29yZCkgewppbnQgaTsKZm9yIChpID0gMDsgaSA8IHNpemVvZihrZXl3b3Jkcykvc2l6ZW9mKGtleXdvcmRzWzBdKTsgaSsrKSB7CmlmIChzdHJjbXAod29yZCwga2V5d29yZHNbaV0pID09IDApCnJldHVybiAxOwp9CnJldHVybiAwOwp9CiV9CiUlClthLXpBLVpfXVthLXpBLVowLTlfXSogewppZiAoaXNfa2V5d29yZCh5eXRleHQpKQpwcmludGYoIktleXdvcmQ6ICVzXG4iLCB5eXRleHQpOwplbHNlCnByaW50ZigiSWRlbnRpZmllcjogJXNcbiIsIHl5dGV4dCk7Cn0KWzAtOV0rXC5bMC05XSsgeyAKcHJpbnRmKCJDb25zdGFudCAoZmxvYXQpOiAlc1xuIiwgeXl0ZXh0KTsgCn0KIFswLTldKyB7CiBwcmludGYoIkNvbnN0YW50OiAlc1xuIiwgeXl0ZXh0KTsgCn0KCiI9PSJ8IiE9InwiPD0ifCI+PSJ8IiYmInwifHwifCIrKyJ8Ii0tIiB7IApwcmludGYoIk9wZXJhdG9yOiAlc1xuIiwgeXl0ZXh0KTsgCn0KIFsrXC0qLyU9PD4mfF5+IV0gewogcHJpbnRmKCJPcGVyYXRvcjogJXNcbiIsIHl5dGV4dCk7Cn0KClsoKXt9XFtcXSw7Oi4/XSB7IApwcmludGYoIlNwZWNpYWwgQ2hhcmFjdGVyOiAlc1xuIiwgeXl0ZXh0KTsgCn0KWyBcdFxuXSsgOyAvLyBJZ25vcmUgd2hpdGVzcGFjZQouIHsKcHJpbnRmKCJVbmtub3duOiAlc1xuIiwgeXl0ZXh0KTsKfQolJQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKeXlsZXgoKTsKcmV0dXJuIDA7Cn0KaW50IHl5d3JhcCgpIHsKcmV0dXJuIDE7Cn0K