2009-11-18 39 views
6

Cách ưu tiên để tăng lỗi (ParseError) trong Parsec là gì? Tôi nhận được một số mã bên trong trình phân tích cú pháp thực hiện kiểm tra và nếu séc không thành công, bạn cần trả lại ParseError (ví dụ: Left ParseError khi chạy parse).Nâng cao ParseError trong Haskell/Parsec

Trả lời

5

Bạn có thể sử dụng Text.ParserCombinators.Parsec.Prim.unexpectedControl.Monad.fail cho việc này. Cả hai đều tham số String ký hiệu thông báo lỗi và sẽ trả về (trong trường hợp này) là giá trị loại GenParser tok st a.

Để biết thêm, hãy xem Text.ParserCombinators.Parsec.Error, cụ thể là Message. Ở đó bạn có thể đọc chức năng nào để sử dụng trong trường hợp nào (mặc dù cả hai biểu thị lỗi phân tích cú pháp, nhưng chúng hơi khác về mặt ngữ nghĩa).

+0

bạn có thể giải thích cách kết hợp chúng với trình phân tích cú pháp không? ví dụ khi có trình phân tích cú pháp như thế này: 'p = someparser <|> lỗi" lỗi "' điều là khi người nào đó thất bại thông báo lỗi của nó không biến mất, thay vào đó chuỗi "lỗi" được thêm vào nó. – niceman