【问题标题】:Java precedence on abstract syntax tree?Java在抽象语法树上的优先级?
【发布时间】:2014-02-25 16:43:19
【问题描述】:

我的一个期中复习问题要求以不同的方式解析这棵树 - 前/后缀等。不过它也要求这两种方式:在“中缀,Java 优先规则”和“中缀,从左到右”中优先” Java优先规则和普通的从左到右中缀规则有什么区别?我认为如果它是 Java 优先级,则可能需要像实际的 Java 代码一样的“换行符”,但我真的看不出这里真正问的是什么。提前感谢您的帮助

另一个问题。您如何看待 d 和 e 节点? 如果是后缀, (d e) f h * - 是否适合树的那部分?

【问题讨论】:

    标签: java parsing tree operator-precedence


    【解决方案1】:

    我认为从左到右的优先级只是意味着您只需从左到右应用所有中缀运算符,这样

    2 * 3 + 4 * 5
    

    被解释为

    ((2 * 3) + 4) * 5 = 50
    

    在 Java 和我知道的除 APL 之外的所有其他编程语言中,* 的优先级高于 +-,这意味着表达式被解释为

    (2 * 3) + (4 * 5) = 26
    

    (Java 有更多的运算符,所以优先级的顺序相当复杂。但如果你只想看到+-*/,你只需要知道*/ 具有更高的优先级;对于具有相同优先级的运算符,它们从左到右进行计算。)

    我猜作业是在询问您如何使用两种不同的优先级规则来表示树。当然,您可以将括号括起来,这意味着优先规则根本不适用:

    (foo (a, (b + c) * ((d ? e) - (f * h)), (j * k)) - g
    

    [? 之所以存在,是因为图中似乎缺少一个框。]所以你可能应该以一种没有不必要括号的方式来编写它,这意味着你需要知道优先规则。

    要回答你关于de 的最后一个问题:你应该问你的导师,因为我猜这意味着“打印错误”。除非他们在我研究这个之后提出了一些新的语法树图,否则看起来好像缺少一个框。

    【讨论】:

    • 非常感谢您的回答。它回答了我的需要。我认为 d 和 e 节点的缺失符号只是他扩展箭头的方式,因为他无法适应 d 和 e。再次感谢!
    • @user1830954 你的意思是- 盒子有三个孩子?这意味着什么? d - e - (f * h)?我仍然认为这是印刷错误。
    • 是的,这绝对是印刷错误。再次感谢您的澄清
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2019-08-12
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多