有没有办法检测OCaml代码中的冗余括号?

有没有办法检测OCaml代码中的冗余括号?,ocaml,Ocaml,我对检测OCamlcode中的冗余括号感兴趣。我尝试过一些没有结果的想法,包括使用正则表达式,比较AST生成的反向代码。我不知道如何继续执行这项任务。有一个简单的解决方案。解析代码(使用编译器libs),然后打印回来(再次使用编译器libs)并比较结果。编译器libs pretty打印机不会放置任何多余的括号。为了便于比较,可以删除所有空格,或者只计算括号数 有较少的起伏和更多的粘滞方法,例如,捕捉括号的常见误用: f(x)而不是fx (fx)*(fy),而不是fx*fy,其中*是任意中缀运算

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

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

有较少的起伏和更多的粘滞方法,例如,捕捉括号的常见误用:

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

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

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

有较少的起伏和更多的粘滞方法,例如,捕捉括号的常见误用:

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

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

找到一对括号,将其删除,它编译成相同的东西吗?最终目标是什么?找到一对括号,把它去掉,它编译成同样的东西吗?最终的目标是什么?ocamlformat或多或少做到了这一点。