我正在编写一个小解析器,它将具有OR运算符和AND运算符。当你看到一系列OR和AND时,你期望它们会更具约束力吗?鉴于表达式a & b | c
,您认为它是(a&b)|c
还是a&(b|c)
?你能给出任何理由而不喜欢一个吗?
答案 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)
通常&优先于|在许多情况下。但您可以将表达式限制为完整的括号形式。