lex_by_file( FileName ) :-
get_input_from_file( FileName, TokenList ),
lex( TokenList, OutputList ),
%write_output( OutputList ), !.
maplist(writeln,OutputList),!.
%% atom_number(atom, number)
lex([],[]).
lex(['int' | T], ['TYPE: int' | R]) :- lex(T, R).
lex(['bool' | T], ['TYPE: bool'] | R) :- lex(T, R).
lex([',' | T], ['COMMA: ,'] | R) :- lex(T, R).
lex([X | T], [X | R]) :- lex(T, R).
bGV4X2J5X2ZpbGUoIEZpbGVOYW1lICkgOi0KCWdldF9pbnB1dF9mcm9tX2ZpbGUoIEZpbGVOYW1lLCBUb2tlbkxpc3QgKSwKCWxleCggVG9rZW5MaXN0LCBPdXRwdXRMaXN0ICksCgkld3JpdGVfb3V0cHV0KCBPdXRwdXRMaXN0ICksICEuCgltYXBsaXN0KHdyaXRlbG4sT3V0cHV0TGlzdCksIS4KCiUlIGF0b21fbnVtYmVyKGF0b20sIG51bWJlcikKbGV4KFtdLFtdKS4KbGV4KFsnaW50JyB8IFRdLCBbJ1RZUEU6IGludCcgfCBSXSkgOi0gIGxleChULCBSKS4KbGV4KFsnYm9vbCcgfCBUXSwgWydUWVBFOiBib29sJ10gfCBSKSA6LSBsZXgoVCwgUikuCmxleChbJywnIHwgVF0sIFsnQ09NTUE6ICwnXSB8IFIpIDotIGxleChULCBSKS4KbGV4KFtYIHwgVF0sIFtYIHwgUl0pIDotIGxleChULCBSKS4K
LyogcHJvZ3JhbSBuYW1lIGlzIGxleHAubCAqLwolewovKiBwcm9ncmFtIHRvIHJlY29nbml6ZSBhIGMgcHJvZ3JhbSAqLwppbnQgQ09NTUVOVD0wOwppbnQgY250PTA7CiV9CmlkZW50aWZpZXIgW2EtekEtWl1bYS16QS1aMC05XSoKJSUKIy4qIHsgcHJpbnRmKCZxdW90O1xuJXMgaXMgYSBQUkVQUk9DRVNTT1IgRElSRUNUSVZFJnF1b3Q7LHl5dGV4dCk7fQppbnQgfApmbG9hdCB8CmNoYXIgfApkb3VibGUgfAp3aGlsZSB8CmZvciB8CmRvIHwKaWYgfApicmVhayB8CmNvbnRpbnVlIHwKdm9pZCB8CnN3aXRjaCB8CmNhc2UgfApsb25nIHwKc3RydWN0IHwKY29uc3QgfAp0eXBlZGVmIHwKcmV0dXJuIHwKZWxzZSB8CmdvdG8ge3ByaW50ZigmcXVvdDtcblx0JXMgaXMgYSBLRVlXT1JEJnF1b3Q7LHl5dGV4dCk7fQomcXVvdDsvKiZxdW90OyB7Q09NTUVOVCA9IDE7fQomcXVvdDsqLyZxdW90OyB7Q09NTUVOVCA9IDA7IGNudCsrO30Ke2lkZW50aWZpZXJ9XCgge2lmKCFDT01NRU5UKXByaW50ZigmcXVvdDtcblxuRlVOQ1RJT05cblx0JXMmcXVvdDsseXl0ZXh0KTt9Clx7IHtpZighQ09NTUVOVCkgcHJpbnRmKCZxdW90O1xuIEJMT0NLIEJFR0lOUyZxdW90Oyk7fQpcfSB7aWYoIUNPTU1FTlQpIHByaW50ZigmcXVvdDtcbiBCTE9DSyBFTkRTJnF1b3Q7KTt9CntpZGVudGlmaWVyfShcW1swLTldKlxdKT8ge2lmKCFDT01NRU5UKSBwcmludGYoJnF1b3Q7XG4gJXMgSURFTlRJRklFUiZxdW90Oyx5eXRleHQpO30KXCZxdW90Oy4qXCZxdW90OyB7aWYoIUNPTU1FTlQpIHByaW50ZigmcXVvdDtcblx0JXMgaXMgYSBTVFJJTkcmcXVvdDsseXl0ZXh0KTt9ClswLTldKyB7aWYoIUNPTU1FTlQpIHByaW50ZigmcXVvdDtcblx0JXMgaXMgYSBOVU1CRVImcXVvdDsseXl0ZXh0KTt9ClwpKFw7KT8ge2lmKCFDT01NRU5UKSBwcmludGYoJnF1b3Q7XG5cdCZxdW90Oyk7RUNITztwcmludGYoJnF1b3Q7XG4mcXVvdDspO30KXCggRUNITzsKPSB7aWYoIUNPTU1FTlQpcHJpbnRmKCZxdW90O1xuXHQlcyBpcyBhbiBBU1NJR05NRU5UIE9QRVJBVE9SJnF1b3Q7LHl5dGV4dCk7fQpcJmx0Oz0gfApcJmd0Oz0gfApcJmx0OyB8Cj09IHwKXCZndDsge2lmKCFDT01NRU5UKSBwcmludGYoJnF1b3Q7XG5cdCVzIGlzIGEgUkVMQVRJT05BTCBPUEVSQVRPUiZxdW90Oyx5eXRleHQpO30KJSUKaW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCnsKaWYgKGFyZ2MgJmd0OyAxKQp7CkZJTEUgKmZpbGU7CmZpbGUgPSBmb3Blbihhcmd2WzFdLCZxdW90O3ImcXVvdDspOwppZighZmlsZSkKewpwcmludGYoJnF1b3Q7Y291bGQgbm90IG9wZW4gJXMgXG4mcXVvdDssYXJndlsxXSk7CmV4aXQoMCk7Cn0KeXlpbiA9IGZpbGU7Cn0KeXlsZXgoKTsKcHJpbnRmKCZxdW90O1xuXG4gVG90YWwgTm8uT2YgY29tbWVudHMgYXJlICVkJnF1b3Q7LGNudCk7CnJldHVybiAwOwp9CmludCB5eXdyYXAoKQp7CnJldHVybiAxOwoKfQ==
/* program name is lexp.l */
%{
/* 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 |
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; 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;
}