在 Java 中动态评估逻辑运算 AND、OR、NOT

Evaluating Logical Operations AND, OR, NOT dynamically in Java

提问人:User1512 提问时间:9/12/2023 最后编辑:User1512 更新时间:9/12/2023 访问量:56

问:

我需要使用 Java 代码为输入数据 (Map) 执行动态表达式。 例如

条件 -

EmployeeShift = 'General' AND (EmployeeType = 'CONTRACT' OR Designation IN 'ADMIN')

这个表达式将作为字符串变量传递,有了这个,我必须评估我在运行时出现的输入数据。所以我正在寻找一个解析器来解析条件。

使用 @Tagir Valeev 的答案 - 流帖子上的堆栈,我能够解析 AND、OR 操作。但我不确定如何将其扩展为 NOT 操作。我希望像下面这样工作,其中表达式检查 EmployeeType 和 Designation 的组合 NOT 操作,而不是检查每个变量。

EmployeeShift = 'General' AND NOT(EmployeeType = 'CONTRACT' OR Designation IN 'ADMIN')

任何关于如何做的例子或线索都将有巨大的帮助。提前致谢。

java 解析 逻辑运算符 递归下降

评论

1赞 scrhartley 9/12/2023
每当我进行解析时,我都会达到我想要一些工业强度的地步,所以去 ANTLR 生成我的解析器,他们有很多语法示例,例如算术查询语言
0赞 g00se 9/12/2023
也许是一个具有解析能力的规则引擎
0赞 user207421 9/12/2023
这就是目的,或者至少是其中一件事。java.util.function.Predicate
0赞 User1512 9/12/2023
@scrhartley 是否可以为上述场景提供一个示例。我看到了你分享的例子,但我不确定如何实现它。这有点令人困惑
0赞 scrhartley 9/12/2023
ANTLR 就是要让你买这本书。但是,您可以使用Google抓取足够的信息:SO问题SO显示访问者使用一篇文章。通常,使用解析树来创建更有用的版本,即 AST(抽象语法树)。

答: 暂无答案