%{
/* program to recognize a c program */
int COMMENT=0;
int cnt=0;
%}
identifier [a-zA-Z][a-zA-Z0-9]*
%%
#.* { printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);}
int |
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; cnt++;}
{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 Total No.Of comments are %d",cnt);
return 0;
}
int yywrap()
{
return 1;
}
JXsKLyogcHJvZ3JhbSB0byByZWNvZ25pemUgYSBjIHByb2dyYW0gKi8KaW50IENPTU1FTlQ9MDsKaW50IGNudD0wOwolfQppZGVudGlmaWVyIFthLXpBLVpdW2EtekEtWjAtOV0qCiUlCiMuKiB7IHByaW50ZigiXG4lcyBpcyBhIFBSRVBST0NFU1NPUiBESVJFQ1RJVkUiLHl5dGV4dCk7fQppbnQgfApmbG9hdCB8CmNoYXIgfApkb3VibGUgfAp3aGlsZSB8CmZvciB8CmRvIHwKaWYgfApicmVhayB8CmNvbnRpbnVlIHwKdm9pZCB8CnN3aXRjaCB8CmNhc2UgfApsb25nIHwKc3RydWN0IHwKY29uc3QgfAp0eXBlZGVmIHwKcmV0dXJuIHwKZWxzZSB8CmdvdG8ge3ByaW50ZigiXG5cdCVzIGlzIGEgS0VZV09SRCIseXl0ZXh0KTt9CiIvKiIge0NPTU1FTlQgPSAxO30KIiovIiB7Q09NTUVOVCA9IDA7IGNudCsrO30Ke2lkZW50aWZpZXJ9XCgge2lmKCFDT01NRU5UKXByaW50ZigiXG5cbkZVTkNUSU9OXG5cdCVzIix5eXRleHQpO30KXHsge2lmKCFDT01NRU5UKSBwcmludGYoIlxuIEJMT0NLIEJFR0lOUyIpO30KXH0ge2lmKCFDT01NRU5UKSBwcmludGYoIlxuIEJMT0NLIEVORFMiKTt9CntpZGVudGlmaWVyfShcW1swLTldKlxdKT8ge2lmKCFDT01NRU5UKSBwcmludGYoIlxuICVzIElERU5USUZJRVIiLHl5dGV4dCk7fQpcIi4qXCIge2lmKCFDT01NRU5UKSBwcmludGYoIlxuXHQlcyBpcyBhIFNUUklORyIseXl0ZXh0KTt9ClswLTldKyB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG5cdCVzIGlzIGEgTlVNQkVSIix5eXRleHQpO30KXCkoXDspPyB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG5cdCIpO0VDSE87cHJpbnRmKCJcbiIpO30KXCggRUNITzsKPSB7aWYoIUNPTU1FTlQpcHJpbnRmKCJcblx0JXMgaXMgYW4gQVNTSUdOTUVOVCBPUEVSQVRPUiIseXl0ZXh0KTt9Clw8PSB8Clw+PSB8Clw8IHwKPT0gfApcPiB7aWYoIUNPTU1FTlQpIHByaW50ZigiXG5cdCVzIGlzIGEgUkVMQVRJT05BTCBPUEVSQVRPUiIseXl0ZXh0KTt9CiUlCmludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQp7CmlmIChhcmdjID4gMSkKewpGSUxFICpmaWxlOwpmaWxlID0gZm9wZW4oYXJndlsxXSwiciIpOwppZighZmlsZSkKewpwcmludGYoImNvdWxkIG5vdCBvcGVuICVzIFxuIixhcmd2WzFdKTsKZXhpdCgwKTsKfQp5eWluID0gZmlsZTsKfQp5eWxleCgpOwpwcmludGYoIlxuXG4gVG90YWwgTm8uT2YgY29tbWVudHMgYXJlICVkIixjbnQpOwpyZXR1cm4gMDsKfQppbnQgeXl3cmFwKCkKewpyZXR1cm4gMTsKCn0K