%{
#include <stdio.h>
#include <string.h>
// Define a list of keywords
char *keywords[] = {"if", "else", "while", "return"};
int is_keyword(char *str) {
for (int i = 0; i < sizeof(keywords)/sizeof(keywords[0]); i++) {
if (strcmp(str, keywords[i]) == 0) return 1;
}
return 0;
}
%}
%%
[0-9]+ { printf
("
NUMBER: %s\n", yytext); }
[a-zA-Z_][a-zA-Z0-9_]* {
if (is_keyword(yytext))
printf("KEYWORD: %s\n", yytext);
else
printf("IDENTIFIER: %s\n", yytext);
}
[ \t\n]+ ; // Ignore whitespace
. { printf("UNKNOWN: %s\n", yytext); }
%%
int main() {
yylex();
return 0;
}
int yywrap() {
return 1;
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCi8vIERlZmluZSBhIGxpc3Qgb2Yga2V5d29yZHMKY2hhciAqa2V5d29yZHNbXSA9IHsiaWYiLCAiZWxzZSIsICJ3aGlsZSIsICJyZXR1cm4ifTsKaW50IGlzX2tleXdvcmQoY2hhciAqc3RyKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihrZXl3b3Jkcykvc2l6ZW9mKGtleXdvcmRzWzBdKTsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmNtcChzdHIsIGtleXdvcmRzW2ldKSA9PSAwKSByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CiV9CgolJQoKWzAtOV0rICAgICAgICAgICAgICB7IHByaW50ZigiTlVNQkVSOiAlc1xuIiwgeXl0ZXh0KTsgfQoKW2EtekEtWl9dW2EtekEtWjAtOV9dKiB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfa2V5d29yZCh5eXRleHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiS0VZV09SRDogJXNcbiIsIHl5dGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJJREVOVElGSUVSOiAlc1xuIiwgeXl0ZXh0KTsKICAgICAgICAgICAgICAgICAgICB9CgpbIFx0XG5dKyAgICAgICAgICAgIDsgLy8gSWdub3JlIHdoaXRlc3BhY2UKCi4gICAgICAgICAgICAgICAgICAgeyBwcmludGYoIlVOS05PV046ICVzXG4iLCB5eXRleHQpOyB9CgolJQoKaW50IG1haW4oKSB7CiAgICB5eWxleCgpOwogICAgcmV0dXJuIDA7Cn0KCmludCB5eXdyYXAoKSB7CiAgICByZXR1cm4gMTsK