【问题标题】:using OCaml to simplify arithmetic expression使用 OCaml 简化算术表达式
【发布时间】:2016-04-11 15:59:29
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: ocaml


    【解决方案1】:

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

    一个完整的解决方案是将表达式解析成一棵树,然后遍历这棵树以产生输出。为此,您需要按词法分析您的字符串(您可能可以使用Str 模块),然后解析标记。您可以非常轻松地编写自己的解析器,或者您可以真正全力以赴并使用像 ocamlyacc 这样的解析器生成器。

    对于为算术表达式重新加上括号这一相对简单的问题,您可以使用"shunting yard" 算法的变体,该算法实质上计算表达式的规范、无括号 (RPN) 形式。

    【讨论】:

      猜你喜欢
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多