Parsing Ocaml解析字符串以生成树

Parsing Ocaml解析字符串以生成树,parsing,tree,ocaml,grammar,Parsing,Tree,Ocaml,Grammar,我有一个类似的问题: 但以相反的方式,我已经有了一个字符串,并希望将其解析回树 例如,我有 type expr = Number of int |Plus of expr*expr |Prod of expr*expr 我有一个类似于1+2*3+4的字符串(与上面的链接稍有不同,假设*比+具有更高的过程) 然后我希望我的结果是expr类型Prod(加(1,2),加(3,4)) 我找到了另一个可能会谈论这一点的链接,但不确定这是否是解决我问题的一种方式: 请分享一些想法,谢谢。这是

我有一个类似的问题:

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

例如,我有

type expr = 
  Number of int
 |Plus of expr*expr
 |Prod of expr*expr
我有一个类似于1+2*3+4的字符串(与上面的链接稍有不同,假设
*
+
具有更高的过程)
然后我希望我的结果是expr类型
Prod(加(1,2),加(3,4))

我找到了另一个可能会谈论这一点的链接,但不确定这是否是解决我问题的一种方式:


请分享一些想法,谢谢。

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

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

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

OCaml发行版包含
ocamlyacc
一个工具,可以完全满足您的需要(正如克里斯托弗所指出的,还存在其他工具)

有关
ocamlyacc
的详细解释,请参见示例和定义小型表达式语言(类似于您的)解析器的位置