消歧

2

說我有一個表達如下(其中是具有相同的優先級水平,但不相同的相關性的二進制運算符):消歧

x ⨁ y ⨂ z 

y是否屬於,並根據什麼標準?

+0

你應該在Haskell中試試這個。 – 2013-07-12 03:04:57

+0

@MattFenwick - 我在Haskell中知道的具有相同優先級和不同關聯性的唯一運算符是'>> ='運算符('infixl 1')和'= <<'運算符('infixr 1')。我會盡快對它進行測試,但Haskell中的所有概率類型推理規則都會勝過關聯性,導致表達式被明確地評估,而不需要在調車碼算法中指定的Edsgar Dijkstra規則。 – 2013-07-12 03:30:12

回答

1

根據Edsgar Dijkstra的Shunting-yard algorithm如果表達式中的相鄰兩個運算符具有相同的優先級,則基於第二個運算符的關聯性對錶達式進行消歧。

  1. 如果第二個運算符是關聯的,則操作數屬於第一個運算符。
  2. 如果第二個操作符是正確關聯的,則操作數屬於第二個操作符。

案例1:是左結合的。該表達式評估爲:

(x ⨁ y) ⨂ z 

情況2:是右結合。表達式評估爲:

x ⨁ (y ⨂ z) 
+1

是的,我認爲這個人是對的。 – 2013-03-14 12:27:05