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] Đếm trạng thái NFA Thompson từ regex hậu tố

    Bộ dựng Thompson (Thompson construction) biến một biểu thức chính quy thành một NFA có ε\varepsilonε-dịch chuyển. Trong bài này, quy tắc dựng được cố định như sau (số trạng thái và số dịch chuyển của mỗi mảnh NFA con):

    • Kí tự đơn ccc: mảnh gồm 222 trạng thái, 111 dịch chuyển.
    • Nối tiếp e1⋅e2e_1 \cdot e_2e1​⋅e2​ (kí hiệu .): gộp trạng thái kết thúc của e1e_1e1​ với trạng thái bắt đầu của e2e_2e2​ thành một. Số trạng thái =s1+s2−1=s_1+s_2-1=s1​+s2​−1; số dịch chuyển =t1+t2=t_1+t_2=t1​+t2​.
    • Hội e1∣e2e_1\mid e_2e1​∣e2​ (kí hiệu |): thêm 111 trạng thái bắt đầu mới, 111 trạng thái kết thúc mới, và 444 dịch chuyển ε\varepsilonε nối chúng với e1,e2e_1,e_2e1​,e2​. Số trạng thái =s1+s2+2=s_1+s_2+2=s1​+s2​+2; số dịch chuyển =t1+t2+4=t_1+t_2+4=t1​+t2​+4.
    • Lặp Kleene e∗e^{*}e∗ (kí hiệu *): thêm 111 trạng thái bắt đầu mới, 111 trạng thái kết thúc mới, và 444 dịch chuyển ε\varepsilonε. Số trạng thái =s+2=s+2=s+2; số dịch chuyển =t+4=t+4=t+4.

    Cho biểu thức chính quy viết dưới dạng hậu tố (postfix, không dấu ngoặc) chỉ gồm chữ cái thường a-z (toán hạng) và ba toán tử ., |, *, hãy tính tổng số trạng thái và tổng số dịch chuyển (kể cả ε\varepsilonε) của NFA thu được khi dựng theo Thompson với quy tắc trên.

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

      Một dòng duy nhất chứa biểu thức hậu tố (chỉ gồm a-z, ., |, *, không khoảng trắng, độ dài ≤200\le 200≤200). Biểu thức luôn hợp lệ (đủ số toán hạng cho mỗi toán tử).

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

      Một dòng gồm hai số nguyên cách nhau một khoảng trắng: số trạng thái và số dịch chuyển của NFA.

      Ví dụ: với đầu vào ab. (biểu diễn a⋅ba\cdot ba⋅b), kết quả là 3 2.

    Ví dụ:

    Đầu vào:

    a

    Đầu ra:

    2 1
    

    Đầu vào:

    ab.

    Đầu ra:

    3 2
    

    Đang tải editor...