#include <stdio.h>
#include <string.h>
#include <ctype.h>
char stack[100][10];
int top = -1;
int pos = 0;
char input[100];
// Push
void push(const char *s)
{
}
// Pop
void pop()
{
top--;
}
// Print Stack
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 &&
{
pop();
push("T");
return 1;
}
// ❗ مهم: E -> E + T (مع check للـ lookahead)
if (top >= 2 &&
strcmp(stack
[top
-2], "E") == 0 && strcmp(stack
[top
-1], "+") == 0 && {
// لو فيه ضرب جاي → متعملش reduce
if (lookahead == '*')
return 0;
pop(); pop(); pop();
push("E");
return 1;
}
// E -> T
if (top >= 0 &&
{
pop();
push("E");
return 1;
}
return 0;
}
int main()
{
printf("Enter an Expression:\n"); fgets(input
, 100, stdin
);
while (input[pos])
{
// Ignore spaces
{
pos++;
continue;
}
char temp[2] = {input[pos], '\0'};
push(temp);
pos++;
printStack();
// 👇 هنا بقى بنبعت lookahead
while (reduce(input[pos]))
{
printStack();
}
}
// Final reductions
while (reduce('\0'))
{
printStack();
}
if (top
== 0 && strcmp(stack
[0], "E") == 0) else
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgpjaGFyIHN0YWNrWzEwMF1bMTBdOwppbnQgdG9wID0gLTE7CmludCBwb3MgPSAwOwpjaGFyIGlucHV0WzEwMF07CgovLyBQdXNoCnZvaWQgcHVzaChjb25zdCBjaGFyICpzKQp7CiAgICBzdHJjcHkoc3RhY2tbKyt0b3BdLCBzKTsKfQoKLy8gUG9wCnZvaWQgcG9wKCkKewogICAgdG9wLS07Cn0KCi8vIFByaW50IFN0YWNrCnZvaWQgcHJpbnRTdGFjaygpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRvcDsgaSsrKQogICAgICAgIHByaW50ZigiJXMiLCBzdGFja1tpXSk7CiAgICBwcmludGYoIlxuIik7Cn0KCi8vIFJlZHVjZSB3aXRoIGxvb2thaGVhZAppbnQgcmVkdWNlKGNoYXIgbG9va2FoZWFkKQp7CiAgICAvLyBGIC0+IGlkCiAgICBpZiAodG9wID49IDAgJiYKICAgICAgICBzdGFja1t0b3BdWzBdID49ICdhJyAmJgogICAgICAgIHN0YWNrW3RvcF1bMF0gPD0gJ3onKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHB1c2goIkYiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBGIC0+IChFKQogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIigiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0xXSwgIkUiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICIpIikgPT0gMCkKICAgIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkYiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBUIC0+IFQgKiBGCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTJdLCAiVCIpID09IDAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiKiIpID09IDAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkYiKSA9PSAwKQogICAgewogICAgICAgIHBvcCgpOyBwb3AoKTsgcG9wKCk7CiAgICAgICAgcHVzaCgiVCIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIFQgLT4gRgogICAgaWYgKHRvcCA+PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICJGIikgPT0gMCkKICAgIHsKICAgICAgICBwb3AoKTsKICAgICAgICBwdXNoKCJUIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8g4p2XINmF2YfZhTogRSAtPiBFICsgVCAo2YXYuSBjaGVjayDZhNmE2YAgbG9va2FoZWFkKQogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIkUiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0xXSwgIisiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICJUIikgPT0gMCkKICAgIHsKICAgICAgICAvLyDZhNmIINmB2YrZhyDYttix2Kgg2KzYp9mKIOKGkiDZhdiq2LnZhdmE2LQgcmVkdWNlCiAgICAgICAgaWYgKGxvb2thaGVhZCA9PSAnKicpCiAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBFIC0+IFQKICAgIGlmICh0b3AgPj0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiVCIpID09IDApCiAgICB7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpCnsKICAgIHByaW50ZigiRW50ZXIgYW4gRXhwcmVzc2lvbjpcbiIpOwogICAgZmdldHMoaW5wdXQsIDEwMCwgc3RkaW4pOwoKICAgIHdoaWxlIChpbnB1dFtwb3NdKQogICAgewogICAgICAgIC8vIElnbm9yZSBzcGFjZXMKICAgICAgICBpZiAoaXNzcGFjZShpbnB1dFtwb3NdKSkKICAgICAgICB7CiAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGNoYXIgdGVtcFsyXSA9IHtpbnB1dFtwb3NdLCAnXDAnfTsKICAgICAgICBwdXNoKHRlbXApOwogICAgICAgIHBvcysrOwoKICAgICAgICBwcmludGYoIlNoaWZ0OiAiKTsKICAgICAgICBwcmludFN0YWNrKCk7CgogICAgICAgIC8vIPCfkYcg2YfZhtinINio2YLZiSDYqNmG2KjYudiqIGxvb2thaGVhZAogICAgICAgIHdoaWxlIChyZWR1Y2UoaW5wdXRbcG9zXSkpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIlJlZHVjZTogIik7CiAgICAgICAgICAgIHByaW50U3RhY2soKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gRmluYWwgcmVkdWN0aW9ucwogICAgd2hpbGUgKHJlZHVjZSgnXDAnKSkKICAgIHsKICAgICAgICBwcmludGYoIlJlZHVjZTogIik7CiAgICAgICAgcHJpbnRTdGFjaygpOwogICAgfQoKICAgIGlmICh0b3AgPT0gMCAmJiBzdHJjbXAoc3RhY2tbMF0sICJFIikgPT0gMCkKICAgICAgICBwcmludGYoIlN0cmluZyBBY2NlcHRlZFxuIik7CiAgICBlbHNlCiAgICAgICAgcHJpbnRmKCJTdHJpbmcgUmVqZWN0ZWRcbiIpOwoKICAgIHJldHVybiAwOwp9