%{
#include <stdio.h>
#include <stdlib.h>
int COMMENT = 0;
%}
identifier [a-zA-Z_][a-zA-Z0-9_]*
%%
"#".* { printf("\n%s : Preprocessor Directive", yytext); }
"int"|"float"|"char"|"double"|"while"|"for"|"struct"|"typedef"|
"do"|"if"|"break"|"continue"|"void"|"switch"|"return"|
"else"|"goto" { printf("\n%s : Keyword", yytext); }
"/*" { COMMENT = 1; printf("\nComment Start"); }
"*/" { COMMENT = 0; printf("\nComment End"); }
{identifier}"(" { if(!COMMENT) printf("\n%s : Function", yytext); }
"{" { if(!COMMENT) printf("\nBlock Begins"); }
"}" { if(!COMMENT) printf("\nBlock Ends"); }
{identifier}(
\[[0-9]*\]
)? { if(!COMMENT) printf("\n%s : Identifier", yytext); }
\".*\" { if(!COMMENT) printf("\n%s : String", yytext); }
[0-9]+ { if(!COMMENT) printf("\n%s : Number", yytext); }
"=" { if(!COMMENT) printf("\n= : Assignment Operator"); }
"<="|">="|"=="|"<"|">" { if(!COMMENT) printf("\n%s : Relational Operator", yytext); }
";" { if(!COMMENT) printf("\n; : Statement Terminator"); }
[ \t\n]+ ; /* Ignore whitespace */
. ; /* Ignore other characters */
%%
int main(void)
{
yyin
= fopen
("
var.c"
, "r"
); if (!yyin)
{
printf
("Error
: Cannot
open file\n"
); return 1;
}
yylex();
fclose(yyin);
return 0;
}
int yywrap(void)
{
return 1;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KaW50IENPTU1FTlQgPSAwOwolfQoKaWRlbnRpZmllciAgICBbYS16QS1aX11bYS16QS1aMC05X10qCgolJQoiIyIuKiAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiXG4lcyA6IFByZXByb2Nlc3NvciBEaXJlY3RpdmUiLCB5eXRleHQpOyB9CgoiaW50InwiZmxvYXQifCJjaGFyInwiZG91YmxlInwid2hpbGUifCJmb3IifCJzdHJ1Y3QifCJ0eXBlZGVmInwKImRvInwiaWYifCJicmVhayJ8ImNvbnRpbnVlInwidm9pZCJ8InN3aXRjaCJ8InJldHVybiJ8CiJlbHNlInwiZ290byIgICAgICAgICAgIHsgcHJpbnRmKCJcbiVzIDogS2V5d29yZCIsIHl5dGV4dCk7IH0KCiIvKiIgICAgICAgICAgICAgICAgICAgIHsgQ09NTUVOVCA9IDE7IHByaW50ZigiXG5Db21tZW50IFN0YXJ0Iik7IH0KIiovIiAgICAgICAgICAgICAgICAgICAgeyBDT01NRU5UID0gMDsgcHJpbnRmKCJcbkNvbW1lbnQgRW5kIik7IH0KCntpZGVudGlmaWVyfSIoIiAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG4lcyA6IEZ1bmN0aW9uIiwgeXl0ZXh0KTsgfQoKInsiICAgICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbkJsb2NrIEJlZ2lucyIpOyB9CiJ9IiAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG5CbG9jayBFbmRzIik7IH0KCntpZGVudGlmaWVyfSgKClxbWzAtOV0qXF0KCik/IHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG4lcyA6IElkZW50aWZpZXIiLCB5eXRleHQpOyB9CgpcIi4qXCIgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgOiBTdHJpbmciLCB5eXRleHQpOyB9CgpbMC05XSsgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgOiBOdW1iZXIiLCB5eXRleHQpOyB9CgoiPSIgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuPSA6IEFzc2lnbm1lbnQgT3BlcmF0b3IiKTsgfQoKIjw9InwiPj0ifCI9PSJ8IjwifCI+IiAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIDogUmVsYXRpb25hbCBPcGVyYXRvciIsIHl5dGV4dCk7IH0KCiI7IiAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG47IDogU3RhdGVtZW50IFRlcm1pbmF0b3IiKTsgfQoKWyBcdFxuXSsgICAgICAgICAgICAgICAgOyAgIC8qIElnbm9yZSB3aGl0ZXNwYWNlICovCgouICAgICAgICAgICAgICAgICAgICAgICA7ICAgLyogSWdub3JlIG90aGVyIGNoYXJhY3RlcnMgKi8KJSUKCmludCBtYWluKHZvaWQpCnsKICAgIHl5aW4gPSBmb3BlbigidmFyLmMiLCAiciIpOwogICAgaWYgKCF5eWluKQogICAgewogICAgICAgIHByaW50ZigiRXJyb3I6IENhbm5vdCBvcGVuIGZpbGVcbiIpOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgeXlsZXgoKTsKICAgIGZjbG9zZSh5eWluKTsKICAgIHJldHVybiAwOwp9CgppbnQgeXl3cmFwKHZvaWQpCnsKICAgIHJldHVybiAxOwp9Cg==