【问题标题】:Quotation mechanism for PolyML top levelPolyML 顶层的报价机制
【发布时间】:2022-07-19 00:34:05
【问题描述】:

对于各种玩具项目,我希望能够将对象语言嵌入到 PolyML 顶层,例如 HOL 的反引号语法,其中反引号之间的表达式由自定义解析器解析。

我不介意特定的分隔语法:反引号 `...`、guillemets > 或类似 {|...|} 的东西。我只是希望能够在顶层编写表达式并让它们由自定义解析器解析。

例如,如果我有类似的数据类型

datatype expression =
    Add of expression * expression
  | Int of int
  | Mul of expression * expression

我希望能够输入以下内容:

> `3 + 2 * 5`;
val it = Add (Int 3, Mul (Int 2, Int 5)): expression

这可能吗(以简单的方式)?

【问题讨论】:

    标签: sml polyml


    【解决方案1】:

    对于你的情况,你可以用这样的东西来近似这个

    val op + = Add
    val op * = Mul
    val ` = Int
    val it = `3 + `2 * `5
    

    但是,这不会使用自定义解析器或任何东西,只会依赖现有的解析器。

    如果您想使用自定义解析器,最直接的方法就是编写一个函数 parse : string -> expression 并在顶层手动应用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2020-09-25
      相关资源
      最近更新 更多