Nhiều ngôn ngữ (Python, Java) biên dịch mã nguồn thành bytecode rồi thông dịch bằng một máy ảo dựa trên ngăn xếp (stack-based virtual machine). Hãy viết một trình thông dịch cho một máy ảo đơn giản gồm các lệnh sau (mỗi lệnh trên một dòng):
PUSH x: đẩy số nguyên x vào đỉnh ngăn xếp.ADD, SUB, MUL, DIV: lấy ra hai phần tử trên đỉnh (gọi lần lượt là b rồi a, theo thứ tự lấy ra), tính a+b, a−b, a×b hoặc a÷b (chia lấy phần nguyên làm tròn về 0) rồi đẩy kết quả trở lại.DUP: nhân đôi phần tử trên đỉnh (đẩy thêm một bản sao).POP: xoá phần tử trên đỉnh.PRINT: in ra giá trị phần tử trên đỉnh (không xoá khỏi ngăn xếp).HALT: dừng chương trình ngay lập tức (các lệnh phía sau, nếu có, không được thực thi).Nếu tại một lệnh nào đó ngăn xếp không đủ phần tử cần thiết, hoặc DIV chia cho 0, chương trình dừng ngay và in thêm dòng ERROR (sau các dòng PRINT đã thực hiện thành công trước đó).
Ví dụ: chương trình PUSH 3, PUSH 4, ADD, PRINT, HALT in ra 7.
PUSH có thêm một số nguyên cách bởi khoảng trắng).In ra, mỗi dòng một giá trị, kết quả của các lệnh PRINT được thực thi theo đúng thứ tự. Nếu chương trình gặp lỗi (ngăn xếp thiếu phần tử hoặc chia cho 0), in thêm dòng ERROR ở cuối rồi dừng. Nếu chương trình rỗng hoặc không có lệnh PRINT nào được thực thi trước khi kết thúc/lỗi, không in gì (hoặc chỉ in dòng ERROR nếu có lỗi ngay từ đầu).
Ví dụ:
Đầu vào:
7
PUSH 20
PUSH 4
DIV
PUSH 3
MUL
PRINT
HALT
Đầu ra:
15
Đầu vào:
5
PUSH 3
PUSH 4
ADD
PRINT
HALT
Đầu ra:
7
Đang tải editor...