/*OPERATOR PRECEDENCE PARSER*/ #include<stdio.h> #include<conio.h> void main() { char stack[20],ip[20],opt[10][10][1],ter[10]; int i,j,k,n,top=0,col,row; clrscr(); for(i=0;i<10;i++){stack[i]=NULL; ip[i]=NULL; for(j=0;j<10;j++){opt[i][j][1]=NULL;}} printf("Enter the no.of terminals:"); scanf("%d",&n); printf("\nEnter the terminals:"); scanf("%s",ter); printf("\nEnter the table values:\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("Enter the value for %c %c:",ter[i],ter[j]); scanf("%s",opt[i][j]); } } printf("\nOPERATOR PRECEDENCE TABLE:\n"); for(i=0;i<n;i++){printf("\t%c",ter[i]);} printf("\n"); for(i=0;i<n;i++){printf("\n%c",ter[i]); for(j=0;j<n;j++){printf("\t%c",opt[i][j][0]);}} stack[top]='$'; printf("\nEnter the input string:"); scanf("%s",ip); i=0; printf("\nSTACK\t\t\tINPUT STRING\t\t\tACTION\n"); printf("\n%s\t\t\t%s\t\t\t",stack,ip); while(i<=strlen(ip)) { for(k=0;k<n;k++) { if(stack[top]==ter[k]) col=k; if(ip[i]==ter[k]) row=k; } if((stack[top]=='$')&&(ip[i]=='$')){ printf("String is accepted"); break;} else if((opt[col][row][0]=='<') ||(opt[col][row][0]=='=')) { stack[++top]=opt[col][row][0]; stack[++top]=ip[i]; printf("Shift %c",ip[i]); i++; } else{ if(opt[col][row][0]=='>') { while(stack[top]!='<'){--top;} top=top-1; printf("Reduce"); } else { printf("\nString is not accepted"); break; } } printf("\n"); for(k=0;k<=top;k++) { printf("%c",stack[k]); } printf("\t\t\t"); for(k=i;k<strlen(ip);k++){ printf("%c",ip[k]); } printf("\t\t\t"); } getch(); } |
Friday, August 27, 2010
C PROGRAM - OPERATOR PRECEDENCE PARSER
OPERATOR PRECEDENCE TABLE
/*OPERATOR PRECEDENCE TABLE*/ #include<stdio.h> #include<conio.h> void main() { char lead[10][10],trail[10][10],pro[10][10],ter[10],opt[10][10][10],nt[10]; int i,j,k,flag=0,n,inc=0,tptr=0,index=0,row,col,in,l; for(i=0;i<10;i++){ ter[i]=NULL; for(j=0;j<10;j++){ lead[i][j]=NULL; trail[i][j]=NULL; pro[i][j]=NULL; for(k=0;k<10;k++){opt[i][j][k]=NULL;}}} clrscr(); printf("Enter the number of productions:"); scanf("%d",&n); printf("Enter the productions:"); for(i=0;i<n;i++) { scanf("%s",pro[i]); } for(i=0;i<n;i++) { flag=0; for(j=0;j<inc;j++) { if(pro[i][0]==nt[j]) { flag=1; } } if(flag==0){nt[inc++]=pro[i][0];} } printf("\nEnter the leading:\n"); for(i=0;i<inc;i++) { printf("Leading(%c):",nt[i]); scanf("%s",lead[i]); } printf("\nEnter the trailing:\n"); for(i=0;i<inc;i++) { printf("Trailing(%c):",nt[i]); scanf("%s",trail[i]); } for(i=0;i<inc;i++) { for(k=0;k<strlen(trail[i]);k++) { flag=0; for(j=0;j<tptr;j++) { if(trail[i][k]==ter[j]) flag=1; } if(flag==0){ter[tptr++]=trail[i][k];}} } for(i=0;i<inc;i++) { for(k=0;k<strlen(lead[i]);k++) { flag=0; for(j=0;j<tptr;j++) { if(lead[i][k]==ter[j]) flag=1; } if(flag==0){ter[tptr++]=lead[i][k]; } } } ter[tptr++]='$'; for(j=0;j<tptr;j++){ if(ter[j]=='$')col=j; } for(j=0;j<strlen(lead[0]);j++) { for(k=0;k<tptr;k++){if(lead[0][j]==ter[k])row=k;} opt[col][row][index]='<'; } for(j=0;j<tptr;j++){ if(ter[j]=='$')row=j; } for(j=0;j<strlen(trail[0]);j++) { for(k=0;k<tptr;k++){if(trail[0][j]==ter[k])col=k;} opt[col][row][index]='>'; } for(i=0;i<n;i++) { for(j=3;j<strlen(pro[i]);j++) { if((!isupper(pro[i][j]))&&(j!=strlen(pro[i])-1)) { for(k=0;k<tptr;k++){if(pro[i][j]==ter[k])col=k;} if(!isupper(pro[i][j+1])) { for(k=0;k<tptr;k++){if(pro[i][j+1]==ter[k])row=k;} opt[col][row][index]='='; } else{ if(isupper(pro[i][j+1])) { if(!isupper(pro[i][j+2])){ for(k=0;k<tptr;k++){if(pro[i][j+2]==ter[k])row=k;} opt[col][row][index]='='; break; } } } } break; }} for(i=0;i<n;i++) { for(j=3;j<strlen(pro[i]);j++) { if(isupper(pro[i][j])) { for(k=0;k<inc;k++){if(pro[i][j]==nt[k]){in=k;}} if(!isupper(pro[i][j+1])) { for(k=0;k<tptr;k++){ if(pro[i][j+1]==ter[k]){row=k;}} for(k=0;k<strlen(trail[in]);k++) { for(l=0;l<tptr;l++){if(trail[in][k]==ter[l]){col=l;}} opt[col][row][index]='>'; } } } }} for(i=0;i<n;i++) { for(j=3;j<strlen(pro[i]);j++) { if(!isupper(pro[i][j])) { for(k=0;k<tptr;k++){if(pro[i][j]==ter[k]){col=k;}} if(isupper(pro[i][j+1])) { for(k=0;k<inc;k++){if(pro[i][j+1]==nt[k]){in=k;}} for(k=0;k<strlen(lead[in]);k++) { for(l=0;l<tptr;l++){if(lead[in][k]==ter[l]){row=l;}} opt[col][row][index]='<'; } } } }} printf("\n\nOPERATOR PRECEDENCE TABLE:\n"); for(i=0;i<tptr;i++) { printf("\t%c",ter[i]); } printf("\n\n"); for(i=0;i<tptr;i++) { printf("\n\n%c",ter[i]); for(j=0;j<tptr;j++) { if(opt[i][j][0]==NULL){opt[i][j][0]='-';} printf("\t%c",opt[i][j][0]); } } getch(); } |
SLR PARSING TABLE
/*SLR PARSING TABLE*/ /*Checks whether the input string is accepted or not*/ #include<stdio.h> #include<conio.h> void main() { char table[20][20][20],ter[20],stack[20],ip[20],st1[20],pro[20][20],num; int i,j,t,k,top=0,st,col,row,pop,np,no,len; clrscr(); for(i=0;i<20;i++){ ter[i]=NULL; stack[i]=NULL; ip[i]=NULL; st1[i]=NULL; for(j=0;j<20;j++){ pro[i][j]=NULL; for(k=0;k<20;k++) { table[i][j][k]=NULL; } } } printf("Enter the no of productions:"); scanf("%d",&np); printf("Enter the productions:"); for(i=0;i<np;i++) { scanf("%s",pro[i]); } printf("Enter the no.of states:"); scanf("%d",&st); printf("Enter the states:"); scanf("%s",st1); printf("Enter the no of terminals:"); scanf("%d",&t); printf("Enter the terminals:"); scanf("%s",ter); for(i=0;i<st;i++) { for(j=0;j<t;j++) { printf("\nEnter the value for %c %c:",st1[i],ter[j]); scanf("%s",table[i][j]); } } printf("\nSLR TABLE:\n"); for(i=0;i<t;i++) { printf("\t%c",ter[i]); } for(i=0;i<st;i++) { printf("\n\n%c",st1[i]); for(j=0;j<t;j++) { printf("\t%s",table[i][j]); } } stack[top]='a'; printf("\nEnter the input string:"); scanf("%s",ip); i=0; printf("\n\nSTACK\t\tINPUT STRING\t\tACTION\n"); printf("\n%s\t\t%s\t\t",stack,ip); while(i<=strlen(ip) ) { for(j=0;j<st;j++) { if(stack[top]==st1[j]) col=j; } for(j=0;j<t;j++) { if(ip[i]==ter[j]) { row=j; } } if((stack[top]=='b')&&(ip[i]=='$')){printf("\nString accepted");break;} else if(table[col][row][0]=='s') { top++; stack[top]=ter[row]; top++; stack[top]=table[col][row][1]; i++; printf("Shift %c %d\n",ter[row],table[col][row][1]); } else if(table[col][row][0]=='r') { no=(int)table[col][row][1]; no=no-48; len=strlen(pro[no]); len=len-3; pop=2*len; printf("POP %d",pop); for(j=0;j<pop;j++) { top=top-1; } top++; stack[top]=pro[no][0]; k=top; k=k-1; printf(" Push [%c,",pro[no][0]); for(j=0;j<st;j++) { if(stack[k]==st1[j]) { col=j; } } k++; for(j=0;j<t;j++) { if(stack[k]==ter[j]) { row=j; } } top++; stack[top]=table[col][row][0]; printf("%c]\n",table[col][row][0]); } else{printf("\nError\nThe string not accepted.");break; } printf("\n"); for(j=0;j<=top;j++) { printf("%c",stack[j]); } printf("\t\t"); for(j=i;j<strlen(ip);j++) { printf("%c",ip[j]); } printf("\t\t"); } getch(); } |
C program- LL1 grammar
/*LL1 PARSING TABLE*/ /*To check whether the grammar is LL1 or not*/ #include<stdio.h> #include<conio.h> void main() { char pro[10][10],first[10][10],follow[10][10],nt[10],ter[10],res[10][10][10],temp[10]; int npro,noter=0,nont=0,i,j,k,flag=0,count[10][10],row,col,l,m,n,index; clrscr(); for(i=0;i<10;i++) { for(j=0;j<10;j++) { count[i][j]=NULL; for(k=0;k<10;k++){ res[i][j][k]=NULL; } } } printf("Enter the no of productions:"); scanf("%d",&npro); printf("Enter the productions:"); for(i=0;i<npro;i++) { scanf("%s",pro[i]); } for(i=0;i<npro;i++) { flag=0; for(j=0;j<nont;j++) { if(nt[j]==pro[i][0]) { flag=1; } } if(flag==0) { nt[nont]=pro[i][0]; nont++; } } printf("\nEnter the first values:\n"); for(i=0;i<nont;i++) { printf("First value(%c):",nt[i]); scanf("%s",first[i]); } printf("\nEnter the follow values:\n"); for(i=0;i<nont;i++) { printf("Follow value(%c):",nt[i]); scanf("%s",follow[i]); } for(i=0;i<nont;i++) { flag=0; for(j=0;j<strlen(first[i]);j++) { for(k=0;k<noter;k++) { if(ter[k]==first[i][j]) { flag=1; } } if(flag==0) { if(first[i][j]!='#') { ter[noter]=first[i][j]; noter++; } } } } for(i=0;i<nont;i++) { flag=0; for(j=0;j<strlen(follow[i]);j++) { for(k=0;k<noter;k++) { if(ter[k]==follow[i][j]) { flag=1; } } if(flag==0) { ter[noter]=follow[i][j]; noter++; } } } for(i=0;i<nont;i++) { for(j=0;j<strlen(first[i]);j++) { flag=0; if(first[i][j]=='#') { col=i; for(m=0;m<strlen(follow[col]);m++) { for(l=0;l<noter;l++) { if(ter[l]==follow[col][m]) { row=l; } } temp[0]=nt[col]; temp[1]='-' ; temp[2]='>'; temp[3]='#'; temp[4]='\0'; printf("temp %s",temp); strcpy(res[col][row],temp); count[col][row]+=1; for(k=0;k<10;k++){ temp[k]=NULL; } } } else{ for(l=0;l<noter;l++) { if(ter[l]==first[i][j]) { row=l; } } for(k=0;k<npro;k++){ if(nt[i]==pro[k][0]) { col=i; if((pro[k][3]==first[i][j])&&(pro[k][0]==nt[col])) { strcpy(res[col][row],pro[k]); count[col][row]+=1; } else { if((isupper(pro[k][3]))&&(pro[k][0]==nt[col])) { flag=0; for(m=0;m<nont;m++) { if(nt[m]==pro[k][3]){index=m;flag=1;} } if(flag==1){ for(m=0;m<strlen(first[index]);m++) {if(first[i][j]==first[index][m]) {strcpy(res[col][row],pro[k]); count[col][row]+=1;} } } }}}}} }} printf("LL1 Table\n\n"); flag=0; for(i=0;i<noter;i++) { printf("\t%c",ter[i]); } for(j=0;j<nont;j++) { printf("\n\n%c",nt[j]); for(k=0;k<noter;k++) { printf("\t%s",res[j][k]); if(count[j][k]>1){flag=1;} } } if(flag==1){printf("\nThe given grammar is not LL1");} else{printf("\nThe given grammar is LL1");} getch(); } |
JAVA PROGRAM WITHOUT USING BIG INTEGER
/* PROGRAM TO CALCULATE THE POWER(2,5-DIGIT NUMBER) WITHOUT USING BIG INTEGER AND MATH FUNCTIONS*/ /*This works for the highest 5 digit number 99999 also*/ /* Hope you make the best of it*/ import java.lang.*; import java.io.*; class compute { public static void main(String args[]) { int i,rem=0,inc=1,inc1=0,j,value,carry=0,k,flag=0;; int num[]=new int[60000]; int oldvalue[]=new int[60000]; try{ DataInputStream in=new DataInputStream(System.in); System.out.print("Enter the number:"); int n=Integer.parseInt(in.readLine()); num[0]=1; for(i=1;i<=n;i++) { for(j=0;j<inc;j++) { num[j]=num[j]*2; if(num[j]>9) { value=num[j]%10; oldvalue[inc1]=value+carry; carry=1; inc1++; if(inc==inc1) { oldvalue[inc1++]=carry; carry=0; } } else { oldvalue[inc1]=num[j]+carry; inc1++; carry=0; } } for(k=0;k<inc1;k++) { num[k]=oldvalue[k]; } inc=inc1; carry=0; inc1=0; } System.out.print("\n power(2,"+n+")="); for(k=inc-1;k>=0;k--) { System.out.print(num[k]); } }/*try block*/ catch(IOException e){} } } |
Subscribe to:
Posts (Atom)