【发布时间】:2016-04-11 15:59:29
【问题描述】:
我现在正在使用 ocaml 来处理一些算术表达式。如果每个算术表达式都是一个字符串,例如:“1+2*(2-5)”。我想知道如何使用ocaml来消除无用的括号。
例如,如果我们得到一个像“(2*(1-8))”这样的字符串,我们应该输出“2*(1-8)”。
谢谢。
【问题讨论】:
标签: ocaml
我现在正在使用 ocaml 来处理一些算术表达式。如果每个算术表达式都是一个字符串,例如:“1+2*(2-5)”。我想知道如何使用ocaml来消除无用的括号。
例如,如果我们得到一个像“(2*(1-8))”这样的字符串,我们应该输出“2*(1-8)”。
谢谢。
【问题讨论】:
标签: ocaml
OCaml 只是一种编程语言,而不是符号代数系统。所以你可以在 OCaml 中解决这个问题,就像在任何通用语言中一样。
一个完整的解决方案是将表达式解析成一棵树,然后遍历这棵树以产生输出。为此,您需要按词法分析您的字符串(您可能可以使用Str 模块),然后解析标记。您可以非常轻松地编写自己的解析器,或者您可以真正全力以赴并使用像 ocamlyacc 这样的解析器生成器。
对于为算术表达式重新加上括号这一相对简单的问题,您可以使用"shunting yard" 算法的变体,该算法实质上计算表达式的规范、无括号 (RPN) 形式。
【讨论】: