javascript - 标准 boolean 运算顺序

标签 javascript boolean logic operator-precedence

我正在用 Javascript 为 boolean 逻辑编写调车场算法,但遇到了操作顺序问题。我允许的操作是:

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

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

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

这是正确的吗?有没有我可以使用的标准,类似于数字的 PEMDAS/BODMAS 系统?

最佳答案

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

<醇>
  • 只有在使用中缀表示法时,优先级才会发挥作用。既然你提到调车场算法,我认为你打算使用中缀符号。
  • 每种语言都可以定义自己的优先级,并且由于您正在创建 DSL,因此您创建了优先级,但它必须保持一致。
  • 这些名称实际上是前缀函数名称,中缀更常见于运算符符号而不是名称。您应该使用运算符而不是函数名称:

    and &
    or |
    implies →
    equals (biconditional) ↔
    not !
    xor ⊕
    nor ⊽
    nand ⊼

  • 解析时将中缀转换为前缀或后缀,因此如果您正在构建中间形式(如 AST),运算符符号应更改为函数名称。
  • 你没有提到 associativity你需要它来做 NOT。
  • 这两个受人尊敬的来源之间的差异似乎没有标准。

    来自 "Foundations of Computer Science"作者:杰弗里·乌尔曼

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

    我们将使用的优先顺序是
    1. 不(最高)
    2. 与非门
    3. 也非
    4. 和
    5. 或者
    6.暗示 7. 双条件(最低)

    来自 Mathematica

    不是

    与非门
    异或
    或者
    或非
    等效
    暗示

    关于javascript - 标准 boolean 运算顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20147722/

    相关文章:

    javascript - 方法响应超时

    objective-c - 为什么 Objective-C 使用 YES/NO 宏约定而不是 true/false?

    php - 需要有关音乐网站逻辑/显示问题的建议

    python - 从数据框中排除行,除非满足另一个列条件

    javascript - 如何为 iphone 开发看起来像 native 应用程序的网页?

    javascript - 如何在 ionic 3 上创建一个 scrollTop 按钮

    r - 为什么R中的逻辑( boolean 值)需要4个字节?

    sql - 有效识别差异

    javascript - 如何将函数值存储在变量中并将其显示在文本区域上

    java - 不能使用 == 代替一元 & 来检查两个值是否相等