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] Chèn hàm phi khi dựng dạng SSA đơn giản hoá

    Dạng SSA (Static Single Assignment) yêu cầu mỗi biến chỉ được gán giá trị đúng một lần; tại các điểm hợp nhất luồng điều khiển (nơi nhiều nhánh gặp lại nhau), trình biên dịch phải chèn một hàm φ\varphiφ (phi-function) cho mỗi biến có thể mang giá trị khác nhau tùy theo nhánh đã đi qua.

    Bài này dùng một tiêu chí chèn φ\varphiφ đơn giản hoá (chỉ xét khối tiền nhiệm trực tiếp trong CFG, không tính đến biên thống trị — dominance frontier — đầy đủ như thuật toán SSA chuẩn): cho một khối đích qqq trong đồ thị luồng điều khiển (CFG) gồm nnn khối và mmm cạnh có hướng, cùng tập biến được định nghĩa (gán giá trị) trong mỗi khối. Biến vvv cần chèn φ\varphiφ tại qqq khi và chỉ khi tồn tại ít nhất 2 khối tiền nhiệm trực tiếp khác nhau của qqq (tức các khối uuu có cạnh u→qu \to qu→q) mà vvv nằm trong tập biến được định nghĩa của khối đó (một khối tự nối tới chính qqq qua vòng lặp cũng được tính là một tiền nhiệm trực tiếp).

    Hãy liệt kê tất cả các biến cần chèn φ\varphiφ tại khối truy vấn qqq.

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

      Dòng 1: hai số nguyên nnn, mmm. mmm dòng tiếp theo: mỗi dòng u v — cạnh có hướng từ khối uuu tới khối vvv. nnn dòng tiếp theo (lần lượt cho khối 0,1,…,n−10,1,\ldots,n-10,1,…,n−1): mỗi dòng bắt đầu bằng số nguyên kik_iki​ — số biến được định nghĩa trong khối iii — theo sau là kik_iki​ tên biến cách nhau khoảng trắng (kik_iki​ có thể bằng 0, khi đó dòng chỉ chứa số 0). Dòng cuối: số nguyên qqq — chỉ số khối truy vấn (0≤q<n0 \le q < n0≤q<n).

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

      In ra một dòng chứa các biến cần chèn φ\varphiφ tại khối qqq, đã sắp xếp theo thứ tự alphabet, cách nhau một khoảng trắng (nếu không có biến nào thỏa mãn, in một dòng trống).

    Ví dụ:

    Đầu vào:

    4 4
    0 1
    0 2
    1 3
    2 3
    0
    1 x
    1 y
    0
    3

    Đầu ra:

    
    

    Đầu vào:

    4 4
    0 1
    0 2
    1 3
    2 3
    0
    1 x
    1 x
    0
    3

    Đầu ra:

    x
    

    Đang tải editor...