如何将布尔表达式字符串转换为对象?

时间:2013-03-18 10:46:22

标签: java parsing boolean boolean-expression

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

A & B | (C & !D)

我需要什么?例: 想象一下,我们有一组人,用户有一个输入字段,他可以将这些人中的两个(和更多)与布置表达式String连接起来,如:{/ p>

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

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

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

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

问题:

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

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

1 个答案:

答案 0 :(得分:1)

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

要进行解析本身,基础知识非常简单。这一切都取决于这些表达方式/可能变得多么复杂。要做一个适当且完整的布尔表达式语法,我建议使用像antlr这样的解析器工具。