用OCaml简化算术表达式

用OCaml简化算术表达式,ocaml,Ocaml,我现在使用ocaml来处理一些算术表达式。如果每个算术表达式都是类似于“1+2*(2-5)”的字符串。我想知道如何使用ocaml消除无用的括号 例如,如果我们得到一个类似“(2*(1-8))”的字符串,我们应该输出“2*(1-8)” 谢谢。OCaml只是一种编程语言,而不是符号代数系统。所以您可以用OCaml解决这个问题,就像在任何通用语言中一样 完整的解决方案是将表达式解析为一棵树,然后遍历该树以生成输出。为此,您需要对字符串进行词汇分析(可能可以使用Str模块),然后解析标记。您可以非常轻松

我现在使用ocaml来处理一些算术表达式。如果每个算术表达式都是类似于“1+2*(2-5)”的字符串。我想知道如何使用ocaml消除无用的括号

例如,如果我们得到一个类似“(2*(1-8))”的字符串,我们应该输出“2*(1-8)”


谢谢。

OCaml只是一种编程语言,而不是符号代数系统。所以您可以用OCaml解决这个问题,就像在任何通用语言中一样

完整的解决方案是将表达式解析为一棵树,然后遍历该树以生成输出。为此,您需要对字符串进行词汇分析(可能可以使用
Str
模块),然后解析标记。您可以非常轻松地编写自己的解析器,也可以完全使用解析器生成器,如
ocamlyacc


对于重新解析算术表达式这一相对简单的问题,您可以使用算法的一个变体,它本质上是计算表达式的一种规范的、未细化的(RPN)形式。

OCaml只是一种编程语言,而不是符号代数系统。所以您可以用OCaml解决这个问题,就像在任何通用语言中一样

完整的解决方案是将表达式解析为一棵树,然后遍历该树以生成输出。为此,您需要对字符串进行词汇分析(可能可以使用
Str
模块),然后解析标记。您可以非常轻松地编写自己的解析器,也可以完全使用解析器生成器,如
ocamlyacc

对于重新解析算术表达式这一相对简单的问题,您可以使用算法的一个变体,它本质上是计算表达式的一种规范的、未细化的(RPN)形式