Một bộ sinh mã (code generator) đơn giản duyệt qua một biểu thức hậu tố (postfix) và với mỗi token sinh ra đúng một lệnh máy ngăn xếp: mỗi số hạng sinh ra một lệnh PUSH v; mỗi toán tử trong {+,−,∗,/} sinh ra lệnh toán tử tương ứng (ADD, SUB, MUL, DIV), lệnh này pop hai phần tử — b ở đỉnh (mới hơn) và a ngay dưới — rồi đẩy lại a op b. Phép chia DIV lấy phần nguyên hướng về 0 (như (−7)÷2=−3); dữ liệu đảm bảo không chia cho 0 và biểu thức hợp lệ (đủ toán hạng cho mọi toán tử).
Cho biểu thức hậu tố, hãy xác định 4 chỉ số của đoạn mã được sinh ra và của quá trình thực thi nó:
PUSH.ADD+SUB+MUL+DIV).Ví dụ: với hậu tố 3 4 +, mã sinh ra là PUSH 3, PUSH 4, ADD — có 2 lệnh PUSH, 1 lệnh toán tử, độ sâu lớn nhất là 2 (khi ngăn xếp là [3,4]), kết quả cuối là 7. Kết quả in ra: 2 1 2 7.
Một dòng duy nhất chứa biểu thức hậu tố hợp lệ: các token (số nguyên, có thể âm, hoặc một trong + - * /) cách nhau bởi khoảng trắng, tối đa 2000 token.
In ra một dòng gồm 4 số nguyên cách nhau bởi khoảng trắng, theo đúng thứ tự: số lệnh PUSH, số lệnh toán tử, độ sâu ngăn xếp lớn nhất, giá trị kết quả cuối cùng.
Ví dụ:
Đầu vào:
3 4 +
Đầu ra:
2 1 2 7
Đầu vào:
7
Đầu ra:
1 0 1 7
Đang tải editor...