Untitled
unknown
plain_text
3 months ago
2.8 kB
6
Indexable
AIM: Write a program for eliminating the left factoring of the given grammar. Program: #include<iostream.h> #include<stdio.h> #include<conio.h> #include<string.h> //Structure Declaration struct production { char lf; char rt[10]; int prod_rear; int fl; }; struct production prodn[20],prodn_new[20]; //Creation of object //Variables Declaration int b=-1,d,f,q,n,m=0,c=0; char terminal[20],nonterm[20],alpha[10],extra[10]; char epsilon='^'; //Beginning of Main Program void main() { clrscr(); //Input of Special characters cout<<"\nEnter the number of Special characters(except non-terminals): "; cin>>q; cout<<"Enter the special characters for your production: "; for(int cnt=0;cnt<q;cnt++) { cin>>alpha[cnt]; } //Input of Productions cout<<"\nEnter the number of productions: "; cin>>n; for(cnt=0;cnt<=n-1;cnt++) { cout<<"Enter the "<< cnt+1<<" production: "; cin>>prodn[cnt].lf; cout<<"->"; cin>>prodn[cnt].rt; prodn[cnt].prod_rear=strlen(prodn[cnt].rt); prodn[cnt].fl=0; } //Condition for left factoring for(int cnt1=0;cnt1<n;cnt1++) { for(int cnt2=cnt1+1;cnt2<n;cnt2++) { if(prodn[cnt1].lf==prodn[cnt2].lf) { cnt=0; int p=-1; while((prodn[cnt1].rt[cnt]!='\0')&&(prodn[cnt2].rt[cnt]!='\0')) { if(prodn[cnt1].rt[cnt]==prodn[cnt2].rt[cnt]) { extra[++p]=prodn[cnt1].rt[cnt]; prodn[cnt1].fl=1; prodn[cnt2].fl=1; } else { if(p==-1) break; else { int h=0,u=0; prodn_new[++b].lf=prodn[cnt1].lf; strcpy(prodn_new[b].rt,extra); prodn_new[b].rt[p+1]=alpha[c]; prodn_new[++b].lf=alpha[c]; for(int g=cnt;g<prodn[cnt2].prod_rear;g++) prodn_new[b].rt[h++]=prodn[cnt2].rt[g]; prodn_new[++b].lf=alpha[c]; for(g=cnt;g<=prodn[cnt1].prod_rear;g++) prodn_new[b].rt[u++]=prodn[cnt1].rt[g]; m=1; break; } } cnt++; } if((prodn[cnt1].rt[cnt]==0)&&(m==0)) { int h=0; prodn_new[++b].lf=prodn[cnt1].lf; strcpy(prodn_new[b].rt,extra); prodn_new[b].rt[p+1]=alpha[c]; prodn_new[++b].lf=alpha[c]; prodn_new[b].rt[0]=epsilon; prodn_new[++b].lf=alpha[c]; for(int g=cnt;g<prodn[cnt2].prod_rear;g++) prodn_new[b].rt[h++]=prodn[cnt2].rt[g]; } if((prodn[cnt2].rt[cnt]==0)&&(m==0)) { int h=0; prodn_new[++b].lf=prodn[cnt1].lf; strcpy(prodn_new[b].rt,extra); prodn_new[b].rt[p+1]=alpha[c]; prodn_new[++b].lf=alpha[c]; prodn_new[b].rt[0]=epsilon; prodn_new[++b].lf=alpha[c]; for(int g=cnt;g<prodn[cnt1].prod_rear;g++) prodn_new[b].rt[h++]=prodn[cnt1].rt[g]; } c++; m=0; } } } OUTPUT:-
Editor is loading...
Leave a Comment