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] Thực thi mã ba địa chỉ tuyến tính

    Cho một đoạn mã ba địa chỉ (TAC) tuyến tính (không có nhãn, không có lệnh rẽ nhánh), gồm các câu lệnh gán theo một trong hai dạng:

    • x = y op z với op∈{+,−,∗}op \in \{+, -, *\}op∈{+,−,∗}: gán cho biến xxx giá trị y op zy \ op \ zy op z;
    • x = y: gán cho biến xxx giá trị của yyy (phép sao chép/copy).

    Trong đó y,zy, zy,z mỗi cái có thể là tên một biến hoặc một hằng số nguyên (có thể âm). Một số biến được cho giá trị khởi tạo ban đầu; các biến không được khởi tạo và cũng chưa từng xuất hiện ở vế trái có giá trị mặc định là 000 khi được đọc.

    Hãy mô phỏng thực thi tuần tự (theo đúng thứ tự xuất hiện) toàn bộ các câu lệnh, sau đó in ra giá trị cuối cùng của tất cả các biến từng xuất hiện ở vế trái ít nhất một lần (dù được gán lại nhiều lần thì chỉ tính giá trị sau cùng), sắp xếp theo thứ tự bảng chữ cái (alphabet, so sánh chuỗi thông thường) của tên biến.

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

      Dòng 1: số nguyên kkk - số biến được khởi tạo giá trị ban đầu. kkk dòng tiếp theo: mỗi dòng có dạng name value (tên biến và giá trị nguyên khởi tạo, cách nhau 1 khoảng trắng). Dòng tiếp theo: số nguyên mmm - số câu lệnh TAC. mmm dòng tiếp theo: mỗi dòng là một câu lệnh TAC theo đúng cú pháp x = y op z hoặc x = y như mô tả (các token cách nhau đúng 1 khoảng trắng, dấu = là một token riêng).

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

      In ra đúng số dòng bằng số biến khác nhau từng xuất hiện ở vế trái, mỗi dòng theo định dạng name value, sắp xếp theo thứ tự bảng chữ cái của name.

      Ví dụ input:

      2
      a 3
      b 4
      2
      t1 = a + b
      c = t1 * 2
      

      Output:

      c 14
      t1 7
      

    Ví dụ:

    Đầu vào:

    0
    2
    x = 5
    y = x

    Đầu ra:

    x 5
    y 5
    

    Đầu vào:

    2
    a 3
    b 4
    2
    t1 = a + b
    c = t1 * 2

    Đầu ra:

    c 14
    t1 7
    

    Đang tải editor...