关于 Java 中布尔表达式的二叉表达式树库的建议

Sea*_*ean 5 java expression-trees boolean-expression soot

我正在使用 Java 进行一些非常简单的程序分析/转换Soot在 Java 中进行一些非常简单的程序分析/转换,并且我发现自己需要对布尔表达式进行一些简单的组合。例如,在我的分析过程中,我将有一个像这样的表达式(a < 25) && (b >= 10),我想(a >=-10)通过 OR 运算符将该表达式与 结合起来以获得像这样的完整表达式(a >=-10) || (a < 25) && (b >= 10)。基本上,只是将两个布尔表达式树组合成一个表达式。我可能还希望自动将表达式树转换为树的等效连接范式版本。

我的另一个要求是当我们有可以轻松消除的表达式时能够简化表达式(如果需要,可以通过自定义代码)。例如(a < 20) || (a >= 20)简化为TRUE、since (a < 20) = (!(a >= 20)),因此我们可以随时消除一些项。

我知道编写布尔表达式树是一个经典的介绍性问题,而且我很确定我以前已经实现过它(很久以前,对于数据结构类:))我知道我可以再做一次,如果需要......但考虑到这可能是以前处理过的事情,我想知道是否有关于我应该研究的库来解决上述问题的任何建议。我讨厌重新发明轮子,因为可能已经有一个非常好的轮子了。

总而言之,我正在寻找一个具有以下功能的 Java 库:

  • 布尔表达式树
  • 表达式的组合
  • 术语的简化(这是非常具体的,所以它“很高兴拥有”)
  • 转换为 CNF

有什么建议吗?

(注意:我不会评估这些树,因此每个节点都将是未解析的谓词,例如variable != 20or foo >= 50,因此评估不是必需的,但如果它是库的一部分,也不会造成伤害。)