0% found this document useful (0 votes)
148 views3 pages

NPP

The document describes an implementation of predictive parsing using a stack. It defines functions to push and pop characters onto a stack, display the stack, and check the top of the stack. The main function gets an input string, appends a '$' and pushes it onto the stack. It iterates through the string, uses the top of the stack to predict the next value, replaces the top with the prediction, and displays the output. If the stack ever equals '$' it accepts the string as valid.

Uploaded by

kittuchaitu
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
148 views3 pages

NPP

The document describes an implementation of predictive parsing using a stack. It defines functions to push and pop characters onto a stack, display the stack, and check the top of the stack. The main function gets an input string, appends a '$' and pushes it onto the stack. It iterates through the string, uses the top of the stack to predict the next value, replaces the top with the prediction, and displays the output. If the stack ever equals '$' it accepts the string as valid.

Uploaded by

kittuchaitu
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

NPP

//To Implement Predictive Parsing


#include<string.h>
#include<conio.h>
#include<stdio.h>
char a[10];
int top=-1,i;
void error()
{
printf("Syntax Error");
}
void push(char k[]) //Pushes The Set Of Characters on to the Stack
{
for(i=0;k[i]!='\0';i++)
{
if(top<9)
a[++top]=k[i];
}
}
char TOS() //Returns TOP of the Stack
{
return a[top];
}
void pop() //Pops 1 element from the Stack
{
if(top>=0)
a[top--]='\0';
}
void display() //Displays Elements Of Stack
{
for(i=0;i<=top;i++)
printf("%c",a[i]);
}
void display1(char p[],int m) //Displays The Present Input String
{
int l;
printf("\t");
for(l=m;p[l]!='\0';l++)
printf("%c",p[l]);
}
char* stack()
{
return a;
}
int main()
{
char ip[20],r[20],st,an;
int ir,ic,j=0,k,z;
char
t[5][6][10]={"$","$","TH","$","TH","$","+TH","$","e","e","$","e","$","$","FU","$","F
U","$","e","*FU","e","e","$","e","$","$","(E)","$","i","$"};
printf("\nEnter any String(Append with $)");
gets(ip);
printf("Stack\tInput\tOutput\n\n");
push("$E");
display();
printf("\t%s\n",ip);
for(j=0;ip[j]!='\0';)
{
if(TOS()==an)
{
pop();
display();
display1(ip,j+1);
Page 1
NPP
printf("\tPOP\n");
j++;
}
an=ip[j];
st=TOS();
if(st=='E')
ir=0;
else if(st=='H')
ir=1;
else if(st=='T')
ir=2;
else if(st=='U')
ir=3;
else if(st=='F')
ir=4;
else
{
error();
break;
}
if(an=='+')ic=0;
else if(an=='*')
ic=1;
else if(an=='(')
ic=2;
else if(an==')')
ic=3;
else if((an>='a'&&an<='z')||(an>='A'&&an<='Z'))
{ic=4;an='i';}
else if(an=='$')
ic=5;
strcpy(r,strrev(t[ir][ic]));
strrev(t[ir][ic]);
pop();
push(r);
if(TOS()=='e')
{
pop();
display();
display1(ip,j);
printf("\t%c->%c\n",st,238);
}
else
{
display();
display1(ip,j);
printf("\t%c->%s\n",st,t[ir][ic]);
}
if(TOS()=='$'&&an=='$')
break;
if(TOS()=='$')
{
error();
break;
}
}
k=strcmp(stack(),"$");
if(k==0)
printf("\n Given String is accepted");
else
printf("\n Given String is not accepted");
getch();
return 0;
Page 2
NPP
}

/*output
Enter any String(Append with $)i*i+i$
Stack Input Output
$E i*i+i$
$HT i*i+i$ E->TH
$HUF i*i+i$ T->FU
$HUi i*i+i$ F->i
$HU *i+i$ POP
$HUF* *i+i$ U->*FU
$HUF i+i$ POP
$HUi i+i$ F->i
$HU +i$ POP
$H +i$ U->e
$HT+ +i$ H->+TH
$HT i$ POP
$HUF i$ T->FU
$HUi i$ F->i
$HU $ POP
$H $ U->e
$ $ H->e

Given String is accepted


*/

Page 3

You might also like