%{
#include <stdio.h>
#include <string.h>
int keyword_count = 0, id_count = 0, num_count = 0;
char *keywords[] = {
"int", "float", "char", "double", "while", "for", "if", "else", "return", "void"
};
int is_keyword(char *word) {
for (int i = 0; i < sizeof(keywords)/sizeof(keywords[0]); i++) {
if (strcmp(keywords[i], word) == 0)
return 1;
}
return 0;
}
%}
IDENTIFIER [a-zA-Z_][a-zA-Z0-9_]*
%%
{IDENTIFIER} {
if (is_keyword(yytext)) {
printf("Keyword: %s\n", yytext);
keyword_count++;
} else {
printf("Identifier: %s\n", yytext);
id_count++;
}
}
printf
("
Number: %s\n", yytext); num_count++;
}
[ \t\n]+ ; // Ignore whitespace
. ; // Ignore everything else
%%
int main() {
printf("Enter your C-like code (press Ctrl+D to finish input):\n\n");
yylex();
printf("\n--- Summary ---\n");
printf("Keywords: %d\n", keyword_count);
printf("Identifiers: %d\n", id_count);
printf("Numbers: %d\n", num_count);
return 0;
}
int yywrap() {
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBrZXl3b3JkX2NvdW50ID0gMCwgaWRfY291bnQgPSAwLCBudW1fY291bnQgPSAwOwoKY2hhciAqa2V5d29yZHNbXSA9IHsKICAgICJpbnQiLCAiZmxvYXQiLCAiY2hhciIsICJkb3VibGUiLCAid2hpbGUiLCAiZm9yIiwgImlmIiwgImVsc2UiLCAicmV0dXJuIiwgInZvaWQiCn07CmludCBpc19rZXl3b3JkKGNoYXIgKndvcmQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGtleXdvcmRzKS9zaXplb2Yoa2V5d29yZHNbMF0pOyBpKyspIHsKICAgICAgICBpZiAoc3RyY21wKGtleXdvcmRzW2ldLCB3b3JkKSA9PSAwKQogICAgICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CiV9CgpJREVOVElGSUVSICAgIFthLXpBLVpfXVthLXpBLVowLTlfXSoKTlVNQkVSICAgICAgICBbMC05XSsoXC5bMC05XSspPwoKJSUKCntJREVOVElGSUVSfSAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2tleXdvcmQoeXl0ZXh0KSkgewogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIktleXdvcmQ6ICVzXG4iLCB5eXRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJJZGVudGlmaWVyOiAlc1xuIiwgeXl0ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWRfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9Cgp7TlVNQkVSfSAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiTnVtYmVyOiAlc1xuIiwgeXl0ZXh0KTsKICAgICAgICAgICAgICAgICAgICBudW1fY291bnQrKzsKICAgICAgICAgICAgICAgIH0KClsgXHRcbl0rICAgICAgICA7ICAgLy8gSWdub3JlIHdoaXRlc3BhY2UKCi4gICAgICAgICAgICAgICA7ICAgLy8gSWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQoKJSUKCmludCBtYWluKCkgewogICAgcHJpbnRmKCJFbnRlciB5b3VyIEMtbGlrZSBjb2RlIChwcmVzcyBDdHJsK0QgdG8gZmluaXNoIGlucHV0KTpcblxuIik7CiAgICB5eWxleCgpOwoKICAgIHByaW50ZigiXG4tLS0gU3VtbWFyeSAtLS1cbiIpOwogICAgcHJpbnRmKCJLZXl3b3JkczogJWRcbiIsIGtleXdvcmRfY291bnQpOwogICAgcHJpbnRmKCJJZGVudGlmaWVyczogJWRcbiIsIGlkX2NvdW50KTsKICAgIHByaW50ZigiTnVtYmVyczogJWRcbiIsIG51bV9jb3VudCk7CiAgICByZXR1cm4gMDsKfQoKaW50IHl5d3JhcCgpIHsKICAgIHJldHVybiAxOwp9Cg==