我正在用Javascript編寫一個用於布爾邏輯的分流碼算法,並且我正在按照操作順序運行。我允許的操作是:標準布爾操作順序
and, or, implies, equals(biconditional), not, xor, nor, nand
但是,我不知道這些優先順序是什麼。截至目前,我有:
not>equals>implies>xor>nor>nand>or>and
這是正確的嗎?有沒有我可以使用的標準,類似於PEMDAS/BODMAS系統的數字?
我正在用Javascript編寫一個用於布爾邏輯的分流碼算法,並且我正在按照操作順序運行。我允許的操作是:標準布爾操作順序
and, or, implies, equals(biconditional), not, xor, nor, nand
但是,我不知道這些優先順序是什麼。截至目前,我有:
not>equals>implies>xor>nor>nand>or>and
這是正確的嗎?有沒有我可以使用的標準,類似於PEMDAS/BODMAS系統的數字?
你有這樣很難找到這些運營商對JavaScript的優先級定義的原因在於:在使用中綴表示法時
和&
或|
暗示→
等於(雙邊)↔不是!
XOR⊕
也不⊽
NAND⊼
從"Foundations of Computer Science"由傑弗裏·烏爾曼邏輯運算符
優先順序,我們將使用
關聯性和優先級是
1. NOT(最高)
2. NAND
3. NOR
4. AND
5. OR
6. IMPLIES 7.雙條件(最低)
NOT
AND
NAND
XOR
OR
NOR
等效
IMPLIES
似乎沒有標準。
我有一本書(Digital design by Morris Mano),說NOT>AND>OR
。這是一個公認的觀點。
其餘的,我發現幾個意見。 This guy認爲EQUIV
是最低的(Wikipedia assist)。但this guy認爲EQUIV
是在中間XOR>EQUIV>OR
(與幾個參考)。
另一個分歧是關於XOR
的地方。這裏this third guy同意第二傢伙:)
總之,兩種意見:
1)NOT>AND>NAND>XOR>EQUIV>OR>NOR
(忽略NOR
)
2)NOT>AND>NAND>NOR>OR>IMPLIES>XOR>EQUIV
注:只有NOT>AND>OR
部分學術認證。
去由Coq證明助理,不>等於> xor> and> and> or>意味着 – jozefg
C標準使用NOT> EQUAL> AND> XOR> OR。爲了優先解析工作,一元運算符應該比所有二元運算符具有更高的優先級。 AND通常被認爲是綁定比OR更緊密,允許我們在規範析取形式中實現不帶括號的表達式:'(A && B || C && D)'。 –
既然你喜歡Shunting Yard算法,你可能也會喜歡[優先攀爬](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)。 –