#include <stdio.h>
#include <string.h>
#include <ctype.h>
char stack[100][10];
int top = -1;
int ind = 0;
char input[100];
void push(const char *s)
{
}
void pop()
{
top--;
}
void printStack()
{
for (int i = 0; i <= top; i++)
}
int reduce()
{
// E → E + E
if (top >= 2 &&
strcmp(stack
[top
-2], "E")==0 && strcmp(stack
[top
-1], "+")==0 && {
pop(); pop(); pop();
push("E");
return 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;
}
// E → (E)
if (top >= 2 &&
strcmp(stack
[top
-2], "(")==0 && strcmp(stack
[top
-1], "E")==0 && {
pop(); pop(); pop();
push("E");
return 1;
}
// E → id (fix infinite loop)
if (top != -1 &&
{
pop();
push("E");
return 1;
}
return 0;
}
int main()
{
printf("Enter an Expression: "); fgets(input
, sizeof(input
), stdin
);
while (input[ind])
{
// ignore spaces
{
ind++;
continue;
}
char temp[2] = {input[ind], '\0'};
push(temp);
ind++;
printStack();
while (reduce())
{
printStack();
}
}
if (top
== 0 && strcmp(stack
[0], "E")==0) else
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgpjaGFyIHN0YWNrWzEwMF1bMTBdOwppbnQgdG9wID0gLTE7CmludCBpbmQgPSAwOwpjaGFyIGlucHV0WzEwMF07Cgp2b2lkIHB1c2goY29uc3QgY2hhciAqcykKewogICAgc3RyY3B5KHN0YWNrWysrdG9wXSwgcyk7Cn0KCnZvaWQgcG9wKCkKewogICAgdG9wLS07Cn0KCnZvaWQgcHJpbnRTdGFjaygpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRvcDsgaSsrKQogICAgICAgIHByaW50ZigiJXMiLCBzdGFja1tpXSk7CiAgICBwcmludGYoIlxuIik7Cn0KCmludCByZWR1Y2UoKQp7CiAgICAvLyBFIOKGkiBFICsgRQogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIkUiKT09MCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIrIik9PTAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkUiKT09MCkKICAgIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBFIOKGkiBFICogRQogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIkUiKT09MCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIqIik9PTAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkUiKT09MCkKICAgIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBFIOKGkiAoRSkKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMl0sICIoIik9PTAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiRSIpPT0wICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICIpIik9PTApCiAgICB7CiAgICAgICAgcG9wKCk7IHBvcCgpOyBwb3AoKTsKICAgICAgICBwdXNoKCJFIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8gRSDihpIgaWQgKGZpeCBpbmZpbml0ZSBsb29wKQogICAgaWYgKHRvcCAhPSAtMSAmJgogICAgICAgIGlzYWxwaGEoc3RhY2tbdG9wXVswXSkgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkUiKSAhPSAwKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKQp7CiAgICBwcmludGYoIkVudGVyIGFuIEV4cHJlc3Npb246ICIpOwogICAgZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKTsKCiAgICB3aGlsZSAoaW5wdXRbaW5kXSkKICAgIHsKICAgICAgICAvLyBpZ25vcmUgc3BhY2VzCgogICAgICAgIGlmIChpc3NwYWNlKGlucHV0W2luZF0pKQogICAgICAgIHsKICAgICAgICAgICAgaW5kKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgY2hhciB0ZW1wWzJdID0ge2lucHV0W2luZF0sICdcMCd9OwogICAgICAgIHB1c2godGVtcCk7CiAgICAgICAgaW5kKys7CgogICAgICAgIHByaW50ZigiU2hpZnQ6ICIpOwogICAgICAgIHByaW50U3RhY2soKTsKCiAgICAgICAgd2hpbGUgKHJlZHVjZSgpKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJSZWR1Y2U6ICIpOwogICAgICAgICAgICBwcmludFN0YWNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICh0b3AgPT0gMCAmJiBzdHJjbXAoc3RhY2tbMF0sICJFIik9PTApCiAgICAgICAgcHJpbnRmKCJTdHJpbmcgQWNjZXB0ZWRcbiIpOwogICAgZWxzZQogICAgICAgIHByaW50ZigiU3RyaW5nIFJlamVjdGVkXG4iKTsKCiAgICByZXR1cm4gMDsKfQ==