我编写了一个生成 AST 的基本编译器,正确考虑了表达式中运算符的优先级。但是,在执行代码生成以生成 C++ 代码时,我不确定如何处理括号的使用。
对于这个表达式:
A - (B - c)
AST如下:
-
/ \
A -
/ \
B C
应该正确生成包含括号的前一个表达式,但是如果第二个运算符是加法运算符(例如),则括号将是不必要的。我宁愿只在必要时使用它们以提高可读性。
是否有任何规则规定这种行为以及如何知道何时使用括号。加号和减号在大多数语言中具有相同的优先级,我希望这适用于所有运算符。
从历史上看,他们称之为“漂亮的印刷”。如果你用谷歌搜索加上“优先级”,你可能会找到一些例子来帮助你。
非正式地,我认为基本思想是,当您递归到子表达式时,将其优先级与当前表达式进行比较。如果较低,则需要括号。否则你就不会。可以通过执行类似的检查来处理关联性:子表达式是否具有same作为父级的优先级,如果根据结合性它位于错误的一侧,则需要括号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)