/* program name is lexp.l */
%{
/* program to recognize a c program */ int COMMENT=0;
%}
identifier [a-zA-Z][a-zA-Z0-9]*
%%
#.* { printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);} int |
float | char
| double
| while
| for
| do | if |
break | continue | void | switch | case | long | struct | const | typedef | return | else |
goto {printf("\n\t%s is a KEYWORD",yytext);} "/*" {COMMENT = 1;}
"*/" {COMMENT = 0;}
{identifier}\( {if(!COMMENT)printf("\n\nFUNCTION\n\t%s",yytext);}
\{ {if(!COMMENT) printf("\n BLOCK BEGINS");}
\} {if(!COMMENT) printf("\n 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\t%s is a NUMBER",yytext);}
\)(\;)? {if(!COMMENT) printf("\n\t");ECHO;printf("\n");}
\( ECHO;
= {if(!COMMENT)printf("\n\t%s is an ASSIGNMENT OPERATOR",yytext);}
\<= |
\>= |
\< |
== |
\> {if(!COMMENT) printf("\n\t%s is a RELATIONAL OPERATOR",yytext);}
%%
int main(int argc,char **argv)
{
if (argc > 1)
{
FILE *file;
file = fopen(argv[1],"r"); if(!file)
{
printf
("could not
open %s \n",argv[1]); exit(0);}
yyin = file;
}
yylex(); printf("\n\n"); return 0;
} int yywrap()
{
return 0;
}
LyogcHJvZ3JhbSBuYW1lIGlzIGxleHAubCAqLwolewovKiBwcm9ncmFtIHRvIHJlY29nbml6ZSBhIGMgcHJvZ3JhbSAqLyBpbnQgQ09NTUVOVD0wOwolfQppZGVudGlmaWVyIFthLXpBLVpdW2EtekEtWjAtOV0qCiUlCiMuKiB7IHByaW50ZigiXG4lcyBpcyBhIFBSRVBST0NFU1NPUiBESVJFQ1RJVkUiLHl5dGV4dCk7fSBpbnQgfApmbG9hdCB8IGNoYXIgfCBkb3VibGUgfCB3aGlsZSB8IGZvciB8CmRvIHwgaWYgfApicmVhayB8IGNvbnRpbnVlIHwgdm9pZCB8IHN3aXRjaCB8IGNhc2UgfCBsb25nIHwgc3RydWN0IHwgY29uc3QgfCB0eXBlZGVmIHwgcmV0dXJuIHwgZWxzZSB8CmdvdG8ge3ByaW50ZigiXG5cdCVzIGlzIGEgS0VZV09SRCIseXl0ZXh0KTt9ICIvKiIge0NPTU1FTlQgPSAxO30KIiovIiB7Q09NTUVOVCA9IDA7fQp7aWRlbnRpZmllcn1cKCB7aWYoIUNPTU1FTlQpcHJpbnRmKCJcblxuRlVOQ1RJT05cblx0JXMiLHl5dGV4dCk7fQpceyB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG4gQkxPQ0sgQkVHSU5TIik7fQpcfSB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG4gQkxPQ0sgRU5EUyIpO30Ke2lkZW50aWZpZXJ9KFxbWzAtOV0qXF0pPyB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG4gJXMgSURFTlRJRklFUiIseXl0ZXh0KTt9ClwiLipcIiB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG5cdCVzIGlzIGEgU1RSSU5HIix5eXRleHQpO30KWzAtOV0rIHtpZighQ09NTUVOVCkgcHJpbnRmKCJcblx0JXMgaXMgYSBOVU1CRVIiLHl5dGV4dCk7fQpcKShcOyk/IHtpZighQ09NTUVOVCkgcHJpbnRmKCJcblx0Iik7RUNITztwcmludGYoIlxuIik7fQpcKCBFQ0hPOwo9IHtpZighQ09NTUVOVClwcmludGYoIlxuXHQlcyBpcyBhbiBBU1NJR05NRU5UIE9QRVJBVE9SIix5eXRleHQpO30KXDw9IHwKXD49IHwKXDwgfAo9PSB8Clw+IHtpZighQ09NTUVOVCkgcHJpbnRmKCJcblx0JXMgaXMgYSBSRUxBVElPTkFMIE9QRVJBVE9SIix5eXRleHQpO30KJSUKaW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCnsKaWYgKGFyZ2MgPiAxKQp7CkZJTEUgKmZpbGU7CmZpbGUgPSBmb3Blbihhcmd2WzFdLCJyIik7IGlmKCFmaWxlKQp7CnByaW50ZigiY291bGQgbm90IG9wZW4gJXMgXG4iLGFyZ3ZbMV0pOyBleGl0KDApOwp9Cnl5aW4gPSBmaWxlOwp9Cnl5bGV4KCk7IHByaW50ZigiXG5cbiIpOyByZXR1cm4gMDsKfSBpbnQgeXl3cmFwKCkKewpyZXR1cm4gMDsKfQoK