1

我有一张包含许多属性的地图,例如“a”、“b”、“c”......

我想定义一个模板,我可以在其中评估表达式,例如,

"a" && "b" && !"c" 表示以下,

如果为真

"a" is in the map, "b" is in the map but "c" is not in the map 

否则为假

有什么方法可以在 Java 中实现这一点?JUEL 有帮助吗?

编辑:

为了明确这一点,我需要创建一种可配置的语言,您可以在其中定义需要在运行时评估的配置文件中的任何类型的表达式。

例如,我需要我的 java 代码来解析一个可能包含任何表达式的文件,例如,

"a" && "b"

!(“广告”)

我不知道在编译时需要评估哪些表达式。希望这使要求更加明确。

4

2 回答 2

0

有什么方法可以在 Java 中实现这一点?

我会使用 Javacc 或 Antlr 之类的东西:

  • 阅读该工具的教程,并研究示例(尤其是如果您以前从未学习过/被教过语法和解析器生成器)
  • 为你的简单语言写一个语法
  • 在语法中添加“动作”以动态评估表达式
  • 生成 Java 类

您将有一个学习曲线,但这应该是一个非常简单/没有问题的语法来实现。

JUEL 有帮助吗?

可能不是。首先,任何基于 JUEL 的东西都可以接受完整的 EL 语法。

于 2017-05-20T00:21:51.837 回答
0

基本技术是递归下降、Dijkstra Shutting-yard 算法或通过许多系统中的任何一个生成解析器。如果你只需要处理括号,'not','and'和'or',我自己不会超越递归下降。

于 2017-05-20T00:31:10.857 回答