2017-07-21 48 views
7

Tôi đã tự hỏi, nếu có một tiêu chuẩn, cách kinh điển trong Haskell để viết không chỉ một trình phân tích cú pháp cho một định dạng tệp cụ thể, mà còn là một nhà văn.Phân tích cú pháp và in ấn khá giống với định dạng tập tin trong Haskell

Trong trường hợp của tôi, tôi cần phải phân tích cú pháp tệp dữ liệu để phân tích. Tuy nhiên, tôi cũng mô phỏng dữ liệu được phân tích và lưu nó trong cùng một định dạng tệp. Bây giờ tôi có thể viết một trình phân tích cú pháp bằng cách sử dụng Parsec hoặc một cái gì đó tương đương và cũng viết các hàm thực hiện đầu ra văn bản theo cách cần thiết, nhưng bất cứ khi nào tôi thay đổi định dạng tệp của mình, tôi sẽ phải thay đổi hai hàm trong mã của mình. Có cách nào tốt hơn để đạt được mục tiêu này không?

Cảm ơn bạn, Dominik

+1

Tôi nghĩ rằng điều đơn giản nhất để làm là định nghĩa một kiểu dữ liệu thể hiện cú pháp của tệp của bạn và sau đó viết một trình phân tích cú pháp riêng biệt và máy in đẹp như bạn nghĩ. Đây là những gì hầu hết các thư viện ngôn ngữ làm ví dụ. – jozefg

+2

Dưới đây là một số chủ đề có liên quan gần đây về reddit: [1] (https://www.reddit.com/r/haskell/comments/6aqvgj/parser_libraries_with_ast_output/), [2] (https://www.reddit.com/ r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse /) IMO công nghệ này vẫn có vẻ khá thử nghiệm. –

+0

Điều bạn muốn làm là xác định ngữ pháp và sử dụng một số thư viện để tạo trình phân tích cú pháp và máy in đẹp tự động. Có một số thư viện yêu cầu bồi thường để có thể làm điều đó nhưng đề xuất một có lẽ là OT (tôi sẽ có nếu tôi có kinh nghiệm với bất kỳ ai trong số họ) – jberryman

Trả lời

2

Gói BNFC-meta https://hackage.haskell.org/package/BNFC-meta-0.4.0.3

có thể là những gì bạn đang tìm kiếm

"Cụ thể, cho một bán dẫn lời LBNF ngữ pháp (như được sử dụng bởi các BNF Chuyển đổi) nó tạo ra (sử dụng Template Haskell) một trình phân tích cú pháp LALR và máy in khá đẹp cho ngôn ngữ. "

+0

Cảm ơn bạn rất nhiều vì ý kiến ​​và câu trả lời của bạn. Nó thực sự là khái niệm về một/ngữ pháp/mà tôi đang tìm kiếm. Ngoài gói BNFC-meta, [liên kết thứ hai] (https://www.reddit.com/r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse/) của Li-yao Xia cũng đề cập đến [cú pháp] thú vị (https: //hackage.haskell.org/package/syntax) thư viện. –

Các vấn đề liên quan