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] Tối ưu cửa sổ trượt cặp STORE/LOAD dư thừa

    Trong tối ưu cửa sổ trượt (peephole optimization), một mẫu phổ biến là: nếu ngay sau lệnh STORE x là lệnh LOAD x (cùng biến x), thì lệnh LOAD x là dư thừa (giá trị của x vừa được lưu, chưa thể bị ai thay đổi ở giữa) và có thể xoá — chỉ xoá LOAD x, giữ nguyên STORE x vì giá trị vẫn cần được lưu.

    Quy tắc này được áp dụng lặp lại: sau khi xoá một LOAD x, hai lệnh liền kề mới hình thành tại đúng vị trí đó (lệnh ngay trước và lệnh ngay sau chỗ vừa xoá) có thể lại tạo thành một cặp khớp mẫu mới, và tiếp tục được xét, cho đến khi không còn cặp STORE x / LOAD x liền kề (cùng x) nào nữa. Lưu ý: nếu giữa STORE x và LOAD x còn lệnh khác chen vào (dù lệnh đó không liên quan gì đến x) thì hai lệnh đó không được coi là liền kề và không bị xoá.

    Cho danh sách nnn lệnh, mỗi lệnh có dạng STORE x, LOAD x (với x là tên biến, chuỗi chữ cái, độ dài ≤20\le 20≤20), hoặc một trong ADD, SUB, MUL, DIV (không tham số, không liên quan đến quy tắc trên). Hãy áp dụng quy tắc peephole trên cho đến khi không thể xoá thêm.

    Ví dụ: với 3 lệnh STORE x, LOAD x, LOAD x — cặp đầu (STORE x,LOAD x thứ nhất) bị xoá, sau đó STORE x lại liền kề với LOAD x thứ hai nên cũng bị xoá; kết quả cuối chỉ còn STORE x, và tổng cộng 2 lệnh đã bị loại bỏ.

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

      Dòng đầu: nnn (0≤n≤10000 \le n \le 10000≤n≤1000). nnn dòng tiếp theo, mỗi dòng một lệnh: STORE x, LOAD x, ADD, SUB, MUL, hoặc DIV.

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

      In ra danh sách lệnh còn lại sau khi tối ưu, mỗi lệnh một dòng, theo đúng thứ tự còn lại trong chương trình (có thể không dòng nào nếu mọi lệnh bị xoá — về lý thuyết không thể xảy ra hoàn toàn vì mọi STORE luôn được giữ, nhưng nếu n=0n=0n=0 thì phần này không có dòng nào). Dòng cuối cùng luôn có: tổng số lệnh đã bị loại bỏ.

    Ví dụ:

    Đầu vào:

    2
    STORE x
    LOAD x
    

    Đầu ra:

    STORE x
    1
    

    Đầu vào:

    0
    

    Đầu ra:

    0
    

    Đang tải editor...