Program : Left Recursion
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main() //main function
{
char pro[20],alph[10],beta[10];
int i,len,u,pos;
clrscr();
printf("Enter the production\t");
gets(pro); //get the input production
len=strlen(pro); //find length of production
pos=3;
u=0;
if(pro[0]!=pro[2]) //check production is non left recursive
{
printf("\nProduction is not left recursive\n");
}
else //if production is left recursive
{
printf("\nProduction is left recursive\n");
for(i=3;i<=len;i++) //converting to non left recursive production
{
if(pro[i]!='|')
{
alph[u]=pro[i];
u++;
pos++;
}
else
{
break;
}
alph[u]='\0';
}
pos++;
u=0;
for(i=pos;i<=len;i++)
{
beta[u]=pro[i];
u++;
}
beta[u]='\0';
printf("\n\nEquivalent non left recursive grammar is:\n");
printf("\n%c=%s%c'\n",pro[0],beta,pro[0]);
printf("\n%c'=%s%c'|e\n",pro[0],alph,pro[0]);
}
getch();
}
0 comments:
Post a Comment