首页
学习
活动
专区
圈层
工具
发布

再探 Parser 和 Parser Combinator

如果大家对解析器还知之甚少,可以看我之前的文章《如何愉快地写个小parser》,以及 A Guide to Parsing: Algorithms and Terminology [3],它是对各种 parser...Parser Combinator 是和 Parser Generator 平行的概念。...前文说过,用 parser combinator 的感觉就像搭积木,比如要解析 Hello, world!,可以写三个小 parser,然后将其组合起来。如下图: ?...然而我自己写的两种不同的 policy parser,实测结果咣咣打脸。pest 做的 parser 对 policy 表达式的处理速度在 4us 左右,而 nom 则超过了 5us。...将新的 parser 应用在 Elixir 中 最终我使用 rustler [9] 把两个优化后的 parser 集成到 Elixir 中,然后用 benchee 测试了一下: ?

2.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Parser Combinator

    这个解决方案直观有效,实际应用也很普遍,不止是 C 语言,在其他平台也常有类似的实现,例如 Java 的 ANTLR。但是它也存在一些问题,首先是用机器生成的代码质量往往不如手写高。...举个例子,在 Java 中,bool 类型的字面值写法有 true 和 false 两种,用 BNF 范式表述大概是这样: bool_literal ::= "true" | "false" 如果使用...至于下面的 >> 符号则接收两个 parser,先尝试运行前面的 parser,如果成功了,就丢弃返回值,并使用后一个 parser 来解析,如果后面的 parser 也成功了则返回后一个 parser...它依次使用第一个、第三个、第二个 parser 来解析文本,当三个 parser 都成功解析时,返回第三个 parser 的返回值,否则解析失败。...比如 parser combinator 可以先组合出解析整数的 parser、解析出浮点数的 parser 等,然后这些 parser 都可以在其他不同的具体需求中使用。

    1.7K20
    领券