【发布时间】:2012-06-30 22:00:36
【问题描述】:
是否有任何开源Java库或Java源代码来简化布尔表达式,如
!((A.B+C).(!A+BC))
在哪里,
! - represents NOT
+ - represents OR
. - represents AND
非常感谢您在这方面的帮助
【问题讨论】:
-
我不会说这是骗人的,因为在这种情况下输入的材料不是有效的布尔表达式
是否有任何开源Java库或Java源代码来简化布尔表达式,如
!((A.B+C).(!A+BC))
在哪里,
! - represents NOT
+ - represents OR
. - represents AND
非常感谢您在这方面的帮助
【问题讨论】:
不,我不这么认为,但使用ANTLR(声明式)或JParsec(编程式)为这种语言编写解析器应该很简单
对于 ANTLR,使用 First Order Logic Grammar 作为起点。
对于 JParsec,JParceC calculator tutorial 接近您的需要。
【讨论】:
我不知道 java 中有任何 API。 但是,您可以拆分表达式并为每个部分构建谓词。 你可能有兴趣看看this
【讨论】:
首先让我确认我是否正确地回答了您的问题 - 您是否正在考虑以简化方式对给定表达式进行编码的能力?
如果是,那么您可以尝试 Xtend:http://eclipse.org/xtend/ 和 Xtext http://www.eclipse.org/Xtext/
Xtend 是一种静态类型的编程语言,可编译为可理解的 Java 源代码。 Xtend 是使用 Xtext 开发的。
Xtext 是一个用于开发编程语言和领域特定语言的框架。
如果您正在查看仅给定表达式的算法,则上述信息不适用。
希望这些信息对你有用。
【讨论】:
闻起来像 SQL?您可以简单地将 !,.,+ 转换为 NOT、AND、OR,过滤掉某些魔术关键字,然后将它们传递给传统的 JDBC 后端。 "SELECT 1 WHERE" + 表达式
否则,听起来您需要一个完整的逻辑 AST+解析器 (antlr),因为简单地构建一个表示表达式的 DOM 并不会非常有用(因此,没有那么多工具通常需要表达式对象图并应用通用公理)。有一些高度专业化的变体 - 查找规则引擎,如流口水。但我猜这并不是你想要的。
【讨论】: