假设我有一个表达式如下(其中⨁
和⨂
是具有相同优先级但不相同结合性的二进制运算符):
x ⨁ y ⨂ z
y
属于⨁
还是⨂
,依据什么标准?
根据Edsgar Dijkstra的分流码算法,如果表达式中相邻的两个操作符具有相同的优先级,则基于第二个操作符的结合性消除表达式的歧义。
- 如果第二个操作符是左关联的,则该操作数属于第一个操作符。
- 如果第二个操作符是右关联的,则该操作数属于第二个操作符。
情形1: ⨂
为左结合。表达式的计算结果为:
(x ⨁ y) ⨂ z
Case 2: ⨂
是右结合的。表达式的计算结果为:
x ⨁ (y ⨂ z)