Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Trình thông dịch mã ba địa chỉ (TAC Interpreter)

    Mã ba địa chỉ (Three-Address Code – TAC) là một dạng biểu diễn trung gian (IR) phổ biến trong trình biên dịch, trong đó mỗi lệnh có tối đa một toán tử ở vế phải.

    Cho một chương trình gồm nnn lệnh TAC theo đúng thứ tự thực thi, mỗi lệnh có một trong ba dạng:

    • Lệnh sao chép: x = y
    • Lệnh một ngôi: x = -y (phủ định số học, không có khoảng trắng giữa - và y)
    • Lệnh hai ngôi: x = y OP z với OP∈{+,−,∗,/}OP \in \{+, -, *, /\}OP∈{+,−,∗,/} (các toán hạng và toán tử cách nhau đúng một khoảng trắng)

    Toán hạng y, z có thể là tên biến/biến tạm hoặc một hằng số nguyên không âm. Phép chia / là phép chia lấy phần nguyên làm tròn về 0 (ví dụ −7/2=−3-7 / 2 = -3−7/2=−3, không phải −4-4−4).

    Ban đầu một số biến được gán giá trị nguyên khởi tạo cho trước. Hãy mô phỏng việc thực thi tuần tự nnn lệnh TAC rồi in ra giá trị cuối cùng của một biến được chỉ định.

    Ví dụ: Với 3 lệnh t1 = a + b, t2 = t1 * c, a = t2 - 1, giá trị khởi tạo a=2,b=3,c=4a=2, b=3, c=4a=2,b=3,c=4, biến cần in là a: t1=5t_1=5t1​=5, t2=20t_2=20t2​=20, a=19a=19a=19.

    • Định dạng đầu vào:

      Dòng 1: số nguyên nnn (0≤n≤2000 \le n \le 2000≤n≤200) — số lệnh TAC. nnn dòng tiếp theo: mỗi dòng một lệnh TAC đúng một trong ba dạng nêu trên. Dòng tiếp theo: số nguyên mmm (1≤m≤501 \le m \le 501≤m≤50) — số biến được khởi tạo. mmm dòng tiếp theo: mỗi dòng gồm tên_biến giá_trị (giá trị là số nguyên, có thể âm), cách nhau một khoảng trắng. Dòng cuối: tên biến cần truy vấn giá trị cuối cùng (biến này chắc chắn được khởi tạo hoặc được gán trong chương trình).

    • Định dạng đầu ra:

      In ra đúng một số nguyên — giá trị cuối cùng của biến được truy vấn, trên một dòng.

    Ví dụ:

    Đầu vào:

    0
    1
    x 7
    x
    

    Đầu ra:

    7
    

    Đầu vào:

    3
    t1 = a + b
    t2 = t1 * c
    a = t2 - 1
    3
    a 2
    b 3
    c 4
    a
    

    Đầu ra:

    19
    

    Đang tải editor...