首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏简易现代魔法

    Parser Combinator

    中,bool 类型的字面值写法有 true 和 false 两种,用 BNF 范式表述大概是这样: bool_literal ::= "true" | "false" 如果使用 Haskell 的 Megaparsec 这里的 >> 和 return 并不是 Megaparsec 特有的东西,Megaparsec 的 Parser 被实现为 Monad class 7 的实例,所以会有这些操作符,但这里不需要考虑这些问题 为了应对这种情况,必须手动使其支持回溯,所幸 Megaparsec 提供了这个函数: boolLiteral = try (string "#t" >> return (SBool True)) 前面直接使用了 Megaparsec 这个库,它通过提供基础的组合子封装了 parser 本身的实现,以至于前面一直在说某某函数会返回一个 parser,用某某 parser 会解析出什么,但却一直不知道这个 事实上,它的具体表示可以有很多种,甚至对于大多数组合子而言,这个表示都是不重要或者不可见的,Megaparsec 就可以灵活地选择解析 String、ByteString、Text 等,这里为简单起见,

    1.7K20发布于 2021-08-10
  • Rust 中的解析器组合因子(Parser combinators)

    有趣的是,如果我们在编写 Haskell 代码,那么在解析器库(译注:参阅 Megaparsec 文档)中就找不到 preceded 组合器。

    2.3K10编辑于 2022-06-30
  • 来自专栏云计算运维

    用 350 行代码从零开始,将 Lisp 编译成 JavaScript

    megaparsec就是这样的一个库。 首先我们来谈谈解析库的实现的思路。

    1.4K40发布于 2021-10-25
领券