%{
#include <stdio.h>
#include <string.h>
char *keywords[] = {"if", "else", "while", "return", "int", "float"};
int isKeyword(char *word);
%}
%%
[ \t\n]+ ; // Ignore whitespace
[a-zA-Z_][a-zA-Z0-9_]* {
if (isKeyword(yytext))
printf("<KEYWORD, %s>\n", yytext);
else
printf("<IDENTIFIER, %s>\n", yytext);
}
[0-9]+(\
.[0-9]+)?
{ printf
("
<NUMBER, %s>\n", yytext); }
"="|"+"|"-"|"*"|"/" { printf("<OPERATOR, %s>\n", yytext); }
. { printf("<UNKNOWN, %s>\n", yytext); }
%%
int isKeyword(char *word) {
for (int i = 0; i < sizeof(keywords)/sizeof(char*); i++) {
if (strcmp(word, keywords[i]) == 0)
return 1;
}
return 0;
}
int main() {
yylex();
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmNoYXIgKmtleXdvcmRzW10gPSB7ImlmIiwgImVsc2UiLCAid2hpbGUiLCAicmV0dXJuIiwgImludCIsICJmbG9hdCJ9OwppbnQgaXNLZXl3b3JkKGNoYXIgKndvcmQpOwolfQoKJSUKClsgXHRcbl0rICAgICAgICAgICAgICAgIDsgIC8vIElnbm9yZSB3aGl0ZXNwYWNlCgpbYS16QS1aX11bYS16QS1aMC05X10qICB7CiAgICBpZiAoaXNLZXl3b3JkKHl5dGV4dCkpCiAgICAgICAgcHJpbnRmKCI8S0VZV09SRCwgJXM+XG4iLCB5eXRleHQpOwogICAgZWxzZQogICAgICAgIHByaW50ZigiPElERU5USUZJRVIsICVzPlxuIiwgeXl0ZXh0KTsKfQoKWzAtOV0rKFwuWzAtOV0rKT8gICAgICAgeyBwcmludGYoIjxOVU1CRVIsICVzPlxuIiwgeXl0ZXh0KTsgfQoKIj0ifCIrInwiLSJ8IioifCIvIiAgICAgeyBwcmludGYoIjxPUEVSQVRPUiwgJXM+XG4iLCB5eXRleHQpOyB9CgouICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiPFVOS05PV04sICVzPlxuIiwgeXl0ZXh0KTsgfQoKJSUKCmludCBpc0tleXdvcmQoY2hhciAqd29yZCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2Yoa2V5d29yZHMpL3NpemVvZihjaGFyKik7IGkrKykgewogICAgICAgIGlmIChzdHJjbXAod29yZCwga2V5d29yZHNbaV0pID09IDApCiAgICAgICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCmludCBtYWluKCkgewogICAgeXlsZXgoKTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKCkgewogICAgcmV0dXJuIDE7Cn0K