#include <bits/stdc++.h>
using namespace std;
// Function to generate 3-address code from postfix expression
void generateTAC(string expr) {
stack<string> st;
int temp = 1;
for (char c : expr) {
if (isalnum(c)) {
st.push(string(1, c)); // Operand
} else { // Operator
string op2 = st.top(); st.pop();
string op1 = st.top(); st.pop();
string t = "t" + to_string(temp++);
cout << t << " = " << op1 << " " << c << " " << op2 << endl;
st.push(t);
}
}
// Final result
if (!st.empty()) {
cout << "Result = " << st.top() << endl;
}
}
int main() {
string expr;
cout << "Enter postfix expression: ";
cin >> expr;
cout << "\nThree-Address Code:\n";
generateTAC(expr);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSAzLWFkZHJlc3MgY29kZSBmcm9tIHBvc3RmaXggZXhwcmVzc2lvbgp2b2lkIGdlbmVyYXRlVEFDKHN0cmluZyBleHByKSB7CiAgICBzdGFjazxzdHJpbmc+IHN0OwogICAgaW50IHRlbXAgPSAxOwoKICAgIGZvciAoY2hhciBjIDogZXhwcikgewogICAgICAgIGlmIChpc2FsbnVtKGMpKSB7CiAgICAgICAgICAgIHN0LnB1c2goc3RyaW5nKDEsIGMpKTsgLy8gT3BlcmFuZAogICAgICAgIH0gZWxzZSB7IC8vIE9wZXJhdG9yCiAgICAgICAgICAgIHN0cmluZyBvcDIgPSBzdC50b3AoKTsgc3QucG9wKCk7CiAgICAgICAgICAgIHN0cmluZyBvcDEgPSBzdC50b3AoKTsgc3QucG9wKCk7CiAgICAgICAgICAgIHN0cmluZyB0ID0gInQiICsgdG9fc3RyaW5nKHRlbXArKyk7CiAgICAgICAgICAgIGNvdXQgPDwgdCA8PCAiID0gIiA8PCBvcDEgPDwgIiAiIDw8IGMgPDwgIiAiIDw8IG9wMiA8PCBlbmRsOwogICAgICAgICAgICBzdC5wdXNoKHQpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbCByZXN1bHQKICAgIGlmICghc3QuZW1wdHkoKSkgewogICAgICAgIGNvdXQgPDwgIlJlc3VsdCA9ICIgPDwgc3QudG9wKCkgPDwgZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBzdHJpbmcgZXhwcjsKICAgIGNvdXQgPDwgIkVudGVyIHBvc3RmaXggZXhwcmVzc2lvbjogIjsKICAgIGNpbiA+PiBleHByOwoKICAgIGNvdXQgPDwgIlxuVGhyZWUtQWRkcmVzcyBDb2RlOlxuIjsKICAgIGdlbmVyYXRlVEFDKGV4cHIpOwoKICAgIHJldHVybiAwOwp9