#include <stdio.h>
#include <string.h>
char stack[50], input[50];
int top = -1, i = 0;
void push(char c) {
stack[++top] = c;
stack[top+1] = '\0';
}
int try_reduce() {
if (stack[top] == '2') {
stack[top] = 'S';
printf("Reduce: S->2\tStack: %s\n", stack
); return 1;
}
if (top >= 2 && stack[top]=='0' && stack[top-1]=='S' && stack[top-2]=='0') {
top -= 2;
stack[top] = 'S';
printf("Reduce: S->0S0\tStack: %s\n", stack
); return 1;
}
if (top >= 2 && stack[top]=='1' && stack[top-1]=='S' && stack[top-2]=='1') {
top -= 2;
stack[top] = 'S';
printf("Reduce: S->1S1\tStack: %s\n", stack
); return 1;
}
return 0;
}
int main() {
printf("Stack\tInput\tAction\n");
while (input[i] != '\0') {
push(input[i]);
printf("%s\t%s\tShift %c\n", stack
, input
+i
+1, input
[i
]);
while (try_reduce());
i++;
}
else
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmNoYXIgc3RhY2tbNTBdLCBpbnB1dFs1MF07CmludCB0b3AgPSAtMSwgaSA9IDA7Cgp2b2lkIHB1c2goY2hhciBjKSB7CiAgICBzdGFja1srK3RvcF0gPSBjOwogICAgc3RhY2tbdG9wKzFdID0gJ1wwJzsKfQoKaW50IHRyeV9yZWR1Y2UoKSB7CiAgICBpZiAoc3RhY2tbdG9wXSA9PSAnMicpIHsKICAgICAgICBzdGFja1t0b3BdID0gJ1MnOwogICAgICAgIHByaW50ZigiUmVkdWNlOiBTLT4yXHRTdGFjazogJXNcbiIsIHN0YWNrKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpZiAodG9wID49IDIgJiYgc3RhY2tbdG9wXT09JzAnICYmIHN0YWNrW3RvcC0xXT09J1MnICYmIHN0YWNrW3RvcC0yXT09JzAnKSB7CiAgICAgICAgdG9wIC09IDI7CiAgICAgICAgc3RhY2tbdG9wXSA9ICdTJzsKICAgICAgICBwcmludGYoIlJlZHVjZTogUy0+MFMwXHRTdGFjazogJXNcbiIsIHN0YWNrKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpZiAodG9wID49IDIgJiYgc3RhY2tbdG9wXT09JzEnICYmIHN0YWNrW3RvcC0xXT09J1MnICYmIHN0YWNrW3RvcC0yXT09JzEnKSB7CiAgICAgICAgdG9wIC09IDI7CiAgICAgICAgc3RhY2tbdG9wXSA9ICdTJzsKICAgICAgICBwcmludGYoIlJlZHVjZTogUy0+MVMxXHRTdGFjazogJXNcbiIsIHN0YWNrKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7CiAgICBzdHJjcHkoaW5wdXQsICIxMDIwMSQiKTsKCiAgICBwcmludGYoIlN0YWNrXHRJbnB1dFx0QWN0aW9uXG4iKTsKCiAgICB3aGlsZSAoaW5wdXRbaV0gIT0gJ1wwJykgewogICAgICAgIHB1c2goaW5wdXRbaV0pOwogICAgICAgIHByaW50ZigiJXNcdCVzXHRTaGlmdCAlY1xuIiwgc3RhY2ssIGlucHV0K2krMSwgaW5wdXRbaV0pOwoKICAgICAgICB3aGlsZSAodHJ5X3JlZHVjZSgpKTsgCgogICAgICAgIGkrKzsKICAgIH0KCiAgICBpZiAoc3RyY21wKHN0YWNrLCAiUyQiKSA9PSAwKQogICAgICAgIHByaW50ZigiU3RyaW5nIEFjY2VwdGVkXG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlN0cmluZyBSZWplY3RlZFxuIik7CgogICAgcmV0dXJuIDA7Cn0=