解析 – 可以处理歧义的解析器库
发布时间:2020-12-16 09:18:02 所属栏目:安全 来源:网络整理
导读:我正在寻找一个成熟的解析器库,无论是 Scala还是Haskell. 最重要的一点是,图书馆可以处理歧义. 如果一个表达式是模糊的,我希望每个可能的抽象语法树匹配表达式. 简单的例子:表达式a?b?c可以看作(a?b)?c或?(b?c),我需要两个变体. 谢谢! 解决方法 当瓦尔德的
我正在寻找一个成熟的解析器库,无论是
Scala还是Haskell.
最重要的一点是,图书馆可以处理歧义. 如果一个表达式是模糊的,我希望每个可能的抽象语法树匹配表达式. 简单的例子:表达式a?b?c可以看作(a?b)?c或?(b?c),我需要两个变体. 谢谢! 解决方法
当瓦尔德的文章“理解蒙纳士”(符号的前兆)是令人兴奋的和新的时候,我觉得这个老家伙记得了.这个想法是你(引用)通过成功的列表来替换故障,这意味着维护所有可能的解析列表.最后你通常只是进行第一场比赛,但是通过这个设置,你可以把它们全部拿到.
这对于确定性解析器来说并不是那么有效,这就是为什么它们不那么时尚,而是你需要的. 看看polyparse,特别是Text.ParserCombinators.HuttonMeijer和Text.ParserCombinators.HuttonMeijerWallace. (Hutton&Meijer将解析器库转换为Haskell(来自Gofer),Wallace添加了额外的功能.) 确保您在简单的情况下检查出来,如解析“aaaa” testP = do a <- many $char 'a' b <- many $char 'a' return (a,b) 看看它是否具有你所寻求的语义. 你要求成熟.这些库是纯函数式编程的一部分!话虽如此,我认为parsec更成熟,即使它更年轻. (猜测:我不认为parsec可以做你想要的,它的标准选择组合器是确定性的,我没有考虑调整或替换这种行为,我不想让我害怕) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |