Thiết kế trình thông dịch cho một máy ảo dựa trên ngăn xếp (stack machine), thực thi tuần tự các lệnh bytecode sau (mỗi dòng một lệnh):
PUSH x: đẩy số nguyên x vào đỉnh ngăn xếp.ADD, SUB, MUL, DIV: lấy ra hai giá trị trên đỉnh ngăn xếp — gọi b là giá trị lấy ra trước (đỉnh), a là giá trị lấy ra ngay sau — rồi đẩy vào kết quả a+b, a−b, a×b hoặc a÷b tương ứng (phép chia lấy phần nguyên làm tròn về 0; dữ liệu đảm bảo không chia cho 0).DUP: nhân đôi giá trị đang ở đỉnh ngăn xếp (đẩy thêm một bản sao của nó).POP: loại bỏ giá trị ở đỉnh ngăn xếp, không in ra gì.PRINT: in ra giá trị đang ở đỉnh ngăn xếp (không loại bỏ khỏi ngăn xếp).HALT: dừng thực thi ngay lập tức; mọi lệnh phía sau (nếu có) bị bỏ qua hoàn toàn.Chương trình được đảm bảo hợp lệ: ngăn xếp luôn có đủ phần tử cần thiết khi thực hiện mỗi lệnh. Nếu chương trình không chứa HALT, việc thực thi dừng lại khi đã xử lý hết danh sách lệnh.
Dòng đầu là số nguyên n (1≤n≤2000) — số lệnh. n dòng tiếp theo, mỗi dòng là một lệnh; riêng lệnh PUSH có thêm một số nguyên x cách bởi khoảng trắng, ví dụ PUSH -3.
In ra lần lượt các giá trị mà lệnh PRINT xuất ra trong quá trình thực thi, mỗi giá trị một dòng, theo đúng thứ tự. Nếu không có PRINT nào được thực thi, không in gì cả (output rỗng).
Ví dụ:
Input:
7
PUSH 3
PUSH 4
ADD
DUP
PRINT
PUSH 2
MUL
Output:
7
Ví dụ:
Đầu vào:
7
PUSH 3
PUSH 4
ADD
DUP
PRINT
PUSH 2
MUL
Đầu ra:
7
Đầu vào:
5
PUSH 1
PUSH 2
HALT
ADD
PRINT
Đầu ra:
Đang tải editor...