使用不同关联性和相同优先级的相邻运算符消除表达式的歧义

时间:2013-02-27 16:41:27

标签: parsing evaluation operator-precedence associativity disambiguation

假设我有一个表达式如下(其中是具有相同优先级但不具有相同关联性的二元运算符):

x ⨁ y ⨂ z

y会属于还是,并基于什么标准?

1 个答案:

答案 0 :(得分:1)

根据Edsgar Dijkstra的Shunting-yard algorithm,如果表达式中相邻的两个运算符具有相同的优先级,则表达式将根据第二个运算符的关联性消除歧义。

  1. 如果第二个运算符是左关联的,则操作数属于第一个运算符。
  2. 如果第二个运算符是右关联的,则操作数属于第二个运算符。
  3. 案例1: 是左关联的。表达式的计算结果为:

    (x ⨁ y) ⨂ z
    

    案例2: 是正确关联的。表达式的计算结果为:

    x ⨁ (y ⨂ z)