%{
#include <stdio.h>
#include <string.h>
// To store keywords
char *keywords[] = {"int", "float", "if", "else", "while", "return", "for", "char"};
int keyword_count = 8;
int isKeyword(char *word) {
for(int i = 0; i < keyword_count; i++) {
if(strcmp(keywords[i], word) == 0)
return 1;
}
return 0;
}
%}
%%
"int"|"float"|"if"|"else"|"while"|"return"|"for"|"char" { printf("Keyword: %s\n", yytext); }
[a-zA-Z_][a-zA-Z0-9_]* {
if(isKeyword(yytext))
printf("Keyword: %s\n", yytext);
else
printf("Identifier: %s\n", yytext);
}
[0-9]+ { printf
("
Number: %s\n", yytext); } "=="|"="|"+"|"-"|"*"|"/" { printf("Operator: %s\n", yytext); }
"(" { printf("Left Parenthesis: %s\n", yytext); }
")" { printf("Right Parenthesis: %s\n", yytext); }
"{" { printf("Left Brace: %s\n", yytext); }
"}" { printf("Right Brace: %s\n", yytext); }
";" { printf("Semicolon: %s\n", yytext); }
[ \t\n]+ { /* Ignore whitespace */ }
. { printf("Unknown token: %s\n", yytext); }
%%
int main(int argc, char **argv) {
yylex();
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCi8vIFRvIHN0b3JlIGtleXdvcmRzCmNoYXIgKmtleXdvcmRzW10gPSB7ImludCIsICJmbG9hdCIsICJpZiIsICJlbHNlIiwgIndoaWxlIiwgInJldHVybiIsICJmb3IiLCAiY2hhciJ9OwppbnQga2V5d29yZF9jb3VudCA9IDg7CgppbnQgaXNLZXl3b3JkKGNoYXIgKndvcmQpIHsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBrZXl3b3JkX2NvdW50OyBpKyspIHsKICAgICAgICBpZihzdHJjbXAoa2V5d29yZHNbaV0sIHdvcmQpID09IDApCiAgICAgICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7Cn0KJX0KCiUlCgoiaW50InwiZmxvYXQifCJpZiJ8ImVsc2UifCJ3aGlsZSJ8InJldHVybiJ8ImZvciJ8ImNoYXIiICAgeyBwcmludGYoIktleXdvcmQ6ICVzXG4iLCB5eXRleHQpOyB9ClthLXpBLVpfXVthLXpBLVowLTlfXSogICB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNLZXl3b3JkKHl5dGV4dCkpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiS2V5d29yZDogJXNcbiIsIHl5dGV4dCk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIklkZW50aWZpZXI6ICVzXG4iLCB5eXRleHQpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICB9ClswLTldKyAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiTnVtYmVyOiAlc1xuIiwgeXl0ZXh0KTsgfQoiPT0ifCI9InwiKyJ8Ii0ifCIqInwiLyIgeyBwcmludGYoIk9wZXJhdG9yOiAlc1xuIiwgeXl0ZXh0KTsgfQoiKCIgeyBwcmludGYoIkxlZnQgUGFyZW50aGVzaXM6ICVzXG4iLCB5eXRleHQpOyB9CiIpIiB7IHByaW50ZigiUmlnaHQgUGFyZW50aGVzaXM6ICVzXG4iLCB5eXRleHQpOyB9CiJ7IiB7IHByaW50ZigiTGVmdCBCcmFjZTogJXNcbiIsIHl5dGV4dCk7IH0KIn0iIHsgcHJpbnRmKCJSaWdodCBCcmFjZTogJXNcbiIsIHl5dGV4dCk7IH0KIjsiIHsgcHJpbnRmKCJTZW1pY29sb246ICVzXG4iLCB5eXRleHQpOyB9ClsgXHRcbl0rICAgICAgICAgICAgICAgICB7IC8qIElnbm9yZSB3aGl0ZXNwYWNlICovIH0KLiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbnRmKCJVbmtub3duIHRva2VuOiAlc1xuIiwgeXl0ZXh0KTsgfQoKJSUKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewogICAgeXlsZXgoKTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKCkgewogICAgcmV0dXJuIDE7Cn0KCg==