我正在使用 Haskell,我想为这种语言构建一个类型检查器。为此,我需要一种解析它的方法,并且我知道 Haskell-src-exts 非常适合这项工作。但是,我对这个包的工作原理一无所知。我试图在互联网上找到一些示例/教程,但没有任何结果。谁能帮我?有谁知道一些教程,或者可以参考我一本包含关于这个包的例子的书?我也愿意尝试另一个包,如果它描述得很好并且它带有大量示例。
问问题
74 次
1 回答
2
一个方便的入口点是parseFile
. 如果使用以下程序解析自身:
module HelloParser where
import Language.Haskell.Exts
main = print =<< parseFile "HelloParser.hs"
然后它产生解析的输出(剥离SrcSpanInfo
值并重新格式化):
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 ])
这似乎相对可读。
为了完成 Haskell 的类型检查任务,我认为没有任何方法可以避免单独考虑Language.Haskell.Exts.Syntax
和其他包模块中的数百个解析树数据类型和构造函数,所以我不确定还有多少- 深度教程可以帮你。
于 2020-10-23T16:16:25.743 回答