#include <stdio.h>
#include <string.h>
char stack[100][10];
int top = -1;
int pos = 0;
char input[100];
void push(const char *s)
{
}
void pop()
{
top--;
}
void printStack()
{
for (int i = 0; i <= top; i++) {
}
}
int reduce()
{
// Rule 1: E → E + E
if (top >= 2 &&
strcmp(stack
[top
-2], "E")==0 && strcmp(stack
[top
-1], "+")==0 && {
pop();
pop();
pop();
push("E");
return 1;
}
if (top >= 2 &&
strcmp(stack
[top
-2], "E")==0 && strcmp(stack
[top
-1], "*")==0 && {
pop();
pop();
pop();
push("E");
return 1;
}
if (top >= 2 &&
strcmp(stack
[top
-2], "(")==0 && strcmp(stack
[top
-1], "E")==0 && {
pop();
pop();
pop();
push("E");
return 1;
}
if (top!=-1 && stack[top][0]>='a'&&stack[top][0]<='z')
{
pop();
push("E");
return 1;
}
return 0;
}
int main()
{
printf("Enter an Expression:\n");
fgets(input
, sizeof(input
), stdin
);
if (len > 0 && input[len-1] == '\n') {
input[len-1] = '\0';
}
pos = 0;
while (input[pos])
{
while (input[pos] == ' ' || input[pos] == '\t') {
pos++;
}
if (!input[pos]) break;
char temp[2] = {input[pos], '\0'};
push(temp);
pos++;
printStack();
while (reduce())
{
printStack();
}
}
if (top
== 0 && strcmp(stack
[0], "E")==0) else
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmNoYXIgc3RhY2tbMTAwXVsxMF07CmludCB0b3AgPSAtMTsgICAgICAKaW50IHBvcyA9IDA7ICAgICAgIApjaGFyIGlucHV0WzEwMF07ICAgCgoKdm9pZCBwdXNoKGNvbnN0IGNoYXIgKnMpCnsKICAgIHN0cmNweShzdGFja1srK3RvcF0sIHMpOwp9Cgp2b2lkIHBvcCgpCnsKICAgIHRvcC0tOwp9CgoKdm9pZCBwcmludFN0YWNrKCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdG9wOyBpKyspIHsKICAgICAgICBwcmludGYoIiVzIiwgc3RhY2tbaV0pOwogICAgICAgIGlmIChpIDwgdG9wKSBwcmludGYoIiAiKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQoKCmludCByZWR1Y2UoKQp7CiAgICAvLyBSdWxlIDE6IEUg4oaSIEUgKyBFCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIkUiKT09MCAmJgogICAgICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiKyIpPT0wICYmCiAgICAgICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiRSIpPT0wKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOyAgIAogICAgICAgIHB1c2goIkUiKTsgICAgICAgICAgCiAgICAgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAKICAgIH0KCiAgICAKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTJdLCAiRSIpPT0wICYmCiAgICAgICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIqIik9PTAgJiYKICAgICAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICJFIik9PTApCiAgICB7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcG9wKCk7ICAgCiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIigiKT09MCAmJgogICAgICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiRSIpPT0wICYmCiAgICAgICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiKSIpPT0wKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOyAgIAogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAKICAgIGlmICh0b3AhPS0xICYmIHN0YWNrW3RvcF1bMF0+PSdhJyYmc3RhY2tbdG9wXVswXTw9J3onKQogICAgewogICAgICAgIHBvcCgpOyAgCiAgICAgICAgcHVzaCgiRSIpOyAgCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuIDA7IAp9CgppbnQgbWFpbigpCnsKICAgIAogICAgcHJpbnRmKCJFbnRlciBhbiBFeHByZXNzaW9uOlxuIik7CiAgICAKICAgIAogICAgZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKTsKICAgIAogICAgCiAgICBpbnQgbGVuID0gc3RybGVuKGlucHV0KTsKICAgIGlmIChsZW4gPiAwICYmIGlucHV0W2xlbi0xXSA9PSAnXG4nKSB7CiAgICAgICAgaW5wdXRbbGVuLTFdID0gJ1wwJzsKICAgIH0KCiAgICAKICAgIHBvcyA9IDA7CiAgICB3aGlsZSAoaW5wdXRbcG9zXSkKICAgIHsKICAgICAgICAKICAgICAgICB3aGlsZSAoaW5wdXRbcG9zXSA9PSAnICcgfHwgaW5wdXRbcG9zXSA9PSAnXHQnKSB7CiAgICAgICAgICAgIHBvcysrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIWlucHV0W3Bvc10pIGJyZWFrOyAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgY2hhciB0ZW1wWzJdID0ge2lucHV0W3Bvc10sICdcMCd9OwogICAgICAgIHB1c2godGVtcCk7CiAgICAgICAgcG9zKys7ICAgICAgICAKCiAgICAgICAgCiAgICAgICAgcHJpbnRmKCJTaGlmdDogIik7CiAgICAgICAgcHJpbnRTdGFjaygpOwoKICAgICAgICB3aGlsZSAocmVkdWNlKCkpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIlJlZHVjZTogIik7CiAgICAgICAgICAgIHByaW50U3RhY2soKTsKICAgICAgICB9CiAgICB9CgogICAgCiAgICBpZiAodG9wID09IDAgJiYgc3RyY21wKHN0YWNrWzBdLCAiRSIpPT0wKQogICAgICAgIHByaW50ZigiU3RyaW5nIEFjY2VwdGVkXG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlN0cmluZyBSZWplY3RlZFxuIik7CgogICAgcmV0dXJuIDA7Cn0=