#include<string.h>
#include <stdio.h>
#include<conio.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;
char t[5][6][10]={"$","$","TH","$","TH","$",
"+TH","$","e","e","$","e",
"$","$","FU","$","FU","$",
"e","*FU","e","e","$","e",
"$","$","(E)","$","i","$"};
clrscr();
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);
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 && i==strlen(ip))
printf
("\n Given String
is accepted"
); else
printf
("\n Given String
is not accepted"
); return 0;
}
I2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZTxjb25pby5oPgoKY2hhciBhWzEwXTsKaW50IHRvcD0tMSxpOwp2b2lkIGVycm9yKCl7CnByaW50ZigiU3ludGF4IEVycm9yIik7Cn0Kdm9pZCBwdXNoKGNoYXIga1tdKSAvL1B1c2hlcyBUaGUgU2V0IE9mIENoYXJhY3RlcnMgb24gdG8gdGhlIFN0YWNrCnsKICBmb3IoaT0wO2tbaV0hPSdcMCc7aSsrKQogIHsKICAgIGlmKHRvcDw5KQogICAgYVsrK3RvcF09a1tpXTsKICB9Cn0KY2hhciBUT1MoKSAgICAgICAgLy9SZXR1cm5zIFRPUCBvZiB0aGUgU3RhY2sKewogIHJldHVybiBhW3RvcF07Cn0Kdm9pZCBwb3AoKSAgICAgICAvL1BvcHMgMSBlbGVtZW50IGZyb20gdGhlIFN0YWNrCnsKICBpZih0b3A+PTApCiAgICBhW3RvcC0tXT0nXDAnOwp9CnZvaWQgZGlzcGxheSgpICAvL0Rpc3BsYXlzIEVsZW1lbnRzIE9mIFN0YWNrCnsKICBmb3IoaT0wO2k8PXRvcDtpKyspCiAgICBwcmludGYoIiVjIixhW2ldKTsKfQp2b2lkIGRpc3BsYXkxKGNoYXIgcFtdLGludCBtKSAvL0Rpc3BsYXlzIFRoZSBQcmVzZW50IElucHV0IFN0cmluZwp7CiAgaW50IGw7CiAgcHJpbnRmKCJcdCIpOwogIGZvcihsPW07cFtsXSE9J1wwJztsKyspCiAgICBwcmludGYoIiVjIixwW2xdKTsKfQpjaGFyKiBzdGFjaygpewpyZXR1cm4gYTsKfQppbnQgbWFpbigpCnsKICBjaGFyIGlwWzIwXSxyWzIwXSxzdCxhbjsKICBpbnQgaXIsaWMsaj0wLGs7CiAgY2hhciB0WzVdWzZdWzEwXT17IiQiLCIkIiwiVEgiLCIkIiwiVEgiLCIkIiwKCQkgICAiK1RIIiwiJCIsImUiLCJlIiwiJCIsImUiLAoJCSAgICIkIiwiJCIsIkZVIiwiJCIsIkZVIiwiJCIsCgkJICAgImUiLCIqRlUiLCJlIiwiZSIsIiQiLCJlIiwKCQkgICAiJCIsIiQiLCIoRSkiLCIkIiwiaSIsIiQifTsKICBjbHJzY3IoKTsKICBwcmludGYoIlxuRW50ZXIgYW55IFN0cmluZyhBcHBlbmQgd2l0aCAkKSIpOwogIGdldHMoaXApOwogIHByaW50ZigiU3RhY2tcdElucHV0XHRPdXRwdXRcblxuIik7CiAgcHVzaCgiJEUiKTsKICBkaXNwbGF5KCk7CiAgcHJpbnRmKCJcdCVzXG4iLGlwKTsKICBmb3Ioaj0wO2lwW2pdIT0nXDAnOykKICB7CiAgaWYoVE9TKCk9PWFuKQogICAgICB7Cglwb3AoKTsKCWRpc3BsYXkoKTsKCWRpc3BsYXkxKGlwLGorMSk7CglwcmludGYoIlx0UE9QXG4iKTsKCWorKzsKICAgICAgfQogICAgYW49aXBbal07CiAgICBzdD1UT1MoKTsKICAgICAgaWYoc3Q9PSdFJylpcj0wOwogICAgICBlbHNlIGlmKHN0PT0nSCcpaXI9MTsKICAgICAgZWxzZSBpZihzdD09J1QnKWlyPTI7CiAgICAgIGVsc2UgaWYoc3Q9PSdVJylpcj0zOwogICAgICBlbHNlIGlmKHN0PT0nRicpaXI9NDsKICAgICAgZWxzZSB7CgkgICAgZXJyb3IoKTsKCSAgICBicmVhazsKCSAgICB9CiAgICAgIGlmKGFuPT0nKycpaWM9MDsKICAgICAgZWxzZSBpZihhbj09JyonKWljPTE7CiAgICAgIGVsc2UgaWYoYW49PScoJylpYz0yOwogICAgICBlbHNlIGlmKGFuPT0nKScpaWM9MzsKICAgICAgZWxzZSBpZigoYW4+PSdhJyYmYW48PSd6Jyl8fChhbj49J0EnJiZhbjw9J1onKSl7aWM9NDthbj0naSc7fQogICAgICBlbHNlIGlmKGFuPT0nJCcpaWM9NTsKICAgICAgc3RyY3B5KHIsc3RycmV2KHRbaXJdW2ljXSkpOwogICAgICBzdHJyZXYodFtpcl1baWNdKTsKICAgICAgcG9wKCk7CiAgICAgIHB1c2gocik7CiAgICAgIGlmKFRPUygpPT0nZScpCiAgICAgIHsKCXBvcCgpOwoJZGlzcGxheSgpOwoJZGlzcGxheTEoaXAsaik7CglwcmludGYoIlx0JWMtPiVjXG4iLHN0LDIzOCk7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgZGlzcGxheSgpOwogICAgICBkaXNwbGF5MShpcCxqKTsKICAgICAgcHJpbnRmKCJcdCVjLT4lc1xuIixzdCx0W2lyXVtpY10pOwogICAgICB9CiAgICAgIGlmKFRPUygpPT0nJCcmJmFuPT0nJCcpCiAgICAgIGJyZWFrOwogICAgICBpZihUT1MoKT09JyQnKXsKCWVycm9yKCk7CglicmVhazsKCX0KICAgICAgfQogICAgICBrPXN0cmNtcChzdGFjaygpLCIkIik7CiAgICAgIGlmKGs9PTAgJiYgaT09c3RybGVuKGlwKSkKICAgIHByaW50ZigiXG4gR2l2ZW4gU3RyaW5nIGlzIGFjY2VwdGVkIik7CiAgICBlbHNlCiAgICBwcmludGYoIlxuIEdpdmVuIFN0cmluZyBpcyBub3QgYWNjZXB0ZWQiKTsKICByZXR1cm4gMDsKfQoKCg==