如何将Haskell中的表达式转换为Tree结构以获取表达式中的信息?

时间:2015-09-14 20:07:44

标签: regex haskell functional-programming

有没有办法将 Haskell 语言中的表达式转换为类似树的格式,并从每个节点中提取信息。或者为给定的表达式生成所有可能的树? 例如:添加5 3 这是树,其中,3和5是叶节点," 添加"作为根。所以我需要的是分解上面的表达式,以便我可以对表达式做进一步的分析。 例如:* 知道我要去的价值是什么"添加"。     * 知道我在给定数字上执行的操作是什么(此处"添加",也可以是"减法","乘法和" #34;等等)     真的很感谢你的帮助:)

1 个答案:

答案 0 :(得分:7)

您可以使用Template Haskell

Language.Haskell.TH> runQ [e|3 + 5|]
InfixE (Just (LitE (IntegerL 3))) (VarE GHC.Num.+) (Just (LitE (IntegerL 5)))

haskell-src-exts

Language.Haskell.Exts> parse "3 + 5" :: ParseResult Exp
ParseOk (InfixApp (Lit (Int 3)) (QVarOp (UnQual (Symbol "+"))) (Lit (Int 5)))