SDD sinh mã ba địa chỉ (three-address code) cho biểu thức số học gắn hai thuộc tính tổng hợp cho mỗi biểu thức con E: E.place (tên biến/hằng/biến tạm lưu giá trị) và E.type (kiểu suy diễn được). Với luật E→E1opE2: một biến tạm mới t được cấp phát, một bộ tứ (quadruple) t = E1.place op E2.place được sinh ra (theo đúng thứ tự toán hạng trái–phải), và:
int, ngược lại E.type=float (ép kiểu ngầm định khi trộn int và float).float).Cho một bảng ký hiệu gồm các biến (tên, kiểu ∈{int, float}) và một biểu thức dạng hậu tố (postfix, các token cách nhau bởi khoảng trắng) chỉ gồm toán hạng (tên biến trong bảng ký hiệu, hoặc hằng số — hằng chứa dấu . có kiểu float, ngược lại int) và các toán tử + - * /, hãy mô phỏng SDD nói trên: các biến tạm được đặt tên t1, t2, t3, ... theo thứ tự sinh ra (bắt đầu từ 1). Biểu thức đầu vào luôn hợp lệ về cú pháp (đủ toán hạng cho mọi toán tử, kết quả cuối cùng là một giá trị duy nhất).
Dòng đầu: m (0≤m≤200) — số biến. m dòng tiếp theo: <name> <type>. Dòng cuối: biểu thức hậu tố (có thể là một token đơn), các token cách nhau bởi khoảng trắng.
In lần lượt từng bộ tứ đã sinh, mỗi bộ tứ một dòng dạng t<k> = <left> <op> <right> theo đúng thứ tự sinh ra; dòng cuối cùng in RESULT <place> : <type> với <place> và <type> là thuộc tính của biểu thức toàn cục (nếu biểu thức chỉ có một token, không có bộ tứ nào được sinh, chỉ có dòng RESULT).
Ví dụ:
Đầu vào:
0
3 4 +
Đầu ra:
t1 = 3 + 4
RESULT t1 : int
Đầu vào:
2
x int
y float
x y + x *
Đầu ra:
t1 = x + y
t2 = t1 * x
RESULT t2 : float
Đang tải editor...