%{
#include <stdio.h>
int num_tokens = 0;
%}
DIGIT [0-9]
LETTER [a-zA-Z]
ID {LETTER}({LETTER}|{DIGIT})*
WS [ \t\n]+
%%
"if"|"else"|"while"|"int"|"float"|"return" {
printf("TOKEN: KEYWORD -> %s\n", yytext);
num_tokens++;
}
{ID} {
printf("TOKEN: IDENTIFIER -> %s\n", yytext);
num_tokens++;
}
printf
("TOKEN
: NUMBER -> %s\n", yytext); num_tokens++;
}
"+"|"-"|"*"|"/"|"="|"=="|"!="|"<"|">" {
printf("TOKEN: OPERATOR -> %s\n", yytext);
num_tokens++;
}
"{"|"}"|"("|")"|";" {
printf("TOKEN: PUNCTUATION -> %s\n", yytext);
num_tokens++;
}
{WS} { /* skip whitespace */ }
. {
printf("TOKEN: UNRECOGNIZED -> %s\n", yytext);
}
%%
int main() {
printf("Enter source code (Ctrl+D to end):\n");
yylex();
printf("\nTotal tokens found: %d\n", num_tokens);
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCBudW1fdG9rZW5zID0gMDsKJX0KCkRJR0lUICAgWzAtOV0KTEVUVEVSICBbYS16QS1aXQpJRCAgICAgIHtMRVRURVJ9KHtMRVRURVJ9fHtESUdJVH0pKgpOVU1CRVIgIHtESUdJVH0rKFwue0RJR0lUfSspPwpXUyAgICAgIFsgXHRcbl0rCgolJQoKImlmInwiZWxzZSJ8IndoaWxlInwiaW50InwiZmxvYXQifCJyZXR1cm4iIHsKICAgIHByaW50ZigiVE9LRU46IEtFWVdPUkQgLT4gJXNcbiIsIHl5dGV4dCk7CiAgICBudW1fdG9rZW5zKys7Cn0KCntJRH0gewogICAgcHJpbnRmKCJUT0tFTjogSURFTlRJRklFUiAtPiAlc1xuIiwgeXl0ZXh0KTsKICAgIG51bV90b2tlbnMrKzsKfQoKe05VTUJFUn0gewogICAgcHJpbnRmKCJUT0tFTjogTlVNQkVSIC0+ICVzXG4iLCB5eXRleHQpOwogICAgbnVtX3Rva2VucysrOwp9CgoiKyJ8Ii0ifCIqInwiLyJ8Ij0ifCI9PSJ8IiE9InwiPCJ8Ij4iIHsKICAgIHByaW50ZigiVE9LRU46IE9QRVJBVE9SIC0+ICVzXG4iLCB5eXRleHQpOwogICAgbnVtX3Rva2VucysrOwp9CgoieyJ8In0ifCIoInwiKSJ8IjsiIHsKICAgIHByaW50ZigiVE9LRU46IFBVTkNUVUFUSU9OIC0+ICVzXG4iLCB5eXRleHQpOwogICAgbnVtX3Rva2VucysrOwp9Cgp7V1N9ICAgICB7IC8qIHNraXAgd2hpdGVzcGFjZSAqLyB9CgouIHsKICAgIHByaW50ZigiVE9LRU46IFVOUkVDT0dOSVpFRCAtPiAlc1xuIiwgeXl0ZXh0KTsKfQoKJSUKCmludCBtYWluKCkgewogICAgcHJpbnRmKCJFbnRlciBzb3VyY2UgY29kZSAoQ3RybCtEIHRvIGVuZCk6XG4iKTsKICAgIHl5bGV4KCk7CiAgICBwcmludGYoIlxuVG90YWwgdG9rZW5zIGZvdW5kOiAlZFxuIiwgbnVtX3Rva2Vucyk7CiAgICByZXR1cm4gMDsKfQoKaW50IHl5d3JhcCgpIHsKICAgIHJldHVybiAxOwp9Cg==