Cho một chương trình đã ở dạng mã ba địa chỉ (TAC) tuyến tính (không có nhãn, không rẽ nhánh). Hãy viết trình thông dịch (interpreter) thực thi tuần tự các lệnh và tính giá trị cuối cùng của các biến.
Mỗi lệnh có dạng dest = src1 op src2 (với op ∈{+,−,∗,/}) hoặc dạng gán đơn giản dest = src. Mỗi toán hạng src, src1, src2 là tên biến (đã có giá trị từ trước, hoặc chính là một dest của lệnh trước đó) hoặc một hằng số nguyên (có thể âm). Phép chia / là chia lấy phần nguyên, cắt bỏ phần thập phân về phía 0 (ví dụ −7/2=−3, không phải −4); dữ liệu đảm bảo không có phép chia cho 0.
Dòng 1: số nguyên n — số biến có giá trị khởi tạo.
n dòng tiếp theo: mỗi dòng tên giá_trị (tên biến và giá trị nguyên ban đầu, cách nhau một khoảng trắng).
Dòng tiếp theo: số nguyên m — số lệnh TAC.
m dòng tiếp theo, mỗi dòng là một lệnh TAC theo đúng định dạng mô tả ở trên, các token cách nhau một khoảng trắng.
In giá trị cuối cùng của tất cả các biến từng xuất hiện (trong danh sách khởi tạo hoặc là đích của một lệnh gán), mỗi biến một dòng theo định dạng tên giá_trị, các dòng được sắp xếp theo thứ tự alphabet của tên biến.
Ví dụ:
Đầu vào:
1
x -7
2
t1 = x / 2
t2 = t1 * 3
Đầu ra:
t1 -3
t2 -9
x -7
Đầu vào:
2
a 3
b 4
1
t1 = a + b
Đầu ra:
a 3
b 4
t1 7
Đang tải editor...