#include <stdio.h>
#include <string.h>
#include <ctype.h>
char stack[100][10];
int top = -1;
int pos = 0;
char input[100];
void push(const char *s) {
if (top < 99)
else
}
void pop() {
if (top >= 0)
top--;
}
void printStack() {
for (int i
= 0; i
<= top
; i
++) printf("%s", stack
[i
]); }
void skipWhitespace() {
while (input[pos] == ' ') pos++;
}
int reduce() {
if (top >= 2 &&
strcmp(stack
[top
- 2], "E") == 0 && strcmp(stack
[top
- 1], "+") == 0 && strcmp(stack
[top
], "E") == 0) { pop(); pop(); pop();
push("E");
return 1;
}
if (top >= 2 &&
strcmp(stack
[top
- 2], "E") == 0 && strcmp(stack
[top
- 1], "*") == 0 && strcmp(stack
[top
], "E") == 0) { pop(); pop(); pop();
push("E");
return 1;
}
if (top >= 2 &&
strcmp(stack
[top
- 2], "(") == 0 && strcmp(stack
[top
- 1], "E") == 0 && strcmp(stack
[top
], ")") == 0) { pop(); pop(); pop();
push("E");
return 1;
}
if (top
>= 0 && islower(stack
[top
][0]) && stack
[top
][1] == '\0') { pop();
push("E");
return 1;
}
return 0;
}
int main() {
printf("Enter an Expression: "); fgets(input
, sizeof(input
), stdin
); input
[strcspn(input
, "\n")] = '\0';
while (input[pos] != '\0') {
skipWhitespace();
if (input[pos] == '\0') break;
char temp[2] = {input[pos], '\0'};
if (islower(input
[pos
]) || input
[pos
] == '+' || input
[pos
] == '*' || input
[pos
] == '(' || input
[pos
] == ')') { push(temp);
pos++;
printStack();
while (reduce()) {
printStack();
}
} else {
printf("Invalid character: %c\n", input
[pos
]); return 1;
}
}
if (top
== 0 && strcmp(stack
[0], "E") == 0) else
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgpjaGFyIHN0YWNrWzEwMF1bMTBdOwppbnQgdG9wID0gLTE7CmludCBwb3MgPSAwOwpjaGFyIGlucHV0WzEwMF07Cgp2b2lkIHB1c2goY29uc3QgY2hhciAqcykgewogICAgaWYgKHRvcCA8IDk5KQogICAgICAgIHN0cmNweShzdGFja1srK3RvcF0sIHMpOwogICAgZWxzZQogICAgICAgIHByaW50ZigiU3RhY2sgb3ZlcmZsb3chXG4iKTsKfQoKdm9pZCBwb3AoKSB7CiAgICBpZiAodG9wID49IDApCiAgICAgICAgdG9wLS07Cn0KCnZvaWQgcHJpbnRTdGFjaygpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRvcDsgaSsrKSBwcmludGYoIiVzIiwgc3RhY2tbaV0pOwogICAgcHJpbnRmKCJcbiIpOwp9Cgp2b2lkIHNraXBXaGl0ZXNwYWNlKCkgewogICAgd2hpbGUgKGlucHV0W3Bvc10gPT0gJyAnKSBwb3MrKzsKfQoKaW50IHJlZHVjZSgpIHsKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AgLSAyXSwgIkUiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcCAtIDFdLCAiKyIpID09IDAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkUiKSA9PSAwKSB7CiAgICAgICAgcG9wKCk7IHBvcCgpOyBwb3AoKTsKICAgICAgICBwdXNoKCJFIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcCAtIDJdLCAiRSIpID09IDAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wIC0gMV0sICIqIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiRSIpID09IDApIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wIC0gMl0sICIoIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AgLSAxXSwgIkUiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICIpIikgPT0gMCkgewogICAgICAgIHBvcCgpOyBwb3AoKTsgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmICh0b3AgPj0gMCAmJiBpc2xvd2VyKHN0YWNrW3RvcF1bMF0pICYmIHN0YWNrW3RvcF1bMV0gPT0gJ1wwJykgewogICAgICAgIHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoIkVudGVyIGFuIEV4cHJlc3Npb246ICIpOwogICAgZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKTsKICAgIGlucHV0W3N0cmNzcG4oaW5wdXQsICJcbiIpXSA9ICdcMCc7CgogICAgd2hpbGUgKGlucHV0W3Bvc10gIT0gJ1wwJykgewogICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7CiAgICAgICAgaWYgKGlucHV0W3Bvc10gPT0gJ1wwJykgYnJlYWs7CgogICAgICAgIGNoYXIgdGVtcFsyXSA9IHtpbnB1dFtwb3NdLCAnXDAnfTsKCiAgICAgICAgaWYgKGlzbG93ZXIoaW5wdXRbcG9zXSkgfHwgaW5wdXRbcG9zXSA9PSAnKycgfHwgaW5wdXRbcG9zXSA9PSAnKicgfHwgaW5wdXRbcG9zXSA9PSAnKCcgfHwgaW5wdXRbcG9zXSA9PSAnKScpIHsKICAgICAgICAgICAgcHVzaCh0ZW1wKTsKICAgICAgICAgICAgcG9zKys7CgogICAgICAgICAgICBwcmludGYoIlNoaWZ0OiAiKTsKICAgICAgICAgICAgcHJpbnRTdGFjaygpOwoKICAgICAgICAgICAgd2hpbGUgKHJlZHVjZSgpKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIlJlZHVjZTogIik7CiAgICAgICAgICAgICAgICBwcmludFN0YWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmludGYoIkludmFsaWQgY2hhcmFjdGVyOiAlY1xuIiwgaW5wdXRbcG9zXSk7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAodG9wID09IDAgJiYgc3RyY21wKHN0YWNrWzBdLCAiRSIpID09IDApCiAgICAgICAgcHJpbnRmKCJTdHJpbmcgQWNjZXB0ZWRcbiIpOwogICAgZWxzZQogICAgICAgIHByaW50ZigiU3RyaW5nIFJlamVjdGVkXG4iKTsKCiAgICByZXR1cm4gMDsKfQo=