Một máy ảo ngăn xếp (stack machine) đơn giản có 26 biến toàn cục đặt tên bằng các chữ cái thường a..z, tất cả khởi tạo giá trị 0, và một ngăn xếp (stack) số nguyên ban đầu rỗng. Máy hỗ trợ các lệnh sau, thực thi tuần tự từ trên xuống:
PUSH n: đẩy số nguyên n vào ngăn xếp.LOAD x: đẩy giá trị hiện tại của biến x vào ngăn xếp.STORE x: lấy (pop) phần tử trên đỉnh ngăn xếp, gán vào biến x.ADD, SUB, MUL, DIV: lấy ra hai phần tử trên đỉnh, gọi b là phần tử lấy ra trước (đỉnh), a là phần tử lấy ra sau, tính a op b rồi đẩy kết quả trở lại ngăn xếp. Phép chia lấy phần nguyên làm tròn về 0.PRINT: lấy (pop) phần tử trên đỉnh ngăn xếp và in ra (mỗi lần PRINT in trên một dòng).Cho một chương trình gồm các lệnh trên (không có nhãn, không có lệnh nhảy), hãy mô phỏng và in ra tất cả giá trị được PRINT, theo đúng thứ tự thực thi.
Ví dụ: chương trình
PUSH 3
PUSH 4
ADD
PRINT
in ra 7.
Dòng 1: số nguyên m (1≤m≤500) - số lệnh của chương trình.
m dòng tiếp theo, mỗi dòng là một lệnh theo đúng một trong các định dạng: PUSH n (số nguyên n, ∣n∣≤106), LOAD x, STORE x (x là một chữ cái thường), ADD, SUB, MUL, DIV, PRINT. Dữ liệu đảm bảo chương trình hợp lệ: ngăn xếp không bao giờ bị thiếu phần tử khi cần lấy ra, và không có phép chia cho 0.
Với mỗi lệnh PRINT được thực thi (theo đúng thứ tự), in ra giá trị bị lấy ra khỏi ngăn xếp tại thời điểm đó, mỗi giá trị trên một dòng.
Ví dụ:
Đầu vào:
4
PUSH 3
PUSH 4
ADD
PRINT
Đầu ra:
7
Đầu vào:
8
PUSH 5
STORE x
LOAD x
LOAD x
MUL
PRINT
LOAD x
PRINT
Đầu ra:
25
5
Đang tải editor...