【问题标题】:Is there a way to detect redundant parentheses in OCaml code?有没有办法检测 OCaml 代码中的冗余括号?
【发布时间】:2020-10-17 00:28:27
【问题描述】:

我有兴趣检测OCaml 代码中的多余括号。我尝试过的一些想法没有结果,包括使用正则表达式,比较从 AST 生成的反向代码。我不知道如何继续这项任务。

【问题讨论】:

  • 找到一对括号,去掉,编译成一样的东西吗?
  • 最终目标是什么? ocamlformat 或多或少是这样做的。

标签: ocaml


【解决方案1】:

有一个简单的解决方案。解析代码(使用编译器库),然后将其打印回来(再次使用编译器库)并比较结果。 compilerlibs 漂亮的打印机不会放任何多余的括号。为了便于比较,您可以删除所有空格,或者只计算括号的数量。

有更少的麻烦和更多的临时方法,例如,为了抓住括号的常见误用:

  • f(x) 而不是 f x
  • (f x) * (f y),而不是 f x * f y,其中 * 是任意中缀运算符。

最后,一般方法,以防万一您需要学生项目。将比较运算符优先级并标记具有更高优先级(绑定更紧密)但仍有括号的运算符,例如(x * y) + z,这里* 的优先级高于+,但仍用括号分隔。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多