Wednesday 24 February 2016

Experiment No - 02




 Develop a lexical analyzer to recognize a few patterns in c
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
FILE *fp;
int i,n;
char input[10];
char key[11][10]={"include","void","main()","int","char","float","if","else","while","do","for"};
char op[11][2]={"+","<",">","/","-","*","&","^","%","!","="};
char symbol[11][2]={",",")","(","?","{","}","[","]","#",";",":"};
clrscr();
fp=fopen("input.c","r");
fscanf(fp,"%s",input);
while(strcmp(input,"EOF")!=0)
{
for(i=0;i<11;i++)
{
if(strcmp(input,key[i])==0)
{
goto e;
}
}
for(i=0;i<11;i++)
{
if(strcmp(input,op[i])==0)
{
printf("<operator,%s>\n",input);
goto e;
}
}
for(i=0;i<11;i++)
{
if(strcmp(input,symbol[i])==0)
{
printf("<symbol,%s>\n",input);
goto e;
}
}
if((input[0]>='a' && input[0]<='z')||(input[0]>+'A'&& input [0]<='Z'))
{
n=strlen(input);
for(i=1;i<n;i++)
{


if((input[i]>='a'&&input[i]<='z')||(input[i]>='A'&&input[i]<='Z')||(input[i]>='0'&&input[i]<='9'))
continue;
else
{
printf("<\n Invalid identifiers,%s \n",input);
goto e;
}
}
if(i==n)
printf("<Identifiers,%s>\n",input);
}
else
printf("Invalid Identifiers\n");
e:
fscanf(fp,"%s",input);
}
getch();
}

INPUT:
void main()
{
int a,b;
float d;
d = a+b;
}
EOF
OUTPUT:
<symbol,{>
<Identifiers,a>
<symbol,;>
<Identifiers,b>
<symbol,;>
<Identifiers,double>
<Identifiers,c>
<symbol,;>
<Identifiers,d>
<symbol,;>
<Identifiers,c>
<operator,=>
<Identifiers,a>
<operator,+>
<Identifiers,b>
<symbol,;>
<symbol,}>

No comments:

Post a Comment