Tôi đã đọc rất nhiều về Haskell Parser combinators và thấy rất nhiều chủ đề như:Haskell Parser combinators
- Parsec vs Yacc/Bison/Antlr: Why and when to use Parsec?
- Which Haskell parsing technology is most pleasant to use, and why?
- Parsec or happy (with alex) or uu-parsinglib
- Choosing a Haskell parser
- What is the advantage of using a parser generator like happy as opposed to using parser combinators?
Nhưng tất cả các chủ đề này đều so sánh Parser Combinators
với Parser Generators
.
Tôi muốn hỏi bạn đó của Parser Combinator
phù hợp nhất với các điều kiện sau:
- Tôi muốn có quyền kiểm soát tốt về các lỗi (bao gồm phục hồi lỗi) và các thông điệp cho người dùng
- Tôi muốn để có thể cung cấp cho trình phân tích cú pháp các phần nhỏ của văn bản (không phải toàn bộ tập tin cùng một lúc)
- Tôi muốn có thể thiết kế lại ngữ pháp một cách độc đáo (tôi hiện đang phát triển ngữ pháp, vì vậy "waf làm việc tốt" là quan trọng "
- Trình phân tích cú pháp cuối cùng phải nhanh (hiệu suất là quan trọng, nhưng không nhiều bằng điểm 1-3).
Tôi đã phát hiện ra, rằng combinators phân tích cú pháp phổ biến nhất là:
Tôi chỉ biết về parsec, một trình phân tích cú pháp đơn thuần. Nó khá dễ sử dụng và bạn có thể kiểm soát tốt các lỗi. – Jocke
Tôi chỉ sử dụng 'attoparsec' vì vậy tôi không biết tay đầu tiên về Parsec. attoparsec có danh tiếng là cực kỳ nhanh nhưng không quá tuyệt vời trên các thông báo lỗi phía trước. Nó được nhắm mục tiêu ở phân tích cú pháp cuối cùng cần một người dùng đầu cuối không bao giờ thấy thông báo lỗi từ đó. – asm
@AndrewMyers, tôi đồng ý, tôi đã sử dụng attoparsec cho loại điều đó và nó rất nhanh và đơn giản (đặc biệt là cho các ngữ pháp đơn giản-ish). Nó không có nhiều chức năng ưa thích như thư viện parsec bình thường trên hackage nhưng nó hỗ trợ 'Text' rất tuyệt vời. – Wes