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∣ε
Cho một chuỗi s chỉ gồm các ký tự ( và ) (có thể rỗng, độ dài tới 104). 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) 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í 3 (bằng độ dài chuỗi), in ra INVALID 3.
Một dòng chứa chuỗi s (có thể là dòng rỗng), chỉ gồm ký tự ( và ).
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...