Parsing 开始编写逻辑表达式计算器

Parsing 开始编写逻辑表达式计算器,parsing,logical-operators,expression-evaluation,Parsing,Logical Operators,Expression Evaluation,我想开发一个逻辑表达式计算器来计算特定逻辑表达式对特定表达式的适用性。比如说, 表达式的形式可以是 (A和B)不是C 然后,应使用另一个表达式(如 (B和C)或D 上述情况下的计算结果为FALSE,因为第二个表达式没有完全填充第一个表达式 表达式也可能更复杂,比如它可以有数值范围R(1-100),这意味着表达式的适用性在整个范围内都是有效的,比如正则表达式中的[A-Za-z0-9] 所以表达式可以很复杂,比如 (A和B)或C和R(1-100)不是R(80-100) 然后必须用一个表达式来计算,比

我想开发一个逻辑表达式计算器来计算特定逻辑表达式对特定表达式的适用性。比如说,

表达式的形式可以是

(A和B)不是C

然后,应使用另一个表达式(如

(B和C)或D

上述情况下的计算结果为FALSE,因为第二个表达式没有完全填充第一个表达式

表达式也可能更复杂,比如它可以有数值范围R(1-100),这意味着表达式的适用性在整个范围内都是有效的,比如正则表达式中的[A-Za-z0-9]

所以表达式可以很复杂,比如

(A和B)或C和R(1-100)不是R(80-100)

然后必须用一个表达式来计算,比如

(C或D)和B不是R(1-7)和R(25-100)


关于表达式何时满足另一个表达式,有明确的规则。因此,如果必须编写表达式计算器,那么最好的方法是什么。因为,我以前没有做过什么,我想先开始。任何相关的指针或类似的实现都会有很大的帮助

使用堆栈可以相当轻松地计算布尔表达式


基本上,当您看到“值”时,您将它们推到堆栈上,当您看到运算符时,您将应用它们。谷歌“布尔表达式堆栈”会给你很多点击量。

我可能误解了你,但你的前两个陈述似乎并不矛盾(它们是可以满足的——只要
D=TRUE和C=FALSE
)。A、B、C和D应该被视为代币。它们没有任何逻辑值,如TRUE或FALSE。打个比方,你可以把有几个桶,每个桶都有一个这样的表达式。在上面的例子中,有两个桶,每个桶都有一个表达式(A和B),我认为你在寻找类似的东西