标准布尔运算顺序

我正在用Javascript编写用于布尔逻辑的调车场算法,并且在操作顺序上遇到了问题。我允许的操作有:

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

但是,我不知道这些的优先顺序是什么。截至目前,我拥有:

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

这样对吗?是否有类似于PEMDAS/BODMAS数字系统的标准可供我使用?


解决方案

您很难找到JavaScript的这些运算符的优先级定义,原因是:

  1. 优先级仅在使用中缀表示法时起作用。既然您提到了调车场算法,我想您打算使用中缀表示法。
  2. 每种语言都可以定义其自己的优先级,由于您正在创建DSL,因此您可以创建优先级,但它必须是一致的。
  3. 这些名称实际上是前缀函数名,与名称相比,infix更常见于运算符符号。您应该使用运算符,而不是函数名:

    和&;
    或|
    暗示→
    等于(双条件)↔
    不是!
    异或⊕
    Nor⊽
    与非⊼

  4. 在解析时,您将infix转换为前缀或后缀,因此,如果您正在构建一个中间形式(如AST),则运算符符号应该更改为函数名。
  5. 您没有提到associativity,因为您不需要。
从这两个值得尊敬的消息来源之间的差异来看,似乎没有标准。

出自"Foundations of Computer Science",作者:Jeffrey D.Ullman

逻辑运算符的结合性和优先性

我们应该使用的优先顺序是
1.不(最高)
2.NAND
3.NOR
4.和
5.或
6.暗示 7.BICONDITIONAL(最低)

发件人Mathematica

不是

NAND
异或

也不
等效
暗示

相关文章