2013-11-22 96 views
2

我正在用Javascript編寫一個用於布爾邏輯的分流碼算法,並且我正在按照操作順序運行。我允許的操作是:標準布爾操作順序

and, or, implies, equals(biconditional), not, xor, nor, nand 

但是,我不知道這些優先順序是什麼。截至目前,我有:

not>equals>implies>xor>nor>nand>or>and 

這是正確的嗎?有沒有我可以使用的標準,類似於PEMDAS/BODMAS系統的數字?

+0

去由Coq證明助理,不>等於> xor> and> and> or>意味着 – jozefg

+0

C標準使用NOT> EQUAL> AND> XOR> OR。爲了優先解析工作,一元運算符應該比所有二元運算符具有更高的優先級。 AND通常被認爲是綁定比OR更緊密,允許我們在規範析取形式中實現不帶括號的表達式:'(A && B || C && D)'。 –

+0

既然你喜歡Shunting Yard算法,你可能也會喜歡[優先攀爬](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)。 –

回答

2

你有這樣很難找到這些運營商對JavaScript的優先級定義的原因在於:在使用中綴表示法時

  1. 優先只發揮了作用。既然你提到分流碼算法,我打算使用中綴表示法。
  2. 每種語言都可以定義它自己的優先級,而且由於您正在創建DSL,因此您可以創建優先級,但它必須一致。
  3. 這些名稱實際上是前綴函數名稱,而中綴符號比運算符號更常用於名稱。您應該使用運營商,而不是函數名:

    和&
    或|
    暗示→
    等於(雙邊)↔不是!
    XOR⊕
    也不⊽
    NAND⊼

  4. 當解析您轉換綴前綴或後綴,因此,如果您正在構建的中間形式經營的符號應更改爲函數名,如AST。
  5. 您沒有提及associativity,您將不需要它。
這兩個可敬的來源之間的區別似乎沒有標準。

"Foundations of Computer Science"由傑弗裏·烏爾曼邏輯運算符

優先順序,我們將使用

關聯性和優先級是
1. NOT(最高)
2. NAND
3. NOR
4. AND
5. OR
6. IMPLIES 7.雙條件(最低)

Mathematica

NOT
AND
NAND
XOR
OR
NOR
等效
IMPLIES

0

似乎沒有標準。

我有一本書(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部分學術認證。