我的一个中期评论问题要求以不同的方式解析这个树 - pre / postfix等。它也会问这两种方式:在“Infix,Java优先级规则”和“Infix,从左到右”优先级”。 Java优先级规则和普通的从左到右中缀规则有什么区别?我认为如果它是Java优先级,可能需要像“newline”这样的东西,就像实际的java代码一样,但我真的不明白这里真正要问的是什么。感谢您的帮助
另一个问题。您如何看待d和e节点? 如果它是后缀,(d e)f h * - 适合树的那部分吗?
答案 0 :(得分:0)
我认为从左到右的优先级只是意味着您只需从左到右应用所有中缀运算符,以便
2 * 3 + 4 * 5
被解释为
((2 * 3) + 4) * 5 = 50
在Java和我知道的除APL之外的所有其他编程语言中,*
的优先级高于+
或-
,这意味着表达式被解释为
(2 * 3) + (4 * 5) = 26
(Java有更多的运算符,所以优先顺序非常复杂。但如果你只看到+
,-
,*
和{{ 1}},您需要知道的是/
和*
具有更高的优先级;对于具有相同优先级的运算符,它们从左到右进行评估。)
我猜这个任务是在问你如何使用两个不同的优先级规则来表示树。当然,您可以在所有内容周围加上括号,这意味着优先规则根本不适用:
/
[(foo (a, (b + c) * ((d ? e) - (f * h)), (j * k)) - g
就在那里,因为图中似乎缺少一个框。]所以你可能应该以没有不必要括号的方式编写它,这意味着你需要知道优先级规则
回答关于?
和d
的最后一个问题:你应该问你的导师,因为我猜这意味着“印刷错误”。除非他们研究了这些新的语法树图,否则看起来就像一个盒子丢失了。