java - 如何将 boolean 表达式字符串转换为对象?

标签 java parsing boolean boolean-expression

如何最好地评估用户给定的 boolean 表达式字符串,例如:

A & B | (C & !D)

我需要这个做什么?例子: 想象一下,我们有一群人,用户有一个输入字段,他可以在其中使用 boolean 表达式将其中两个(或更多)人连接起来,如 String像:

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

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

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

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

问题:

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

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

最佳答案

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

要进行解析本身,基础知识非常简单。这完全取决于这些表达式的复杂程度/可能变得多么复杂。要对 boolean 表达式进行正确且完整的语法,我会推荐像antlr这样的解析器工具。

关于java - 如何将 boolean 表达式字符串转换为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15474926/

相关文章:

java - 如何使用多个日期选择器更新 TextView

java - 用于根据枚举类型验证字符串的自定义注释

PHP 文本解析和/或创建您自己的语言?

ios - 错误 Json : "NSDebugDescription Garbage at end" (iOS)

c - 在 C 中,bool( boolean 值)占用多少空间?是 1 位、1 字节还是其他?

java - 无法在 Spring Controller 中接收对象

java - Long 类型的方法参数缺少 URI 模板变量 'usuarioEntidade'

python - 如何使用 python 从内联样式标记中删除特定值对?

java - 如何将 else false 添加到 boolean 方法

javascript - undefined 和 NaN,隐式与显式转换为 boolean 值