#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+CiAKY2hhciBzdGFja1sxMDBdWzEwXTsKaW50IHRvcCA9IC0xOwppbnQgaW5kID0gMDsKY2hhciBpbnB1dFsxMDBdOwogCnZvaWQgcHVzaChjb25zdCBjaGFyICpzKQp7CiAgICBzdHJjcHkoc3RhY2tbKyt0b3BdLCBzKTsKfQogCnZvaWQgcG9wKCkKewogICAgdG9wLS07Cn0KIAp2b2lkIHByaW50U3RhY2soKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSB0b3A7IGkrKykKICAgICAgICBwcmludGYoIiVzIiwgc3RhY2tbaV0pOwogICAgcHJpbnRmKCJcbiIpOwp9CiAKaW50IHJlZHVjZSgpCnsKICAgIC8vIEUg4oaSIEUgKyBFCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTJdLCAiRSIpPT0wICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0xXSwgIisiKT09MCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiRSIpPT0wKQogICAgewogICAgICAgIHBvcCgpOyBwb3AoKTsgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQogCiAgICAvLyBFIOKGkiBFICogRQogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIkUiKT09MCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIqIik9PTAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkUiKT09MCkKICAgIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KIAogICAgLy8gRSDihpIgKEUpCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTJdLCAiKCIpPT0wICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0xXSwgIkUiKT09MCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiKSIpPT0wKQogICAgewogICAgICAgIHBvcCgpOyBwb3AoKTsgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQogCiAgICAvLyBFIOKGkiBpZCAoZml4IGluZmluaXRlIGxvb3ApCiAgICBpZiAodG9wICE9IC0xICYmCiAgICAgICAgaXNhbHBoYShzdGFja1t0b3BdWzBdKSAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiRSIpICE9IDApCiAgICB7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQogCiAgICByZXR1cm4gMDsKfQogCmludCBtYWluKCkKewogICAgcHJpbnRmKCJFbnRlciBhbiBFeHByZXNzaW9uOiAiKTsKICAgIGZnZXRzKGlucHV0LCBzaXplb2YoaW5wdXQpLCBzdGRpbik7CiAKICAgIHdoaWxlIChpbnB1dFtpbmRdKQogICAgewogICAgICAgIC8vIGlnbm9yZSBzcGFjZXMKIAogICAgICAgIGlmIChpc3NwYWNlKGlucHV0W2luZF0pKQogICAgICAgIHsKICAgICAgICAgICAgaW5kKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KIAogICAgICAgIGNoYXIgdGVtcFsyXSA9IHtpbnB1dFtpbmRdLCAnXDAnfTsKICAgICAgICBwdXNoKHRlbXApOwogICAgICAgIGluZCsrOwogCiAgICAgICAgcHJpbnRmKCJTaGlmdDogIik7CiAgICAgICAgcHJpbnRTdGFjaygpOwogCiAgICAgICAgd2hpbGUgKHJlZHVjZSgpKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJSZWR1Y2U6ICIpOwogICAgICAgICAgICBwcmludFN0YWNrKCk7CiAgICAgICAgfQogICAgfQogCiAgICBpZiAodG9wID09IDAgJiYgc3RyY21wKHN0YWNrWzBdLCAiRSIpPT0wKQogICAgICAgIHByaW50ZigiU3RyaW5nIEFjY2VwdGVkXG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlN0cmluZyBSZWplY3RlZFxuIik7CiAKICAgIHJldHVybiAwOwp9Cg==