#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) {
}
void pop() {
top--;
}
void printStack() {
for (int i = 0; i <= top; i++)
}
// Reduce with lookahead
int reduce(char lookahead) {
// F -> id
if (top >= 0 &&
stack[top][0] >= 'a' &&
stack[top][0] <= 'z')
{
pop();
push("F");
return 1;
}
// F -> (E)
if (top >= 2 &&
strcmp(stack
[top
-2], "(") == 0 && strcmp(stack
[top
-1], "E") == 0 && {
pop(); pop(); pop();
push("F");
return 1;
}
// T -> T * F
if (top >= 2 &&
strcmp(stack
[top
-2], "T") == 0 && strcmp(stack
[top
-1], "*") == 0 && {
pop(); pop(); pop();
push("T");
return 1;
}
// T -> F
if (top
>= 0 && strcmp(stack
[top
], "F") == 0) {
pop();
push("T");
return 1;
}
// E -> E + T (مع مراعاة precedence)
if (top >= 2 &&
strcmp(stack
[top
-2], "E") == 0 && strcmp(stack
[top
-1], "+") == 0 && {
// لو الجاي * نستنى
if (lookahead == '*')
return 0;
pop(); pop(); pop();
push("E");
return 1;
}
// ✅ التعديل هنا
// E -> T (مع مراعاة precedence)
if (top
>= 0 && strcmp(stack
[top
], "T") == 0) {
// لو الجاي * يبقى لسه هنكوّن T * F
if (lookahead == '*')
return 0;
pop();
push("E");
return 1;
}
return 0;
}
int main() {
printf("Enter an Expression:\n"); fgets(input
, 100, stdin
);
while (input[pos]) {
pos++;
continue;
}
char temp[2] = {input[pos], '\0'};
push(temp);
pos++;
printStack();
while (reduce(input[pos])) {
printStack();
}
}
while (reduce('\0')) {
printStack();
}
if (top
== 0 && strcmp(stack
[0], "E") == 0) else
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgpjaGFyIHN0YWNrWzEwMF1bMTBdOwppbnQgdG9wID0gLTE7CmludCBwb3MgPSAwOwpjaGFyIGlucHV0WzEwMF07Cgp2b2lkIHB1c2goY29uc3QgY2hhciAqcykgewogICAgc3RyY3B5KHN0YWNrWysrdG9wXSwgcyk7Cn0KCnZvaWQgcG9wKCkgewogICAgdG9wLS07Cn0KCnZvaWQgcHJpbnRTdGFjaygpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRvcDsgaSsrKQogICAgICAgIHByaW50ZigiJXMiLCBzdGFja1tpXSk7CiAgICBwcmludGYoIlxuIik7Cn0KCi8vIFJlZHVjZSB3aXRoIGxvb2thaGVhZAppbnQgcmVkdWNlKGNoYXIgbG9va2FoZWFkKSB7CgogICAgLy8gRiAtPiBpZAogICAgaWYgKHRvcCA+PSAwICYmCiAgICAgICAgc3RhY2tbdG9wXVswXSA+PSAnYScgJiYKICAgICAgICBzdGFja1t0b3BdWzBdIDw9ICd6JykKICAgIHsKICAgICAgICBwb3AoKTsKICAgICAgICBwdXNoKCJGIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8gRiAtPiAoRSkKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMl0sICIoIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICJFIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiKSIpID09IDApCiAgICB7CiAgICAgICAgcG9wKCk7IHBvcCgpOyBwb3AoKTsKICAgICAgICBwdXNoKCJGIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8gVCAtPiBUICogRgogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIlQiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0xXSwgIioiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICJGIikgPT0gMCkKICAgIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIlQiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBUIC0+IEYKICAgIGlmICh0b3AgPj0gMCAmJiBzdHJjbXAoc3RhY2tbdG9wXSwgIkYiKSA9PSAwKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHB1c2goIlQiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBFIC0+IEUgKyBUICAo2YXYuSDZhdix2KfYudin2KkgcHJlY2VkZW5jZSkKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMl0sICJFIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIrIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiVCIpID09IDApCiAgICB7CiAgICAgICAgLy8g2YTZiCDYp9mE2KzYp9mKICog2YbYs9iq2YbZiQogICAgICAgIGlmIChsb29rYWhlYWQgPT0gJyonKQogICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgcG9wKCk7IHBvcCgpOyBwb3AoKTsKICAgICAgICBwdXNoKCJFIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8g4pyFINin2YTYqti52K/ZitmEINmH2YbYpwogICAgLy8gRSAtPiBUICjZhdi5INmF2LHYp9i52KfYqSBwcmVjZWRlbmNlKQogICAgaWYgKHRvcCA+PSAwICYmIHN0cmNtcChzdGFja1t0b3BdLCAiVCIpID09IDApCiAgICB7CiAgICAgICAgLy8g2YTZiCDYp9mE2KzYp9mKICog2YrYqNmC2Ykg2YTYs9mHINmH2YbZg9mI2ZHZhiBUICogRgogICAgICAgIGlmIChsb29rYWhlYWQgPT0gJyonKQogICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiRW50ZXIgYW4gRXhwcmVzc2lvbjpcbiIpOwogICAgZmdldHMoaW5wdXQsIDEwMCwgc3RkaW4pOwoKICAgIHdoaWxlIChpbnB1dFtwb3NdKSB7CgogICAgICAgIGlmIChpc3NwYWNlKGlucHV0W3Bvc10pKSB7CiAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGNoYXIgdGVtcFsyXSA9IHtpbnB1dFtwb3NdLCAnXDAnfTsKICAgICAgICBwdXNoKHRlbXApOwogICAgICAgIHBvcysrOwoKICAgICAgICBwcmludGYoIlNoaWZ0OiAiKTsKICAgICAgICBwcmludFN0YWNrKCk7CgogICAgICAgIHdoaWxlIChyZWR1Y2UoaW5wdXRbcG9zXSkpIHsKICAgICAgICAgICAgcHJpbnRmKCJSZWR1Y2U6ICIpOwogICAgICAgICAgICBwcmludFN0YWNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlIChyZWR1Y2UoJ1wwJykpIHsKICAgICAgICBwcmludGYoIlJlZHVjZTogIik7CiAgICAgICAgcHJpbnRTdGFjaygpOwogICAgfQoKICAgIGlmICh0b3AgPT0gMCAmJiBzdHJjbXAoc3RhY2tbMF0sICJFIikgPT0gMCkKICAgICAgICBwcmludGYoIlN0cmluZyBBY2NlcHRlZFxuIik7CiAgICBlbHNlCiAgICAgICAgcHJpbnRmKCJTdHJpbmcgUmVqZWN0ZWRcbiIpOwoKICAgIHJldHVybiAwOwp9