Обрабатывать логические выражения без стека? - PullRequest
1 голос
/ 03 мая 2011

Я пытаюсь обработать логическое выражение, которое хранится в виде строки.У них не будет скобок, и единственный способ объединить несколько условий - это использовать AND и OR.
Так что я пришел к этому правилу, чтобы соответствовать им.Кто-нибудь знает какие-либо ситуации, когда это не работает?

processCondition() {
    if next is OR {
        if state is TRUE, done // Sets state to TRUE
        if state is FALSE, process next condition // Sets state to FALSE
    }
    if next is AND {
        if state is TRUE, process next condition // Sets state to TRUE
        if state is FALSE, skip next  // Sets state to FALSE
    }
}

1 Ответ

2 голосов
/ 03 мая 2011

Как подсказывает @Erik, обычное правило для логических операторов состоит в том, что AND имеет приоритет над OR.Это часто формулируется следующим образом: логическое выражение - это последовательность членов , соединенных вместе с ИЛИ, и каждый член представляет собой последовательность факторов , соединенных вместе с И.Таким образом, вам нужно отслеживать, находитесь ли вы «внутри» термина, и применять операции И только к результату для текущего термина, и использовать ИЛИ только к результату всего термина.

Итак, @ Erik'sпример ломается, потому что хотя «false AND true» само по себе является false, это всего лишь один из двух терминов во внешнем ИЛИ, а другой - true.

...