Sunteți pe pagina 1din 54

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-1
Program to identify keywords and identifiers for
declaration statement of C language.
#include<stdio.h>
#include<conio.h>
void main()
{
char keyword[][10]={"int","char","float","double","static","const"};
char stmt[100];
char iden[20][20],delim[20];
int a,i=0,j=0,k=0,x=0,p,v[20]={0};
clrscr();
printf("Enter a statement:");
gets(stmt);
while(stmt[i]!='\0')
{
while(stmt[i]!=',' && stmt[i]!=';')
{
if(stmt[i]==' ')
{
if(k!=0)
{
iden[j][k]='\0';
j++; k=0;
}
i++;
continue;
}
iden[j][k]=stmt[i];
i++; k++;
}
for(p=0;p<x;p++)
{
if(stmt[i]==delim[p])
break;
}
if(p==x)
delim[x++]=stmt[i];
if(k!=0)
{
iden[j][k]='\0';
j++; k=0;
}
i++;
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-1-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

}
k=0;
printf("\nKeywords:");
for(a=0;a<6;a++)
{
if(strcmp(keyword[a],iden[k])==0)
{
printf("%s ",iden[k]);
v[k]=1;
k++;
}
}
printf("\n\nValid Identifiers:");
for(k=0;k<j;k++)
{
if(v[k]==0)
{
if((iden[k][0]>=65 && iden[k][0]<=90)||(iden[k][0]>=97 && iden[k][0]<=122))
{
printf("%s ",iden[k]); v[k]=1;
}
}
}
printf("\n\nInvalid Identifiers:");
for(k=0;k<j;k++)
{
if(v[k]==0)
printf("%s ",iden[k]);
}
printf("\n\nDelimiters: ");
for(p=0;p<x;p++)
printf("%c ",delim[p]);
printf("\n");
getch();
}

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-2-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-3-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-2
Program to check whether entered CFG is valid or not and then print
terminals and non terminals.

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<mem.h>

void main()
{
char prod[20][20],ch,term[20],nonterm[20],non[20];
int i,j,row=0,col=0,count=0,t=0,nt=0,flag=0,v=0;
clrscr();
memset(prod,0,400); memset(term,0,20);
memset(nonterm,0,20); memset(non,0,20);
printf("Enter the productions in the form:E=E+T and put @ at the end of
prod\n");
while((ch=getchar())!='@')
{
if(ch!='\n')
{
prod[row][col]=ch;
col++;
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-4-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

}
else
{
row++; col=0;
}
}

for(i=0;i<row;i++)
{
j=0;
while(prod[i][j]!='\0')
{
if(isupper(prod[i][j]))
{
nonterm[nt]=prod[i][j];
nt++;
}
else
{
term[t]=prod[i][j];
t++;
}
j++;
}
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-5-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

}
printf("The terminals are:\n");
for(i=0;i<t;i++)
{
if(term[i]!='=')
printf("%c\n",term[i]);
}

printf("\n The nonterminals are:\n");


for(i=0;i<nt;i++)
{
flag=0;
for(j=i-1;j>=0;j--)
{
if(nonterm[j]==nonterm[i])
flag=1;
}
if(flag==0)
{
non[v]=nonterm[i];
printf("%c\n",non[v]);
v++;
}
}
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-6-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<row;i++)
{
for(j=0;j<v;j++)
{
if(prod[i][0]==non[j])
count++;
}
}
if(count==row)
{
count=0;
for(i=0;i<v;i++)
{
for(j=0;j<row;j++)
{
if((non[i]==prod[j][0])&&(prod[j][1]=='='))
count++;
}
}
}

if(count==v)
printf("\n GRAMMAR IS VALID");
else
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-7-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

printf("\n GRAMMAR IS INVALID");

getch();
}

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-8-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-3
Program to remove left recursion of a grammar

#include<stdio.h>
#include<conio.h>
void main()
{
char prod[20][30],nt[20],modpro[20][30];
int i,j,k=0,n=0;
clrscr();
printf("Enter productions (@ to terminate):\n");
do
{
gets(prod[n]);
n++;
}while(prod[n-1][0]!='@');
n--;
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
if(prod[i][0]==nt[j])
break;

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
-9-

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

}
if(j==k)
nt[k++]=prod[i][0];
if(prod[i][0]==prod[i][2])
{
modpro[i][0]=prod[i][0];
modpro[i][1]='1';
modpro[i][2]='=';
for(j=3;prod[i][j]!='\0';j++)
modpro[i][j]=prod[i][j];
modpro[i][j]=prod[i][0];
modpro[i][j+1]='1';
modpro[i][j+2]='\0';
}
else
{
strcpy(modpro[i],prod[i]);
j=strlen(modpro[i]);
modpro[i][j]=prod[i][0];
modpro[i][j+1]='1';
modpro[i][j+2]='\0';
}
}
for(i=0;i<k;i++)
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 10 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
modpro[n][0]=nt[i];
strcat(modpro[n],"1=$");
n++;
}
printf("Grammar without left recursion\n");
for(i=0;i<n;i++)
puts(modpro[i]);
getch();
}
OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 11 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-4
Program to find FIRST of each nonterminal of a valid CFG

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char fin[10][20],st[10][20],ft[20][20],fol[20][20];
int a=0,e,i,t,b,c,n,k,l=0,j,s,m,p;
clrscr();
printf("enter the no. of productions:\n");
scanf("%d",&n);
printf("enter the productions in a grammar in the form: E->E+T|F \n");
for(i=0;i<n;i++)
scanf("%s",st[i]);
for(i=0;i<n;i++)
fol[i][0]='\0';
for(s=0;s<n;s++)
{
for(i=0;i<n;i++)
{
j=3;

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 12 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

l=0;
a=0;
l1:if(!((st[i][j]>64)&&(st[i][j]<91)))
{
for(m=0;m<l;m++)
{
if(ft[i][m]==st[i][j])
goto s1;
}
ft[i][l]=st[i][j];
l=l+1;
s1:j=j+1;
}
else
{
if(s>0)
{
while(st[i][j]!=st[a][0])
{
a++;
}
b=0;
while(ft[a][b]!='\0')
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 13 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(m=0;m<l;m++)
{
if(ft[i][m]==ft[a][b])
goto s2;
}
ft[i][l]=ft[a][b];
l=l+1;
s2:b=b+1;
}
}
}
while(st[i][j]!='\0')
{
if(st[i][j]=='|')
{
j=j+1;
goto l1;
}
j=j+1;
}
ft[i][l]='\0';
}
}
printf("first pos\n");
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 14 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<n;i++)
printf("FIRS[%c]=%s\n",st[i][0],ft[i]);
getch();
}

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 15 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-5
Program to find FOLLOW of each nonterminal of a valid CFG

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char fin[10][20],st[10][20],ft[20][20],fol[20][20];
int a=0,e,i,t,b,c,n,k,l=0,j,s,m,p;
clrscr();
printf("Enter the no. of PRODUCTIONS:\n");
scanf("%d",&n);
printf("Enter the productions in a grammar\n");
for(i=0;i<n;i++)
scanf("%s",st[i]);
for(i=0;i<n;i++)
fol[i][0]='\0';
for(s=0;s<n;s++)
{
for(i=0;i<n;i++)
{
j=3;

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 16 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

l=0;
a=0;
l1:if(!((st[i][j]>64)&&(st[i][j]<91)))
{
for(m=0;m<l;m++)
{
if(ft[i][m]==st[i][j])
goto s1;
}
ft[i][l]=st[i][j];
l=l+1;
s1:j=j+1;
}
else
{
if(s>0)
{
while(st[i][j]!=st[a][0])
{
a++;
}
b=0;
while(ft[a][b]!='\0')
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 17 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(m=0;m<l;m++)
{
if(ft[i][m]==ft[a][b])
goto s2;
}
ft[i][l]=ft[a][b];
l=l+1;
s2:b=b+1;
}
}
}
while(st[i][j]!='\0')
{
if(st[i][j]=='|')
{
j=j+1;
goto l1;
}
j=j+1;
}
ft[i][l]='\0';
}
}
printf("first pos\n");
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 18 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<n;i++)
printf("FIRS[%c]=%s\n",st[i][0],ft[i]);
fol[0][0]='$';
for(i=0;i<n;i++)
{
k=0;
j=3;
if(i==0)
l=1;
else
l=0;
k1:while((st[i][0]!=st[k][j])&&(k<n))
{
if(st[k][j]=='\0')
{
k++;
j=2;
}
j++;
}
j=j+1;
if(st[i][0]==st[k][j-1])
{
if((st[k][j]!='|')&&(st[k][j]!='\0'))
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 19 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
a=0;
if(!((st[k][j]>64)&&(st[k][j]<91)))
{
for(m=0;m<l;m++)
{
if(fol[i][m]==st[k][j])
goto q3;
}
fol[i][l]=st[k][j];
l++;
q3:
}
else
{
while(st[k][j]!=st[a][0])
{
a++;
}
p=0;
while(ft[a][p]!='\0')
{
if(ft[a][p]!='@')
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 20 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(m=0;m<l;m++)
{
if(fol[i][m]==ft[a][p])
goto q2;
}
fol[i][l]=ft[a][p];
l=l+1;
}
else
e=1;
q2:p++;
}
if(e==1)
{
e=0;
goto a1;
}
}
}
else
{
a1:c=0;
a=0;
while(st[k][0]!=st[a][0])
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 21 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
a++;
}
while((fol[a][c]!='\0')&&(st[a][0]!=st[i][0]))
{
for(m=0;m<l;m++)
{
if(fol[i][m]==fol[a][c])
goto q1;
}
fol[i][l]=fol[a][c];
l++;
q1:c++;
}
}
goto k1;
}
fol[i][l]='\0';
}
printf("follow pos\n");
for(i=0;i<n;i++)
printf("FOLLOW[%c]=%s\n",st[i][0],fol[i]);
printf("\n");
getch();
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 22 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 23 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-6
Program to construct Predictive Parsing Table.

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char fin[10][20],st[10][20],ft[20][20],fol[20][20];
int a=0,e,i,t,b,c,n,k,l=0,j,s,m,p;
clrscr();
printf("Enter the no. of productions:\n");
scanf("%d",&n);
printf("Enter the productions in a grammar\n");
for(i=0;i<n;i++)
scanf("%s",st[i]);
for(i=0;i<n;i++)
fol[i][0]='\0';
for(s=0;s<n;s++)
{
for(i=0;i<n;i++)
{
j=3;

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 24 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

l=0;
a=0;
l1:if(!((st[i][j]>64)&&(st[i][j]<91)))
{
for(m=0;m<l;m++)
{
if(ft[i][m]==st[i][j])
goto s1;
}
ft[i][l]=st[i][j];
l=l+1;
s1:j=j+1;
}
else
{
if(s>0)
{
while(st[i][j]!=st[a][0])
{
a++;
}
b=0;
while(ft[a][b]!='\0')
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 25 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(m=0;m<l;m++)
{
if(ft[i][m]==ft[a][b])
goto s2;
}
ft[i][l]=ft[a][b];
l=l+1;
s2:b=b+1;
}
}
}
while(st[i][j]!='\0')
{
if(st[i][j]=='|')
{
j=j+1;
goto l1;
}
j=j+1;
}
ft[i][l]='\0';
}
}
printf("first pos\n");
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 26 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<n;i++)
printf("FIRS[%c]=%s\n",st[i][0],ft[i]);
fol[0][0]='$';
for(i=0;i<n;i++)
{
k=0;
j=3;
if(i==0)
l=1;
else
l=0;
k1:while((st[i][0]!=st[k][j])&&(k<n))
{
if(st[k][j]=='\0')
{
k++;
j=2;
}
j++;
}
j=j+1;
if(st[i][0]==st[k][j-1])
{
if((st[k][j]!='|')&&(st[k][j]!='\0'))
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 27 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
a=0;
if(!((st[k][j]>64)&&(st[k][j]<91)))
{
for(m=0;m<l;m++)
{
if(fol[i][m]==st[k][j])
goto q3;
}
fol[i][l]=st[k][j];
l++;
q3:
}
else
{
while(st[k][j]!=st[a][0])
{
a++;
}
p=0;
while(ft[a][p]!='\0')
{
if(ft[a][p]!='@')
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 28 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(m=0;m<l;m++)
{
if(fol[i][m]==ft[a][p])
goto q2;
}
fol[i][l]=ft[a][p];
l=l+1;
}
else
e=1;
q2:p++;
}
if(e==1)
{
e=0;
goto a1;
}
}
}
else
{
a1:c=0;
a=0;
while(st[k][0]!=st[a][0])
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 29 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
a++;
}
while((fol[a][c]!='\0')&&(st[a][0]!=st[i][0]))
{
for(m=0;m<l;m++)
{
if(fol[i][m]==fol[a][c])
goto q1;
}
fol[i][l]=fol[a][c];
l++;
q1:c++;
}
}
goto k1;
}
fol[i][l]='\0';
}
printf("follow pos\n");
for(i=0;i<n;i++)
printf("FOLLOW[%c]=%s\n",st[i][0],fol[i]);
printf("\n");
s=0;
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 30 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<n;i++)
{
j=3;
while(st[i][j]!='\0')
{
if((st[i][j-1]=='|')||(j==3))
{
for(p=0;p<=2;p++)
{
fin[s][p]=st[i][p];
}
t=j;
for(p=3;((st[i][j]!='|')&&(st[i][j]!='\0'));p++)
{
fin[s][p]=st[i][j];
j++;
}
fin[s][p]='\0';
if(st[i][k]=='@')
{
b=0;
a=0;
while(st[a][0]!=st[i][0])
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 31 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

a++;
}
while(fol[a][b]!='\0')
{
printf("M[%c,%c]=%s\n",st[i][0],fol[a][b],fin[s]);
b++;
}
}
else if(!((st[i][t]>64)&&(st[i][t]<91)))
printf("M[%c,%c]=%s\n",st[i][0],st[i][t],fin[s]);
else
{
b=0;
a=0;
while(st[a][0]!=st[i][3])
{
a++;
}
while(ft[a][b]!='\0')
{
printf("M[%c,%c]=%s\n",st[i][0],ft[a][b],fin[s]);
b++;
}
}
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 32 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

s++;
}
if(st[i][j]=='|')
j++;
}
}
getch();
}

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 33 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 34 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-7
Program to check if entered grammar is operator grammar or not

#include<stdio.h>
#include<conio.h>
void main()
{
char prod[20][30];
int i,j,n=0,op=1;
clrscr();
printf("Enter the productions @ to terminate:\n");
do
{
gets(prod[n]);
n++;
}while(prod[n-1][0]!='@');
for(i=0;i<n;i++)
{
for(j=2;prod[i][j]!='\0';j++)
{
if(!(isupper(prod[i][j])))
continue;
if(isupper(prod[i][j+1]))

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 35 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
op=0;
break;
}
}
if(op==0)
break;
}
if(op==0)
printf("The entered grammar is not operator grammar");
else
printf("The entered gramma is operator grammar");
getch();
}

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 36 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 37 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-8
Program to find Leading and Trailing of each non terminal

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
char p[20][30];
int n;
void leading(char sym,char lead[]);
void add(char lt[],char local[],int *s);
void trailing(char sym,char trail[]);
void main()
{
char lead[20],trail[20],sym,nonterm[20];
int i=0,j,k=0;
clrscr();
printf("Enter the productions (@ to terminate):\n");
do
{
gets(p[i]);
i++;
}while(p[i-1][0]!='@');
n=i-1;

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 38 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<n;i++)
{

for(j=0;j<k;j++)
{
if(p[i][0]==nonterm[j])
break;
}
if(j==k)
{

nonterm[k++]=p[i][0];
leading(nonterm[k-1],lead);
printf("\nLeading(%c)= %s ",nonterm[k-1],lead);

}
}
printf("\n");
for(i=0;i<k;i++)
{
trailing(nonterm[i],trail);
printf("\nTrailing(%c)= %s ",nonterm[i],trail);
}
getch();
}
void leading(char sym,char lead[])
{
int i,s=0;
char local[20];
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 39 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

for(i=0;i<n;i++)
{
if(p[i][0]==sym)
{
if(isupper(p[i][2]))
{
if(p[i][0]!=p[i][2])
{
leading(p[i][2],local);
add(lead,local,&s);
}
if( (!isupper(p[i][3])) && (p[i][3]!='$') )
{
lead[s++]=p[i][3];
lead[s]='\0';
}
}
else if( (!isupper(p[i][2])) && (p[i][2]!='$') )
{
lead[s++]=p[i][2];
lead[s]='\0';
}
}
}
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 40 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

}
void trailing(char sym,char trail[])
{
int i,s=0,x;
char local[20];
for(i=0;i<n;i++)
{
if(p[i][0]==sym)
{
x=strlen(p[i]);
if(isupper(p[i][x-1]))
{
if(p[i][0]!=p[i][x-1])
{
trailing(p[i][x-1],local);
add(trail,local,&s);
}
if( (x>3) && (!isupper(p[i][x-2])) && (p[i][x-2]!
='$') )
{
trail[s++]=p[i][x-2];
trail[s]='\0';
}
}
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 41 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

else if( (!isupper(p[i][x-1])) && (p[i][x-1]!='$') )


{
trail[s++]=p[i][x-1];
trail[s]='\0';
}
}
}
}
void add(char lt[],char local[],int *s)
{
int i,j;
for(i=0;local[i]!='\0';i++)
{
for(j=0;j<(*s);j++)
{
if(local[i]==lt[j])
break;
}
if(j==(*s))
lt[(*s)++]=local[i];
}
lt[(*s)]='\0';
}

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 42 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 43 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

PROGRAM-9
Program to construct operator precedence table for operator
grammar

#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<string.h>
char arr[10];
char leadchar[10][10],trailchar[10][10];
int x,lch=1,tch=1,count=0;
void lead(char b[20][20],char w,int j);
void trail(char b[20][20],char w,int j);
void precedence(char b[20][20],int row);
void main()
{
char a[100],b[20][20],c[10],w;
int j=0,k=0,i=0,z=0,l,m=0,p=0,flag=0;
clrscr();
printf("Enter the production:");
scanf("\n%[^#]",&a);
l=strlen(a);
for(i=0;i<l;i++)
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 44 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

if(a[i]=='\n')
{
b[j][k]='\0';
j++;
k=0;
}
else
{
b[j][k]=a[i];
k++;
}
b[j][k]='\0';
}
for(i=0;i<=j;i++)
{
c[i]=b[i][0];
}
for(i=0;i<=j;i++)
{
for(z=i+1;z<=j;z++)
{
if(c[i]==c[z])
{
c[z]='#';
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 45 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

}
}
}
for(i=0;i<=j;i++)
{
if(c[i]!='#')
{
w=c[i];
printf("\nLeading of %c is ",w);
leadchar[count][0]=w;
lead(b,w,j);
leadchar[count][lch]='\0';
count++;
lch=1;
printf("\nTrailing of %c is ",w);
x=0;
trailchar[i][0]=w;
trail(b,w,j);
tch=1;
for(m=0;m<x;m++)
{
for(p=0;p<m;p++)
{
if(arr[p]==arr[m])
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 46 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
flag=1;
}
}
if(flag==0)
{
printf("%c ",arr[m]);
trailchar[i][tch++]=arr[m];
}
flag=0;
}
trailchar[i][tch]='\0';
}
}
precedence(b,j);
getch();

}
void lead(char b[20][20],char w,int j)
{
int i;
for(i=0;i<=j;i++)
{
if(w==b[i][0])
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 47 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
if(w==b[i][3])
{
printf("%c",b[i][4]);
leadchar[count][lch++]=b[i][4];
}
else if(!isupper(b[i][3]))
{
printf("%c",b[i][3]);
leadchar[count][lch++]=b[i][3];
}
else
{
lead(b,b[i][3],j);
}
}
}
}

void trail(char b[20][20],char w,int j)


{
int i,l;
for(i=0;i<=j;i++)
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 48 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

if(w==b[i][0])
{
l=strlen(b[i]);
if(w==b[i][l-1])
{
arr[x]=b[i][l-2];
x++;
}
else if(!isupper(b[i][l-1]))
{
arr[x]=b[i][l-1];
x++;
}
else
{
if(l>=5)
{
arr[x]=b[i][l-2];
x++;
}
trail(b,b[i][l-1],j);
}
}
}
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 49 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

void precedence(char b[20][20],int row)


{
int i=0,j=0,k=1,s=0,m=0,s1;
char ter[10][10];
printf("\n\nThe precedence table is:\n");
for(i=0;i<row;i++)
{
for(j=3;j<strlen(b[i]);j++)
{
if(islower(b[i][j]))
{
ter[k][0]=ter[0][k]=b[i][j];
k++;
}
}
}
ter[k][0]=ter[0][k]='$';

for(i=0;i<row;i++)
{
for(j=3;strlen(b[i])>3 && j<strlen(b[i]);j++)
{
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 50 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

if(islower(b[i][j]) && islower(b[i][j+1]))


{
for(m=1;m<k && ter[m][0]!=b[i][j];m++);
for(s=1;s<k && ter[0][s]!=b[i][j+1];s++);
ter[m][s]='=';
}
if(islower(b[i][j]) && islower(b[i][j+2]))
{
for(m=1;m<k && ter[m][0]!=b[i][j];m++);
for(s=1;s<k && ter[0][s]!=b[i][j+2];s++);
ter[m][s]='=';
}
if(islower(b[i][j]) && isupper(b[i][j+1]))
{
for(m=1;m<k && ter[m][0]!=b[i][j];m++);
for(lch=0;leadchar[lch][0]!=b[i][j+1];lch++);
for(s1=1;s1<strlen(leadchar[lch]);s1++)
{
for(s=1;s<k && ter[0][s]!=leadchar[lch][s1];
s++);
ter[m][s]='<';
}
}
if(isupper(b[i][j]) && islower(b[i][j+1]))
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 51 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

{
for(m=1;m<k && ter[0][m]!=b[i][j+1];m++);
for(tch=0;trailchar[tch][0]!=b[i][j];tch++);
for(s1=1;s1<strlen(trailchar[tch]);s1++)
{
for(s=1;s<k &&
ter[s][0]!
=trailchar[tch][s1];s++);
ter[s][m]='>';
}
}
if(isupper(b[i][j+1]) && b[i][j]==leadchar[0][0])
{
for(s1=1;s1<strlen(leadchar[0]);s1++)
{
for(s=1;s<k && ter[0][s]!=leadchar[0][s1];
s++);
ter[k][s]='<';
}
}
if(isupper(b[i][j]) && b[i][j]==trailchar[0][0])
{
for(s1=1;s1<strlen(trailchar[0]);s1++)
{
for(s=1;s<k && ter[0][s]!=trailchar[0][s1];
DEPARTMENT OF COMPUTER SCIENCE
AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 52 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

s++);
ter[k][s]='>';
}
}
}
}
ter[0][0]=' ';
for(i=0;i<=k;i++)
{
for(j=0;j<=k;j++)
{
printf("%c\t",ter[i][j]);
}
printf("\n");
}
}

OUTPUT:

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 53 -

ECS-653

JSS ACADEMY OF TECHNICAL

COMPILER DESIGN PRACTICAL FILE

EDUCATION,NOIDA

DEPARTMENT OF COMPUTER SCIENCE


AND ENGINEERING (2011-2012)

VIBHA MAHESHWARI
0909110127
- 54 -

S-ar putea să vă placă și