逻辑OR与逻辑AND:哪个应该更具约束力?

时间:2011-01-11 20:58:33

标签: parsing operator-precedence

我正在编写一个小解析器,它将具有OR运算符和AND运算符。当你看到一系列OR和AND时,你期望它们会更具约束力吗?鉴于表达式a & b | c,您认为它是(a&b)|c还是a&(b|c)?你能给出任何理由而不喜欢一个吗?

4 个答案:

答案 0 :(得分:4)

做别人做的事; AND比OR更紧密(参见例如C Operator Precedence Table)。这是每个人都期望的惯例,因此采用principle of least surprise

这种选择不是任意的。它源于这样一个事实:AND和OR分别遵循类似的关系来乘法和加法;见例如http://en.wikipedia.org/wiki/Boolean_logic#Other_notations

另请注意,应大力鼓励您的语言用户使用括号使其代表明白其意图。但这取决于他们!

答案 1 :(得分:4)

和布尔代数中的OR相当于常规代数中的*和 - 所以有意义的是,AND绑定比OR更难绑定,就像*绑定比+更难:

A B A*B A&B   A+B   A|B
0 0   0   0   0       0
0 1   0   0   1       1
1 0   0   0   1       1
1 1   1   1   1(>0)   1

答案 2 :(得分:0)

如果你认为你会离散数学,我会说PEMDAS会让你说AND更具约束力。但情况并非总是这样。

我建议您建议您的用户在不明确的地方使用括号。

答案 3 :(得分:0)

通常&优先于|在许多情况下。但您可以将表达式限制为完整的括号形式。