Логическое ИЛИ против Логического И: что должно быть более обязательным? - PullRequest
4 голосов
/ 11 января 2011

Я пишу небольшой синтаксический анализатор, который будет иметь оператор OR и оператор AND. Когда вы видите серию OR и AND, что, по вашему мнению, будет более обязательным? Учитывая выражение a & b | c, ожидаете ли вы, что оно будет означать (a&b)|c или a&(b|c)? Можете ли вы дать какие-либо основания для предпочтения одного над другим?

Ответы [ 4 ]

4 голосов
/ 12 января 2011

AND и 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
4 голосов
/ 12 января 2011

Делай то, что делают все остальные;AND связывается сильнее, чем OR (см., Например, Таблица приоритетов операторов ).Это соглашение, которого все ожидают, поэтому примите принцип наименьшего удивления .

Этот выбор не является произвольным.Это связано с тем, что AND и OR следуют аналогичным отношениям для умножения и сложения соответственно;см., например, http://en.wikipedia.org/wiki/Boolean_logic#Other_notations.

Обратите внимание, что пользователям вашего языка следует настоятельно рекомендовать использовать скобки, чтобы их намерения были понятны читателям их кода.Но это до них!

0 голосов
/ 12 января 2011

Обычно & имеет приоритет над |во многих сценариях.Но вы можете ограничить выражения выражением в круглых скобках.

0 голосов
/ 12 января 2011

Если вы считаете это так, как если бы вы разделили математику, я бы сказал, что PEMDAS заставляет вас сказать, что AND является более обязательным. Это не всегда так.

Я рекомендую вам рекомендовать своим пользователям использовать круглые скобки там, где есть двусмысленность.

...