%{
#include <stdio.h>
int no=1;
%}
lite [0-9][0-9]*
inv [0-9][a-zA-Z0-9]*
ident [a-zA-Z][a-zA-Z0-9]*
lite2 \"[a-zA-Z][a-zA-Z0-9]*\"
rel <=|<|>=|>
key int|void|char|if|main|printf
%%
{lite} {printf("%s\t%i\tInteger\n",yytext,no);}
{lite2} { char aa[10],bb[10];
strcpy(aa,yytext);
for(int i=1;i<strlen(aa)-1;i++){
bb[i-1]=aa[i];
}
printf("%s\t%i\tLiteral\n",bb,no);
}
{inv} {printf("Invalid:\t%s\n",yytext);}
{rel} {
printf("%s\t%i\tRelational Operator, \t",yytext,no);
if(strcmp(yytext,"<=")==0){printf("LE");}
if(strcmp(yytext,"<")==0){printf("LT");}
if(strcmp(yytext,">=")==0){printf("LE");}
if(strcmp(yytext,">")==0){printf("LT");}
printf("\n");
}
"+"|"-"|"*"|"/" {printf("%s\t%i\tArithmetic opeator, ",yytext,no);
if(strcmp(yytext,"+")==0){printf("ADD");}
if(strcmp(yytext,"-")==0){printf("SUB");}
if(strcmp(yytext,"/")==0){printf("DIV");}
if(strcmp(yytext,"*")==0){printf("MUL");}
printf("\n");
}
"=" {printf("%s\t%i\tAssignment operator, EQ\n",yytext,no);}
{key} {printf("%s\t%i\tkeyword\n",yytext,no);}
{ident} { printf("%s\t%i\tIdentifier\n",yytext,no);}
"\n" {no++;}
. {}
%%
int main()
{
yyin=fopen("input.txt","r");
printf("Lexeme\tLine\tToken\n");
yylex();
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCBubz0xOwolfQpsaXRlIFswLTldWzAtOV0qCmludiBbMC05XVthLXpBLVowLTldKgppZGVudCBbYS16QS1aXVthLXpBLVowLTldKgpsaXRlMiBcIlthLXpBLVpdW2EtekEtWjAtOV0qXCIKcmVsIDw9fDx8Pj18PgprZXkgaW50fHZvaWR8Y2hhcnxpZnxtYWlufHByaW50ZgolJQp7bGl0ZX0ge3ByaW50ZigiJXNcdCVpXHRJbnRlZ2VyXG4iLHl5dGV4dCxubyk7fQp7bGl0ZTJ9IHsgY2hhciBhYVsxMF0sYmJbMTBdOwpzdHJjcHkoYWEseXl0ZXh0KTsKZm9yKGludCBpPTE7aTxzdHJsZW4oYWEpLTE7aSsrKXsKYmJbaS0xXT1hYVtpXTsKfQpwcmludGYoIiVzXHQlaVx0TGl0ZXJhbFxuIixiYixubyk7Cn0Ke2ludn0ge3ByaW50ZigiSW52YWxpZDpcdCVzXG4iLHl5dGV4dCk7fQp7cmVsfSB7CnByaW50ZigiJXNcdCVpXHRSZWxhdGlvbmFsIE9wZXJhdG9yLCBcdCIseXl0ZXh0LG5vKTsKaWYoc3RyY21wKHl5dGV4dCwiPD0iKT09MCl7cHJpbnRmKCJMRSIpO30KaWYoc3RyY21wKHl5dGV4dCwiPCIpPT0wKXtwcmludGYoIkxUIik7fQppZihzdHJjbXAoeXl0ZXh0LCI+PSIpPT0wKXtwcmludGYoIkxFIik7fQppZihzdHJjbXAoeXl0ZXh0LCI+Iik9PTApe3ByaW50ZigiTFQiKTt9CnByaW50ZigiXG4iKTsKIH0KIisifCItInwiKiJ8Ii8iIHtwcmludGYoIiVzXHQlaVx0QXJpdGhtZXRpYyBvcGVhdG9yLCAiLHl5dGV4dCxubyk7CmlmKHN0cmNtcCh5eXRleHQsIisiKT09MCl7cHJpbnRmKCJBREQiKTt9CmlmKHN0cmNtcCh5eXRleHQsIi0iKT09MCl7cHJpbnRmKCJTVUIiKTt9CmlmKHN0cmNtcCh5eXRleHQsIi8iKT09MCl7cHJpbnRmKCJESVYiKTt9CmlmKHN0cmNtcCh5eXRleHQsIioiKT09MCl7cHJpbnRmKCJNVUwiKTt9CnByaW50ZigiXG4iKTsKfQoiPSIge3ByaW50ZigiJXNcdCVpXHRBc3NpZ25tZW50IG9wZXJhdG9yLCBFUVxuIix5eXRleHQsbm8pO30Ke2tleX0ge3ByaW50ZigiJXNcdCVpXHRrZXl3b3JkXG4iLHl5dGV4dCxubyk7fQp7aWRlbnR9IHsgcHJpbnRmKCIlc1x0JWlcdElkZW50aWZpZXJcbiIseXl0ZXh0LG5vKTt9CiJcbiIge25vKys7fQouIHt9CiUlCmludCBtYWluKCkKewp5eWluPWZvcGVuKCJpbnB1dC50eHQiLCJyIik7CnByaW50ZigiTGV4ZW1lXHRMaW5lXHRUb2tlblxuIik7Cnl5bGV4KCk7Cn0=