Tôi cần thực hiện kiểm tra cú pháp phức tạp hơn đối với kết hợp trình phân tích cú pháp so với giấy phép ký hiệu chuẩn và hiện đang làm trong ứng dụng chức năng ^^
. Một ví dụ, kịch bản đơn giản là kiểm tra cho các từ khóa trùng lặp:Lỗi báo hiệu qua bộ phối hợp trình phân tích cú pháp ứng dụng chức năng
def keywords: Parser[List[String]] = "[" ~ repsep(keyword, ",") ~ "]" ^^ {
case _ ~ ks ~ _ =>
ks.groupBy(x => x).filter(_._2.length > 1).keys.toList match {
case Nil => ks
case x => throw new DuplicateKeywordsException(x)
}
}
này hoạt động, như trong phân tích cú pháp của tôi sẽ ném một ngoại lệ, nhưng tôi muốn sự thất bại để được chụp như một ParseResult.Failure chụp Input về nơi nó đã xảy ra . Tôi không thể tìm ra cách để báo hiệu điều này từ bên trong một khối ^^
hoặc sử dụng một số cấu trúc khác để đạt được cùng một kết thúc.
Brilliant. Nếu đây không phải là một phần của thư viện chính (tôi không thể tìm thấy nó) nó nên được. – Jxek