【发布时间】:2020-10-17 00:28:27
【问题描述】:
我有兴趣检测OCaml 代码中的多余括号。我尝试过的一些想法没有结果,包括使用正则表达式,比较从 AST 生成的反向代码。我不知道如何继续这项任务。
【问题讨论】:
-
找到一对括号,去掉,编译成一样的东西吗?
-
最终目标是什么? ocamlformat 或多或少是这样做的。
标签: ocaml
我有兴趣检测OCaml 代码中的多余括号。我尝试过的一些想法没有结果,包括使用正则表达式,比较从 AST 生成的反向代码。我不知道如何继续这项任务。
【问题讨论】:
标签: ocaml
有一个简单的解决方案。解析代码(使用编译器库),然后将其打印回来(再次使用编译器库)并比较结果。 compilerlibs 漂亮的打印机不会放任何多余的括号。为了便于比较,您可以删除所有空格,或者只计算括号的数量。
有更少的麻烦和更多的临时方法,例如,为了抓住括号的常见误用:
f(x) 而不是 f x
(f x) * (f y),而不是 f x * f y,其中 * 是任意中缀运算符。最后,一般方法,以防万一您需要学生项目。将比较运算符优先级并标记具有更高优先级(绑定更紧密)但仍有括号的运算符,例如(x * y) + z,这里* 的优先级高于+,但仍用括号分隔。
【讨论】: