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] Kiểm tra khớp biểu thức chính quy cho token

    Trong lý thuyết trình biên dịch, biểu thức chính quy (regular expression) là công cụ đặc tả các loại token. Xét một biểu thức chính quy RRR chỉ được xây dựng từ:

    • Các ký tự chữ cái thường aaa-zzz (ký hiệu nghĩa đen — literal),
    • Phép nối tiếp (concatenation) ngầm định giữa hai biểu thức con viết liền nhau,
    • Phép hợp (union) |,
    • Phép bao đóng Kleene *,
    • Dấu ngoặc đơn ( ) để nhóm, với thứ tự ưu tiên chuẩn: * > nối tiếp > |.

    Biểu thức rỗng (chuỗi RRR rỗng) chỉ khớp với chuỗi rỗng ε\varepsilonε.

    Cho biểu thức RRR và nnn chuỗi ký tự, với mỗi chuỗi hãy xác định chuỗi đó có thuộc ngôn ngữ do RRR sinh ra hay không (khớp toàn bộ chuỗi, không phải khớp một phần).

    Ví dụ: R=R = R= (a|b)*c khớp với c, abc, aabbc, nhưng không khớp với abcd hay chuỗi rỗng.

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

      Dòng 1: biểu thức chính quy RRR (có thể là dòng rỗng, biểu diễn ε\varepsilonε; độ dài tối đa 200 ký tự, chỉ gồm chữ thường aaa-zzz và các ký tự | * ( )). Dòng 2: số nguyên nnn (1≤n≤2001 \le n \le 2001≤n≤200). nnn dòng tiếp theo, mỗi dòng là một chuỗi cần kiểm tra (có thể là dòng rỗng, biểu diễn chuỗi rỗng; chỉ gồm chữ thường aaa-zzz, độ dài tối đa 200).

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

      In ra nnn dòng, dòng thứ iii là YES nếu chuỗi thứ iii thuộc ngôn ngữ của RRR, ngược lại in NO.

    Ví dụ:

    Đầu vào:

    
    3
    
    a
    b
    

    Đầu ra:

    YES
    NO
    NO
    

    Đầu vào:

    (a|b)*c
    5
    c
    abc
    aabbc
    abcd
    
    

    Đầu ra:

    YES
    YES
    YES
    NO
    NO
    

    Đang tải editor...