Ví dụ với gói Haskell-src-exts
Tôi đang làm việc với Haskell và tôi muốn xây dựng một trình đánh máy cho ngôn ngữ này. Để làm được điều này, tôi cần một cách để phân tích cú pháp và tôi biết rằng Haskell-src-exts rất phù hợp với công việc. Tuy nhiên, tôi không có một chút ý tưởng nào về cách gói này hoạt động; Tôi đã cố gắng tìm một số ví dụ / hướng dẫn trên internet mà không có kết quả. Ai giúp tôi với? Có ai biết một số hướng dẫn, hoặc có thể có thể tham khảo cho tôi một cuốn sách có chứa các ví dụ về gói này? Tôi cũng đang mở để thử một gói khác, nếu nó được mô tả tốt và đi kèm với vô số ví dụ.
Trả lời
Một điểm nhập cảnh thuận tiện là parseFile. Nếu chương trình sau được sử dụng để phân tích cú pháp chính nó:
module HelloParser where
import Language.Haskell.Exts
main = print =<< parseFile "HelloParser.hs"
sau đó nó tạo ra đầu ra được phân tích cú pháp (loại bỏ các SrcSpanInfogiá trị và được định dạng lại):
ParseOk
(Module (Just (ModuleHead (ModuleName "HelloParser") Nothing Nothing)) []
[ ImportDecl { importModule = ModuleName "Language.Haskell.Exts"
, importQualified = False
, importSrc = False
, importSafe = False
, importPkg = Nothing
, importAs = Nothing
, importSpecs = Nothing} ]
[ PatBind
(PVar (Ident "main"))
(UnGuardedRhs (InfixApp
(Var (UnQual (Ident "print")))
(QVarOp (UnQual (Symbol "=<<")))
(App
(Var (UnQual (Ident "parseFile")))
(Lit (String "HelloParser.hs" "HelloParser.hs")))))
Nothing ])
mà có vẻ tương đối dễ đọc.
Để hoàn thành nhiệm vụ kiểm tra kiểu Haskell, tôi không nghĩ rằng có bất kỳ cách nào để tránh việc xem xét cá nhân hàng trăm kiểu dữ liệu cây phân tích cú pháp và hàm tạo trong Language.Haskell.Exts.Syntaxvà các mô-đun gói khác, vì vậy tôi không chắc còn bao nhiêu nữa trong -depth hướng dẫn có thể giúp bạn.