有没有办法检测 OCaml 代码中的冗余括号?
Is there a way to detect redundant parentheses in OCaml code?
我有兴趣检测 OCaml
代码中的冗余括号。我尝试过但没有结果的一些想法包括使用正则表达式,比较从 AST 生成的反向代码。我不知道如何继续这项任务。
有一个简单的解决方案。解析代码(使用编译器库),然后将其打印回来(再次使用编译器库)并比较结果。 compilerlibs 漂亮的打印机不会放置任何多余的括号。为了便于比较,您可以去掉所有空格,或者只计算括号的个数。
有更少的繁复和更多的临时方法,例如,捕捉括号的常见误用:
f(x)
而不是 f x
(f x) * (f y)
,而不是 f x * f y
,其中 *
是任意中缀运算符。
最后说一下通用的方法,以备学生项目需要。将比较运算符的优先级并标记具有更高优先级(绑定更紧)但仍带有括号的运算符,例如 (x * y) + z
,此处 *
的优先级高于 +
但仍被分隔括号。
我有兴趣检测 OCaml
代码中的冗余括号。我尝试过但没有结果的一些想法包括使用正则表达式,比较从 AST 生成的反向代码。我不知道如何继续这项任务。
有一个简单的解决方案。解析代码(使用编译器库),然后将其打印回来(再次使用编译器库)并比较结果。 compilerlibs 漂亮的打印机不会放置任何多余的括号。为了便于比较,您可以去掉所有空格,或者只计算括号的个数。
有更少的繁复和更多的临时方法,例如,捕捉括号的常见误用:
f(x)
而不是f x
(f x) * (f y)
,而不是f x * f y
,其中*
是任意中缀运算符。
最后说一下通用的方法,以备学生项目需要。将比较运算符的优先级并标记具有更高优先级(绑定更紧)但仍带有括号的运算符,例如 (x * y) + z
,此处 *
的优先级高于 +
但仍被分隔括号。