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 chuỗi ngoặc theo văn phạm đệ quy

    Xét văn phạm phi ngữ cảnh sinh ra các chuỗi ngoặc tròn cân bằng:

    S→( S ) S  ∣  εS \to (\,S\,)\,S \;\mid\; \varepsilonS→(S)S∣ε

    Cho một chuỗi sss chỉ gồm các ký tự ( và ) (có thể rỗng, độ dài tới 10410^4104). Hãy dùng bộ phân tích cú pháp đệ quy đi từ trái sang phải theo đúng văn phạm trên để xác định chuỗi có thuộc ngôn ngữ L(S)L(S)L(S) hay không.

    Nếu chuỗi hợp lệ, hãy tính thêm độ sâu lồng ngoặc lớn nhất (số cặp ngoặc mở chưa đóng tại thời điểm sâu nhất). Nếu chuỗi không hợp lệ, hãy xác định vị trí (0-indexed) đầu tiên mà bộ phân tích không thể tiếp tục khớp theo văn phạm: đó là vị trí một ký tự ) dư thừa không có ( tương ứng đứng trước nó, hoặc bằng độ dài chuỗi nếu thiếu ) ở cuối để đóng một ( đã mở.

    Ví dụ: chuỗi (() thiếu một dấu ) ở cuối, bộ phân tích báo lỗi tại vị trí 333 (bằng độ dài chuỗi), in ra INVALID 3.

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

      Một dòng chứa chuỗi sss (có thể là dòng rỗng), chỉ gồm ký tự ( và ).

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

      Nếu chuỗi hợp lệ, in VALID d với d là độ sâu lồng ngoặc lớn nhất (số nguyên, bằng 0 nếu chuỗi rỗng). Nếu chuỗi không hợp lệ, in INVALID p với p là vị trí lỗi đầu tiên như mô tả ở trên. Giữa hai phần trong output cách nhau đúng một khoảng trắng.

    Ví dụ:

    Đầu vào:

    Đầu ra:

    VALID 0
    

    Đầu vào:

    ()

    Đầu ra:

    VALID 1
    

    Đang tải editor...