%{
int COMMENT=0;
%}
identifier [a-zA-Z_][a-zA-Z0-9_]*
keyword int
|float|char
|double
|while
|for
|struct
|typedef
|do
|if
|break
|continue
|void
|switch
|return
|else
|goto
%%
#.* {printf("\n%s is a preprocessor directive",yytext);}
{keyword} {printf("\n%s is a keyword",yytext);}
"/*" {COMMENT=1; printf("\n\t%s is a COMMENT",yytext);}
"*/" {COMMENT=0; printf("\n\t%s is a COMMENT",yytext);}
{identifier}\( {if(!COMMENT) printf("\nFUNCTION \n\t%s",yytext);}
\{ {if(!COMMENT) printf("\nBLOCK BEGINS");}
\} {if(!COMMENT) printf("BLOCK ENDS ");}
{identifier}(\[[0-9]*\])? {if(!COMMENT) printf("\n%s IDENTIFIER",yytext);}
\".*\" {if(!COMMENT) printf("\n\t%s is a STRING",yytext);}
[0-9]+ {if(!COMMENT) printf("\n%s is a NUMBER",yytext);}
= {if(!COMMENT) printf("\n\t%s is an ASSIGNMENT OPERATOR",yytext);}
\<=|\>=|==|<|> {if(!COMMENT) printf("\n\t%s is a RELATIONAL OPERATOR",yytext);}
\( {ECHO;}
\) {ECHO; printf("\n");}
. {if(!COMMENT) ECHO;}
%%
int main() {
FILE
*file
=fopen
("
var.c"
,"r"
); if
(!file
){printf
("could not
open file"
); exit
(0);} yyin=file;
yylex();
return 0;
}
int yywrap(){return 1;}
JXsKaW50IENPTU1FTlQ9MDsKJX0KCmlkZW50aWZpZXIgW2EtekEtWl9dW2EtekEtWjAtOV9dKgprZXl3b3JkIGludHxmbG9hdHxjaGFyfGRvdWJsZXx3aGlsZXxmb3J8c3RydWN0fHR5cGVkZWZ8ZG98aWZ8YnJlYWt8Y29udGludWV8dm9pZHxzd2l0Y2h8cmV0dXJufGVsc2V8Z290bwoKJSUKIy4qICAgICAgICAgICAgICAgICAgICAge3ByaW50ZigiXG4lcyBpcyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUiLHl5dGV4dCk7fQp7a2V5d29yZH0gICAgICAgICAgICAgICB7cHJpbnRmKCJcbiVzIGlzIGEga2V5d29yZCIseXl0ZXh0KTt9CiIvKiIgICAgICAgICAgICAgICAgICAgIHtDT01NRU5UPTE7IHByaW50ZigiXG5cdCVzIGlzIGEgQ09NTUVOVCIseXl0ZXh0KTt9CiIqLyIgICAgICAgICAgICAgICAgICAgIHtDT01NRU5UPTA7IHByaW50ZigiXG5cdCVzIGlzIGEgQ09NTUVOVCIseXl0ZXh0KTt9CntpZGVudGlmaWVyfVwoICAgICAgICAgICB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG5GVU5DVElPTiBcblx0JXMiLHl5dGV4dCk7fQpceyAgICAgICAgICAgICAgICAgICAgICB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG5CTE9DSyBCRUdJTlMiKTt9Clx9ICAgICAgICAgICAgICAgICAgICAgIHtpZighQ09NTUVOVCkgcHJpbnRmKCJCTE9DSyBFTkRTICIpO30Ke2lkZW50aWZpZXJ9KFxbWzAtOV0qXF0pPyB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG4lcyBJREVOVElGSUVSIix5eXRleHQpO30KXCIuKlwiICAgICAgICAgICAgICAgICAge2lmKCFDT01NRU5UKSBwcmludGYoIlxuXHQlcyBpcyBhIFNUUklORyIseXl0ZXh0KTt9ClswLTldKyAgICAgICAgICAgICAgICAgIHtpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIGlzIGEgTlVNQkVSIix5eXRleHQpO30KPSAgICAgICAgICAgICAgICAgICAgICAge2lmKCFDT01NRU5UKSBwcmludGYoIlxuXHQlcyBpcyBhbiBBU1NJR05NRU5UIE9QRVJBVE9SIix5eXRleHQpO30KXDw9fFw+PXw9PXw8fD4gICAgICAgICAge2lmKCFDT01NRU5UKSBwcmludGYoIlxuXHQlcyBpcyBhIFJFTEFUSU9OQUwgT1BFUkFUT1IiLHl5dGV4dCk7fQpcKCAgICAgICAgICAgICAgICAgICAgICAge0VDSE87fQpcKSAgICAgICAgICAgICAgICAgICAgICAge0VDSE87IHByaW50ZigiXG4iKTt9Ci4gICAgICAgICAgICAgICAgICAgICAgICB7aWYoIUNPTU1FTlQpIEVDSE87fQolJQoKaW50IG1haW4oKSB7CiAgICBGSUxFICpmaWxlPWZvcGVuKCJ2YXIuYyIsInIiKTsKICAgIGlmKCFmaWxlKXtwcmludGYoImNvdWxkIG5vdCBvcGVuIGZpbGUiKTsgZXhpdCgwKTt9CiAgICB5eWluPWZpbGU7CiAgICB5eWxleCgpOwogICAgcmV0dXJuIDA7Cn0KaW50IHl5d3JhcCgpe3JldHVybiAxO30=