digit [0-9]
letter [a-zA-Z]
keyword int|float|double
operator [-]|[*]|[+]|[/]
space [' ']
comma [,]
semicolon [;]
equal [=]
%{
#include<string.h>
void symb_tab(char data[]);
void check_data(char s[]);
void display();
void valid();
void check_more();
char identifier[10][10],datatype[10][10],key[10],iden[10],temp[10];
int i=0,j=0,key_insert=0,cnt=0,k=0,t=0,r=0,exists=0,m=0,e_cntr=0;
%}
%%
{keyword}{space}{letter}({letter}|{digit})*({comma}{space}*{letter}({letter}|{digit})*)*{semicolon} {symb_tab(yytext);}
{letter}+{digit}*{equal}{digit}*{letter}({letter}|{digit})*({operator}{digit}*{letter}({letter}|{digit})*)*{semicolon} {check_data(yytext);}
{semicolon} {valid();}
. {printf("nothing");;}
%%
void symb_tab(char data[])
{
// To reach the end of the sentence
while(data[i]!=';')
{
if(data[i]!=' ' && key_insert==0)
{
key[j]=data[i];
j++;
}
else
{
key_insert=1;
if(data[i]!=',' && data[i]!=' ')
{
iden[k]=data[i];
k++;
}
else
{
strcpy(identifier[cnt],iden);
strcpy(datatype[cnt],key);
cnt++;
k=0;
// To clear an array
for(r=0;r<10;r++)
{
iden[r]='\0';
}
}
}
i++;
}
strcpy(identifier[cnt],iden);
strcpy(datatype[cnt],key);
cnt++;
}
void check_data(char s[])
{
i=0,j=0,m=0;
while(s[i]!=';')
{
if(s[i]!='+' && s[i]!='-' && s[i]!='*' && s[i]!='/' && s[i]!='=')
{
temp[m]=s[i];
m++;
}
else
{
check_more();
m=0;
}
i++;
}
check_more();
}
void check_more()
{
e_cntr++;
for(j=0;j<10;j++)
{
if((strcmp(identifier[j],temp))==0)
{
exists++;
}
}
for(k=0;k<10;k++)
{
temp[k]='\0';
}
}
void valid()
{
if(e_cntr==exists)
{
printf("\n Valid expression");
}
else
{
e_cntr=0;
exists=0;
printf("\n Invalid expression");
}
}
/*
void display()
{
for(t=0;t<cnt;t++)
{
printf("\n%s\t%s",datatype[t],identifier[t]);
}
}
*/
int main(void)
{
yylex();
return(0);
}
Output:

Comments
Post a Comment