Mở rộng máy ảo ngăn xếp bằng cách thêm bộ nhớ biến và lệnh xuất giá trị, để mô phỏng phần thực thi (runtime) của mã trung gian sinh ra từ các câu lệnh gán và in giá trị trong chương trình nguồn.
Máy ảo hỗ trợ các lệnh sau, thao tác trên một ngăn xếp số nguyên ban đầu rỗng và một bảng biến ban đầu rỗng:
PUSH x: đẩy số nguyên x vào đỉnh ngăn xếp.LOAD name: đẩy vào đỉnh ngăn xếp giá trị hiện tại của biến name; nếu biến này chưa từng được gán giá trị (chưa có lệnh STORE name nào trước đó), giá trị mặc định của nó là 0.STORE name: lấy (pop) phần tử ở đỉnh ngăn xếp và gán giá trị đó cho biến name (không đẩy lại gì vào ngăn xếp).ADD, SUB, MUL, DIV: lấy ra 2 phần tử trên đỉnh — b lấy trước (đỉnh), a lấy sau — tính a+b, a−b, a×b, hoặc a/b (chia lấy phần nguyên kiểu Python, làm tròn xuống) rồi đẩy kết quả trở lại.PRINT: lấy (pop) phần tử ở đỉnh ngăn xếp và xuất giá trị đó ra (đây là điểm khác biệt quan trọng: PRINT có pop, không phải chỉ xem đỉnh).Ví dụ: PUSH 5 / STORE x / LOAD x / LOAD x / ADD / PRINT in ra 10.
Dòng đầu tiên chứa số nguyên n (0≤n≤2000) — số lệnh. n dòng tiếp theo, mỗi dòng là một trong các dạng lệnh: PUSH x, LOAD name, STORE name, ADD, SUB, MUL, DIV, PRINT. Tên biến name gồm 1 đến 10 chữ cái thường. Đề bảo đảm chương trình hợp lệ: không có phép chia cho 0, và không lệnh nào yêu cầu nhiều phần tử hơn số phần tử hiện có trong ngăn xếp.
Với mỗi lệnh PRINT gặp phải, theo đúng thứ tự thực thi, in ra giá trị tương ứng trên một dòng riêng. Nếu chương trình không có lệnh PRINT nào, không in ra gì cả.
Ví dụ:
Đầu vào:
0
Đầu ra:
Đầu vào:
6
PUSH 5
STORE x
LOAD x
LOAD x
ADD
PRINT
Đầu ra:
10
Đang tải editor...