1

我怎样才能最好地评估用户给定的布尔表达式字符串,例如:

A & B | (C & !D)

我需要这个做什么?示例:假设我们有一组人,并且用户有一个输入字段,他可以在其中使用布尔表达式连接其中两个(以及更多)人,如下String所示:

Peter & Klaus | (Peter & Clair | !Klaus)

(我知道这个表达没有任何意义,只是作为一个例子)。

然后我想使用布尔语法以某种方式拆分这个布尔字符串。稍后,如果一个人被重命名(例如 Peter -> John),我希望用户给出的表达式也自动重命名为新名称。这样用户就可以看到他保存的带有新名称的表达式的更新。

因此,我可能必须使用代表名称背后对象的 id 来存储布尔表达式。因此必须从数据库中的表达式中查找每个名称,因此必须通过布尔语法拆分字符串。

问题:

  • 我怎样才能最好地分割这个字符串?

  • 如何使用对象值存储此表达式,以便在名称更改时可以重新评估此字符串?

4

1 回答 1

1

一种解决方案是将信息解析为节点树,其中节点可以存储名称、运算符或表达式。您可以在每个节点上使用 id 来允许您替换名称或以后的任何内容。

要自己进行解析,基础非常简单。这一切都取决于这些表达式有多复杂/可以变得多么复杂。要对布尔表达式进行正确和完整的语法,我会推荐像 antlr 这样的解析器工具。

于 2013-03-18T12:49:26.913 回答