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] LALR(1) và xung đột reduce/reduce khi gộp trạng thái

    Cho văn phạm, trước tiên dựng họ tập mục LR(1) chính tắc {I0,I1,…,IN1−1}\{I_0, I_1, \ldots, I_{N_1-1}\}{I0​,I1​,…,IN1​−1​} (như mô tả ở bài "Dựng họ tập mục LR(1) chính tắc"). Gọi CORE của một trạng thái là tập các cặp (sản xuất, vị trí con trỏ) — BỎ QUA lookahead. Hai trạng thái LR(1) có CÙNG CORE sẽ được GỘP lại thành một trạng thái LALR(1) duy nhất; khi gộp, lookahead của mỗi mục là HỢP (union) các lookahead tương ứng từ mọi trạng thái được gộp.

    Sau khi gộp xong còn lại N2N_2N2​ trạng thái LALR(1) (N2≤N1N_2 \le N_1N2​≤N1​). Việc gộp có thể sinh THÊM xung đột reduce/reduce MỚI (theo lý thuyết, việc gộp KHÔNG BAO GIỜ sinh thêm xung đột shift/reduce mới nên chỉ cần xét reduce/reduce): tại một trạng thái đã gộp, nếu tồn tại 2 mục hoàn chỉnh KHÁC NHAU (khác sản xuất, không tính mục có LHS=S′LHS=S'LHS=S′) mà tập lookahead SAU KHI GỘP của chúng giao nhau khác rỗng, đó là xung đột.

    Ví dụ kinh điển: văn phạm S -> a A d, S -> b B d, S -> a B e, S -> b A e, A -> c, B -> c là LR(1) (không có xung đột trong 14 trạng thái LR(1) chính tắc) NHƯNG không phải LALR(1): sau khi gộp còn 13 trạng thái, một trong số đó có xung đột reduce/reduce mới giữa A -> c . và B -> c ..

    • Định dạng đầu vào:
      • Dòng 1: số nguyên nnn — số sản xuất của văn phạm.
      • nnn dòng tiếp theo: các sản xuất dạng A -> X1 X2 ... Xk (vế phải rỗng thì A ->). Đảm bảo văn phạm không chứa ký hiệu S' hay $.
    • Định dạng đầu ra:
      • Dòng 1: N1N_1N1​ — số trạng thái LR(1) chính tắc.
      • Dòng 2: N2N_2N2​ — số trạng thái LALR(1) sau khi gộp.
      • Dòng 3: in CONFLICT nếu việc gộp sinh ra ít nhất 1 xung đột reduce/reduce mới ở bất kỳ trạng thái nào, ngược lại in NO CONFLICT.

    Ví dụ:

    Đầu vào:

    6
    E -> E + T
    E -> T
    T -> T * F
    T -> F
    F -> ( E )
    F -> id
    

    Đầu ra:

    22
    12
    NO CONFLICT
    

    Đầu vào:

    6
    S -> a A d
    S -> b B d
    S -> a B e
    S -> b A e
    A -> c
    B -> c
    

    Đầu ra:

    14
    13
    CONFLICT
    

    Đang tải editor...