Professional Documents
Culture Documents
int main()
{
char ch, temp[40], arithmetic_operator[] = "=+%*/-";
FILE *file_pointer;
int count, x = 0;
file_pointer =
fopen("C:\\Users\\tusoni\\Desktop\\demo.txt","r");
if(file_pointer == NULL)
{
printf("The file could not be opened.\n");
exit(0);
}
while((ch = fgetc(file_pointer)) != EOF)
{
count = 0;
while(count <= 5)
{
if(ch == arithmetic_operator[count])
{
printf("\nOperator:\t%c", ch);
}
count = count + 1;
}
if(isalnum(ch))
{
temp[x++] = ch;
}
else if((ch == '\n' || ch == ' ') && (x != 0))
{
temp[x] = '\0';
x = 0;
if(keyword library(temp) == 1)
{
printf("\n Keyword:\t% s", temp);
}
else
{
printf("\n Identifier:\t% s", temp);
}
}
}
fclose (file pointer);
getch ();
return 0;
}
int keyword library(char temp[])
{
int count = 0, flag = 0;
char keywords[32][12] = {"return", "continue", "extern", "static",
"long", "signed", "switch", "char", "else", "unsigned", "if", "struct",
"union", "goto", "while", "float", "enum", "sizeof", "double",
"volatile", "const", "case", "for", "break", "void", "register", "int",
"do", "default", "short", "typedef", "auto"};
while (count <= 31)
{
if (strcmp(keywords[count], temp) == 0)
{
flag = 1;
break;
}
count = count + 1;
}
return (flag);
}
Output:
Experiment-2
Q2.Write a program to implement of Lexical Analyzer for
Arithmetic Expression.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void remove duplicate();
void final();
int Isiden (char ch);
int Isop (char ch);
int Isdel (char ch);
int Iskey (char * str);
void remove duplicate();
char op [8]={'+','-','*','/','=','<','>','%'};
char del [8]={'}','{',';','(',')','[',']',','};
char *key[]={"int","void","main","char","float"};
//char *operato []={"+","-","/","*","<",">","=","%","<=",">=","++"};
int
idi=0,idj=0,k,opi=0,opj=0,deli=0,uqdi=0,uqidi=0,uqoperi=0,kdi=0,liti
=0,ci=0; int uqdeli [20],uqopi [20],uqideni [20],l=0,j;
char uqdel [20],uqiden [20][20],uqop [20][20],keyword [20][20];
char
iden[20][20],oper[20][20],delem[20],litral[20][20],lit[20],constant[20
][20];
void lex analysis(char *str)
{
int i=0;
while (str[i]!='\0')
{
if (Isiden (str [i]))
{
while (Isiden (str [i]))
{
iden [idi] [idj++]=str [i++];
}
iden [idi][idj]='\0';
idi++;idj=0;
}
else
if (str [i]=='"')
{
lit [l++]=str [i];
for (j=i+1;str[j]!='"'; j++)
{
lit [l++]=str [j];
}
lit[l++]=str [j];lit[l]='\0';
strcpy (litral [liti++],lit);
i=j+1;
}
else
if (Isop(str[i]))
{
while (Isop (str [i]))
{
oper [opi][opj++]=str [i++];
}
oper [opi] [opj]='\0';
opi++;opj=0;
}
else
if (Isdel (str[i]))
{
while (Isdel (str [i]))
{
delem [deli++]=str[i++];
}
}
else
{
i++;
}
}
remove duplicate();
final ();
}
int Isiden (char ch)
{
if (isalpha(ch)||ch=='_'||isdigit(ch)||ch=='.')
return 1;
else
return 0;
}