0% found this document useful (0 votes)
78 views4 pages

Practical 11

The document describes a program that implements a lexical analyzer in C language. The lexical analyzer is designed to ignore redundant spaces, tabs, newlines and comments. It identifies numbers, identifiers, keywords and special characters in a given source code file. It outputs the identified tokens to separate files and prints statistics like list of numbers, keywords/identifiers, special characters and total lines in the source file.

Uploaded by

Nayan Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
78 views4 pages

Practical 11

The document describes a program that implements a lexical analyzer in C language. The lexical analyzer is designed to ignore redundant spaces, tabs, newlines and comments. It identifies numbers, identifiers, keywords and special characters in a given source code file. It outputs the identified tokens to separate files and prints statistics like list of numbers, keywords/identifiers, special characters and total lines in the source file.

Uploaded by

Nayan Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

CD(2170701) 170280107033

Practical 3
Aim :- Design a lexical analyzer for given language and the lexical analyzer should ignore
redundant spaces, tabs and new lines. It should also ignore comments. Although
the syntax specification states that identifiers can be arbitrarily long, you may
restrict the length to some reasonable value. Simulate the same in C language.
Program :
#include<string.h>
#include<ctype.h>
#include<stdio.h>

void valid_identifier(char* string)


{
int count=0,flag=1;
if( (string[0]>='a'&&string[0]<='z')||(string[0]>='A'&&string[0]<='Z')||(string[0]=='_')){
count++;
for(int i=1; i<=strlen(string); i++){
if((string[i]>='a'&&string[i]<='z')||(string[i]>='A'&&string[i]<='Z')||(string[i]>='0'&&string[i]<='9')||
(string[i]=='_')){
count++;
}
}
if(count==strlen(string)) flag=0;
}else
flag=1;

if(flag==1)
printf("\n%s is not valid Identifier",string);
else
printf("\n%s is valid Identifier",string);
}

void keyword(char str[10])


{
if(strcmp("for",str)==0||strcmp("while",str)==0||strcmp("do",str)==0||strcmp("int",str)==0||
strcmp("float",str)==0||strcmp("char",str)==0||strcmp("return",str)==0||strcmp("double",str)==0||
strcmp("static",str)==0||strcmp("switch",str)==0||strcmp("case",str)==0||strcmp("if",str)==0||
strcmp("else",str)==0||strcmp("goto",str)==0||strcmp("short",str)==0||strcmp("undefined",str)==0||
strcmp("long",str)==0||strcmp("typdef",str)==0 ||
strcmp("void",str)==0||strcmp("struct",str)==0||strcmp("break",str)==0||strcmp("continue",str)==0||
strcmp("sizeof",str)==0||strcmp("printf",str)==0)
printf("\n%s is a keyword",str);
else
valid_identifier(str);
}

1
CD(2170701) 170280107033

int main()
{
FILE *f1,*f2,*f3;
char c,str[10];
int num[100],lineno=0,tokenvalue=0,i=0,j=0,k=0;
printf("\nLexical Analyzing is started ....\n");

f1=fopen("program.txt","r");
f2=fopen("identifier","w");
f3=fopen("specialchar","w");

while((c=getc(f1))!=EOF){
if(isdigit(c)){
tokenvalue=c-'0';
c=getc(f1);
while(isdigit(c)){
tokenvalue*=10+c-'0';
c=getc(f1);
}
num[i++]=tokenvalue;
ungetc(c,f1);
}
else if(isalpha(c)){
putc(c,f2);
c=getc(f1);
while(isdigit(c)||isalpha(c)||c=='_'||c=='$'){
putc(c,f2);
c=getc(f1);
}
putc(' ',f2);
ungetc(c,f1);
}
else if(c==' '||c=='\t')
printf(" ");
else if(c=='\n')
lineno++;
else
putc(c,f3);
}
fclose(f2);
fclose(f3);
fclose(f1);

2
CD(2170701) 170280107033

printf("\nThe numbers in the program are\t");


for(j=0; j<i; j++)
printf("%d\t",num[j]);
printf("\n");

f2=fopen("identifier","r");
k=0;
printf("\nThe keywords and identifiersare:\n");
while((c=getc(f2))!=EOF){
if(c!=' ')
str[k++]=c;
else{
str[k]='\0';
keyword(str);
k=0;
}
}
fclose(f2);

f3=fopen("specialchar","r");
printf("\n\nSpecial characters are : ");
while((c=getc(f3))!=EOF)
printf("%c",c);
printf("\n");
fclose(f3);

printf("\nTotal no. of lines are:\t%d",lineno);

return 0;
}

Program.txt :-

int main(){
int a=10 , b=15 ,c ;
string s;
c = a + b;

if(c>20)
printf("%d",c);
return 0;
}

3
CD(2170701) 170280107033

Output :-

You might also like