C 在没有堆栈的情况下处理布尔表达式?

C 在没有堆栈的情况下处理布尔表达式?,c,boolean,expression,C,Boolean,Expression,我试图处理一个存储为字符串的布尔表达式。 它们没有括号,组合多个条件的唯一方法是使用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

我试图处理一个存储为字符串的布尔表达式。 它们没有括号,组合多个条件的唯一方法是使用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
    }
}

正如@Erik所提示的,布尔语句的通常规则是AND优先于OR。这通常是这样表述的:布尔语句是一个用OR链接在一起的术语序列,每个术语是一个用and链接在一起的因子序列。因此,您需要跟踪您是否在一个术语的“内部”,并且只对当前术语的结果应用and运算,或者只对整个术语的结果使用and运算


所以@Erik的例子打破了,因为即使“false AND true”本身是假的,它只是最外层OR中的两个术语之一,而另一个术语是真的。

对“false AND true OR true”的正确评价是什么?@Erik:从数学角度看,这大致相当于
false。真+真
,所以
绑定得更紧,所以答案应该是
。@Erik:啊,我明白了。这是一个破坏OP算法的例子。@Oli:这是一个想法,取决于他想要规则的方式。我认为算法会提供正确的结果?第一个命令的状态为FALSE,当它看到下一个命令为and时,它跳过了TRUE部分。然后当它有这个错误的状态,看到下一个是或,它处理下一个并返回一个真实的状态。这就是我认为算法的工作原理。。。?