l%{
#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()
{
yyin
= fopen
("
var.c"
, "r"
); if (!yyin)
{
printf
("Error
: Cannot
open file"
); return 1;
}
yylex();
fclose(yyin);
return 0;
}
int yywrap()
{
return 1;
}
bCV7CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CmludCBDT01NRU5UID0gMDsKJX0KCmlkZW50aWZpZXIgW2EtekEtWl9dW2EtekEtWjAtOV9dKgoKJSUKIiMiLiogICAgICAgICAgICAgICAgICAgeyBwcmludGYoIlxuJXMgOiBQcmVwcm9jZXNzb3IgRGlyZWN0aXZlIiwgeXl0ZXh0KTsgfQoKImludCJ8ImZsb2F0InwiY2hhciJ8ImRvdWJsZSJ8IndoaWxlInwiZm9yInwic3RydWN0InwidHlwZWRlZiJ8CiJkbyJ8ImlmInwiYnJlYWsifCJjb250aW51ZSJ8InZvaWQifCJzd2l0Y2gifCJyZXR1cm4ifAoiZWxzZSJ8ImdvdG8iCiAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW50ZigiXG4lcyA6IEtleXdvcmQiLCB5eXRleHQpOyB9CgoiLyoiICAgICAgICAgICAgICAgICAgICB7IENPTU1FTlQgPSAxOyBwcmludGYoIlxuQ29tbWVudCBTdGFydCIpOyB9CiIqLyIgICAgICAgICAgICAgICAgICAgIHsgQ09NTUVOVCA9IDA7IHByaW50ZigiXG5Db21tZW50IEVuZCIpOyB9Cgp7aWRlbnRpZmllcn0iKCIgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgOiBGdW5jdGlvbiIsIHl5dGV4dCk7IH0KCiJ7IiAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG5CbG9jayBCZWdpbnMiKTsgfQoifSIgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuQmxvY2sgRW5kcyIpOyB9Cgp7aWRlbnRpZmllcn0oXFtbMC05XSpcXSk/CiAgICAgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuJXMgOiBJZGVudGlmaWVyIiwgeXl0ZXh0KTsgfQoKXCIuKlwiICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIDogU3RyaW5nIiwgeXl0ZXh0KTsgfQoKWzAtOV0rICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbiVzIDogTnVtYmVyIiwgeXl0ZXh0KTsgfQoKIj0iICAgICAgICAgICAgICAgICAgICAgeyBpZighQ09NTUVOVCkgcHJpbnRmKCJcbj0gOiBBc3NpZ25tZW50IE9wZXJhdG9yIik7IH0KCiI8PSJ8Ij49InwiPT0ifCI8InwiPiIKICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYoIUNPTU1FTlQpIHByaW50ZigiXG4lcyA6IFJlbGF0aW9uYWwgT3BlcmF0b3IiLCB5eXRleHQpOyB9CgoiOyIgICAgICAgICAgICAgICAgICAgICB7IGlmKCFDT01NRU5UKSBwcmludGYoIlxuOyA6IFN0YXRlbWVudCBUZXJtaW5hdG9yIik7IH0KClsgXHRcbl0rICAgICAgICAgICAgICAgIDsgICAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLwoKLiAgICAgICAgICAgICAgICAgICAgICAgOyAgIC8qIElnbm9yZSBvdGhlciBjaGFyYWN0ZXJzICovCiUlCgppbnQgbWFpbigpCnsKICAgIHl5aW4gPSBmb3BlbigidmFyLmMiLCAiciIpOwogICAgaWYgKCF5eWluKQogICAgewogICAgICAgIHByaW50ZigiRXJyb3I6IENhbm5vdCBvcGVuIGZpbGUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHl5bGV4KCk7CiAgICBmY2xvc2UoeXlpbik7CiAgICByZXR1cm4gMDsKfQoKaW50IHl5d3JhcCgpCnsKICAgIHJldHVybiAxOwp9Cg==