parsing - Ocaml 解析字符串以生成树

标签 parsing tree ocaml grammar

我有一个类似的问题:

How to print a tree structure into a string fast in Ocaml?

但以相反的方式,我已经有了一个字符串并想将它解析回树。

例如,我有

type expr = 
  Number of int
 |Plus of expr*expr
 |Prod of expr*expr

我有一个像 1+2*3+4 这样的字符串(与上面的链接有点不同,假设 *+ 具有更高的优先级)
然后我希望我的结果是 expr 类型 Prod(Plus(1,2), Plus(3, 4))
我找到了另一个可能谈论这个的链接,但不确定这是否是解决我的问题的一种方式:

Parsing grammars using OCaml

请分享一些想法,谢谢。

最佳答案

这是一个标准的解析问题:在所有的编译器/解释器/等等中都面临着......有很多方法可以解决这个问题,基本上可以归结为以下几点:

  • 编写自己的递归下降解析器
  • 使用从解析器生成器生成的解析器

  • 听起来你正在做的事情是你需要一个抽象语法树(你在问题中提到的“树”)。你可以很容易地使用 OCaml 解析器生成器来完成这样的事情,一个好的方法是 Menhir.虽然您也可以编写自己的解析器,但使用 Menhir 或 ocamlyacc 之类的工具为您完成它是一个非常通用且快速的解决方案(与在简单的递归下降中处理非 LL(1) 事物的麻烦相比)解析器)。

    关于parsing - Ocaml 解析字符串以生成树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220292/

    相关文章:

    ocaml - 关于 "topfind"?

    ocaml - |> 在 Ocaml 中是什么意思?

    c# - 解析泛型时区分 ">>"和 ">"

    python - 精确拆分句子

    无法访问节点结构的成员

    c++ - 创建静态哨兵节点的正确方法是什么

    mysql - 重新设计数据库时应选择哪种选择(体育统计,比赛,地理范围)?

    ocaml - OCaml 中是否使用了 "open-ended list"和 "difference-list"?

    python - json读取错误json.decoder.JSONDecodeError : Invalid\escape

    json - 从 Ruby 中的 JSON 文件解析并从嵌套哈希中提取数字