加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

解析 – 可以处理歧义的解析器库

发布时间: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可以做你想要的,它的标准选择组合器是确定性的,我没有考虑调整或替换这种行为,我不想让我害怕)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读