%{
#include <stdio.h>
#include <string.h>
int keywords = 0, identifiers = 0, numbers = 0;
// List of C-like keywords
char *keyword_list[] = {
"int", "float", "char", "double", "if", "else",
"while", "for", "return", "void", "break", "continue", NULL
};
int is_keyword(const char *word) {
for (int i = 0; keyword_list[i] != NULL; i++) {
if (strcmp(word, keyword_list[i]) == 0)
return 1;
}
return 0;
}
%}
%%
[a-zA-Z_][a-zA-Z0-9_]* {
if (is_keyword(yytext))
keywords++;
else
identifiers++;
}
[0-9]+ { numbers++; }
[ \t\n]+ ; // Ignore whitespace
. ; // Ignore other characters
%%
int main() {
printf("Enter C-like code (press Ctrl+D to end):\n");
yylex();
printf("\n--- Token Counts ---\n");
printf("Keywords: %d\n", keywords);
printf("Identifiers: %d\n", identifiers);
printf("Numeric Constants: %d\n", numbers);
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBrZXl3b3JkcyA9IDAsIGlkZW50aWZpZXJzID0gMCwgbnVtYmVycyA9IDA7CgovLyBMaXN0IG9mIEMtbGlrZSBrZXl3b3JkcwpjaGFyICprZXl3b3JkX2xpc3RbXSA9IHsKICAgICJpbnQiLCAiZmxvYXQiLCAiY2hhciIsICJkb3VibGUiLCAiaWYiLCAiZWxzZSIsCiAgICAid2hpbGUiLCAiZm9yIiwgInJldHVybiIsICJ2b2lkIiwgImJyZWFrIiwgImNvbnRpbnVlIiwgTlVMTAp9OwoKaW50IGlzX2tleXdvcmQoY29uc3QgY2hhciAqd29yZCkgewogICAgZm9yIChpbnQgaSA9IDA7IGtleXdvcmRfbGlzdFtpXSAhPSBOVUxMOyBpKyspIHsKICAgICAgICBpZiAoc3RyY21wKHdvcmQsIGtleXdvcmRfbGlzdFtpXSkgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQolfQoKJSUKClthLXpBLVpfXVthLXpBLVowLTlfXSogICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2tleXdvcmQoeXl0ZXh0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkcysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CgpbMC05XSsgICAgICAgICAgICAgICAgICAgIHsgbnVtYmVycysrOyB9CgpbIFx0XG5dKyAgICAgICAgICAgICAgICAgIDsgIC8vIElnbm9yZSB3aGl0ZXNwYWNlCgouICAgICAgICAgICAgICAgICAgICAgICAgIDsgIC8vIElnbm9yZSBvdGhlciBjaGFyYWN0ZXJzCgolJQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoIkVudGVyIEMtbGlrZSBjb2RlIChwcmVzcyBDdHJsK0QgdG8gZW5kKTpcbiIpOwogICAgeXlsZXgoKTsKICAgIHByaW50ZigiXG4tLS0gVG9rZW4gQ291bnRzIC0tLVxuIik7CiAgICBwcmludGYoIktleXdvcmRzOiAlZFxuIiwga2V5d29yZHMpOwogICAgcHJpbnRmKCJJZGVudGlmaWVyczogJWRcbiIsIGlkZW50aWZpZXJzKTsKICAgIHByaW50ZigiTnVtZXJpYyBDb25zdGFudHM6ICVkXG4iLCBudW1iZXJzKTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKCkgewogICAgcmV0dXJuIDE7Cn0K