%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_IDENTIFIER_LENGTH 50
%}
%option noyywrap
%option yylineo
void addto symboltable(const char*)
%%
[\t]
/n/
\n*([^*]|\*+[^*/])*
[0-9]+{printf("constant:%s\n*,yytext");}
={printf("%s is an assignment operator\n",yytext);}
\*/
\+/
\-{printf("%s is a operator\n",yytext);}
[a-ZA-Z][a-ZA-Z0-9]*{printf("identifier:%s\n",yytext);addsymboltable(yytext);}
{printf("Invalid token:%s\n",yytext);}
%%
typedef struct
{
charname[MAX_IDENTIFIER_LENGTH];
}symbol;
symbol symbol_table[100];
int symbol_count=0;
void addtosymboltable(const char*identifier){
if(symbol_count<100)
{
strncpy(symbol_table(symbol_count].name,identifier,MAX_IDENTIFIER_LENGTH-1);
symbol_table[symbol_count].name[MAX_IDENTIFIER_LENGTH-1]='\0';
symbol_count++;
printf("Identifier %s is entered in the symbol table",idnetifier);
}
else
{
printf
("symbol table
is full
.cannot add more identifier
.\n"
); exit(0);
}
}
int main()
{
yylex();
return 1;
JXsKICAjaW5jbHVkZTxzdGRpby5oPgogICNpbmNsdWRlPHN0ZGxpYi5oPgogICNpbmNsdWRlPHN0cmluZy5oPgogICNkZWZpbmUgTUFYX0lERU5USUZJRVJfTEVOR1RIIDUwCiV9CiVvcHRpb24gbm95eXdyYXAKJW9wdGlvbiB5eWxpbmVvCnZvaWQgYWRkdG8gc3ltYm9sdGFibGUoY29uc3QgY2hhciopCiUlCltcdF0KL24vClxuKihbXipdfFwqK1teKi9dKSoKWzAtOV0re3ByaW50ZigiY29uc3RhbnQ6JXNcbioseXl0ZXh0Iik7fQo9e3ByaW50ZigiJXMgaXMgYW4gYXNzaWdubWVudCBvcGVyYXRvclxuIix5eXRleHQpO30KXCovClwrLwpcLXtwcmludGYoIiVzIGlzIGEgb3BlcmF0b3JcbiIseXl0ZXh0KTt9ClthLVpBLVpdW2EtWkEtWjAtOV0qe3ByaW50ZigiaWRlbnRpZmllcjolc1xuIix5eXRleHQpO2FkZHN5bWJvbHRhYmxlKHl5dGV4dCk7fQogICB7cHJpbnRmKCJJbnZhbGlkIHRva2VuOiVzXG4iLHl5dGV4dCk7fQogICAlJQogICB0eXBlZGVmIHN0cnVjdAogICB7CiAgICAgY2hhcm5hbWVbTUFYX0lERU5USUZJRVJfTEVOR1RIXTsKICAgfXN5bWJvbDsKICAgIHN5bWJvbCBzeW1ib2xfdGFibGVbMTAwXTsKICAgIGludCBzeW1ib2xfY291bnQ9MDsKICB2b2lkIGFkZHRvc3ltYm9sdGFibGUoY29uc3QgY2hhcippZGVudGlmaWVyKXsKICAgIGlmKHN5bWJvbF9jb3VudDwxMDApCiAgICB7CiAgICBzdHJuY3B5KHN5bWJvbF90YWJsZShzeW1ib2xfY291bnRdLm5hbWUsaWRlbnRpZmllcixNQVhfSURFTlRJRklFUl9MRU5HVEgtMSk7CiAgICBzeW1ib2xfdGFibGVbc3ltYm9sX2NvdW50XS5uYW1lW01BWF9JREVOVElGSUVSX0xFTkdUSC0xXT0nXDAnOwogICAgc3ltYm9sX2NvdW50Kys7CiAgICBwcmludGYoIklkZW50aWZpZXIgJXMgaXMgZW50ZXJlZCBpbiB0aGUgc3ltYm9sIHRhYmxlIixpZG5ldGlmaWVyKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcHJpbnRmKCJzeW1ib2wgdGFibGUgaXMgZnVsbC5jYW5ub3QgYWRkIG1vcmUgaWRlbnRpZmllci5cbiIpOwogICAgICBleGl0KDApOwogICAgfQogIH0KICBpbnQgbWFpbigpCiAgewogICAgeXlsZXgoKTsKICAgIHJldHVybiAxOwogIA==