digit [0-9]
letter [a-zA-Z]
%{
#include <stdio.h>
#include <stdlib.h>
int counter = 0;
%}
/* Rule Section */
/* Token specification */
%%
\"(\\.|[^"\\])*\" {printf("Token: string constant\n"); counter++;}
"int" {printf("Token: int\n"); counter++;}
"float"
{printf
("Token
: float\n"
); counter
++;}"char" {printf("Token: char\n"); counter++;}
"(" {printf("Token: (\n"); counter++;}
")" {printf("Token: )\n"); counter++;}
"{" {printf("Token: {\n"); counter++;}
"}" {printf("Token: }\n"); counter++;}
"#" {printf("Token: #\n"); counter++;}
"<" {printf("Token: <\n"); counter++;}
">" {printf("Token: >\n"); counter++;}
";" {printf("Token: End of Statement\n"); counter++;}
"//".* ;
"stdio.h"|"stdlib.h" {printf("Token:Header file\n"); counter++;}
if
|else
|include|main
|return
|printf
|scanf
|yylex
|yywrap
|yyleng
|yyin
{printf
("Token
: Keyword\n"
); counter
++;}"," {printf("Token: , operator\n"); counter++;}
"=" {printf("Token: assignment operator\n"); counter++;}
"+"|"-"|"*"|"/" {printf("Token: arithmetic operator\n"); counter++;}
{letter}({letter}|{digit})* {printf("Token: identifier\n"); counter++;}
{digit
}+ {printf
("Token
: Integer value\n"
); counter
++;} {digit
}+.{digit
}+ {printf
("Token
: Float value\n"
); counter
++;} .|\n ;
%%
int main()
{
extern FILE *yyin;
char filename[100];
printf
("This Program finds all tokens
!! \n Enter the name of the file to
read:\t"
); scanf("%s", filename);
/* Opening file to read */
yyin = fopen(filename, "r");
if (yyin == NULL){
printf
("Cannot
open file
%s\n", filename); exit(0);
}
/*call the yylex function.*/
yylex();
printf("Token count: %d\n", counter);
return 0;
}
/*call the yywrap function*/
int yywrap()
{
return 1;
}
ZGlnaXQgWzAtOV0KbGV0dGVyIFthLXpBLVpdCiV7CiAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgaW50IGNvdW50ZXIgPSAwOwolfQovKiBSdWxlIFNlY3Rpb24gKi8KLyogVG9rZW4gc3BlY2lmaWNhdGlvbiAqLwolJQpcIihcXC58W14iXFxdKSpcIiAgIHtwcmludGYoIlRva2VuOiBzdHJpbmcgY29uc3RhbnRcbiIpOyBjb3VudGVyKys7fQoiaW50IiAgIHtwcmludGYoIlRva2VuOiBpbnRcbiIpOyBjb3VudGVyKys7fQoiZmxvYXQiIHtwcmludGYoIlRva2VuOiBmbG9hdFxuIik7IGNvdW50ZXIrKzt9CiJjaGFyIiAge3ByaW50ZigiVG9rZW46IGNoYXJcbiIpOyBjb3VudGVyKys7fQoiKCIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IChcbiIpOyBjb3VudGVyKys7fQoiKSIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IClcbiIpOyBjb3VudGVyKys7fQoieyIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IHtcbiIpOyBjb3VudGVyKys7fQoifSIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IH1cbiIpOyBjb3VudGVyKys7fQoiIyIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46ICNcbiIpOyBjb3VudGVyKys7fQoiPCIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IDxcbiIpOyBjb3VudGVyKys7fQoiPiIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46ID5cbiIpOyBjb3VudGVyKys7fQoiOyIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IEVuZCBvZiBTdGF0ZW1lbnRcbiIpOyBjb3VudGVyKys7fQoiLy8iLiogIDsKInN0ZGlvLmgifCJzdGRsaWIuaCIgICAgICAge3ByaW50ZigiVG9rZW46SGVhZGVyIGZpbGVcbiIpOyBjb3VudGVyKys7fQppZnxlbHNlfGluY2x1ZGV8bWFpbnxyZXR1cm58cHJpbnRmfHNjYW5mfHl5bGV4fHl5d3JhcHx5eWxlbmd8eXlpbiAge3ByaW50ZigiVG9rZW46IEtleXdvcmRcbiIpOyBjb3VudGVyKys7fQoiLCIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46ICwgb3BlcmF0b3JcbiIpOyBjb3VudGVyKys7fQoiPSIgICAgICAgICAgICAge3ByaW50ZigiVG9rZW46IGFzc2lnbm1lbnQgb3BlcmF0b3JcbiIpOyBjb3VudGVyKys7fQoiKyJ8Ii0ifCIqInwiLyIgICAgIHtwcmludGYoIlRva2VuOiBhcml0aG1ldGljIG9wZXJhdG9yXG4iKTsgY291bnRlcisrO30Ke2xldHRlcn0oe2xldHRlcn18e2RpZ2l0fSkqICAgICB7cHJpbnRmKCJUb2tlbjogaWRlbnRpZmllclxuIik7IGNvdW50ZXIrKzt9CntkaWdpdH0rIHtwcmludGYoIlRva2VuOiBJbnRlZ2VyIHZhbHVlXG4iKTsgY291bnRlcisrO30Ke2RpZ2l0fSsue2RpZ2l0fSsge3ByaW50ZigiVG9rZW46IEZsb2F0IHZhbHVlXG4iKTsgY291bnRlcisrO30KLnxcbiAgICA7CiUlCmludCBtYWluKCkKewogICAgZXh0ZXJuIEZJTEUgKnl5aW47CiAgICAgICAgY2hhciBmaWxlbmFtZVsxMDBdOwogICAgICAgIHByaW50ZigiVGhpcyBQcm9ncmFtIGZpbmRzIGFsbCB0b2tlbnMhISBcbiBFbnRlciB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byByZWFkOlx0Iik7CiAgICAgICAgc2NhbmYoIiVzIiwgZmlsZW5hbWUpOwogICAgICAgIC8qIE9wZW5pbmcgZmlsZSB0byByZWFkICovCiAgICAgICAgeXlpbiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogICAgICAgIGlmICh5eWluID09IE5VTEwpewogICAgICAgICAgICAgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CiAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgfQogICAgICAgIC8qY2FsbCB0aGUgeXlsZXggZnVuY3Rpb24uKi8KICAgICAgICB5eWxleCgpOwogICAgcHJpbnRmKCJUb2tlbiBjb3VudDogJWRcbiIsIGNvdW50ZXIpOwogICAgICAgIHJldHVybiAwOwp9CgovKmNhbGwgdGhlIHl5d3JhcCBmdW5jdGlvbiovCmludCB5eXdyYXAoKQp7CiAgICAgICAgcmV0dXJuIDE7Cn0KCg==