Friday, August 27, 2010

C PROGRAM - OPERATOR PRECEDENCE PARSER

/*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();
}

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){}


}
}
Previous Post Home