什么是在Java中实现自定义表达式求值程序的正确方法?

时间:2017-05-19 23:54:05

标签: java juel

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

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

"" &安培;&安培; " B" &安培;&安培; !" C"表示以下内容,

如果

,则为true
"a" is in the map, "b" is in the map but "c" is not in the map 

否则为

有什么办法在Java中实现这个? JUEL有帮助吗?

编辑:

为了清楚起见,我需要创建一种可配置的语言,您可以在配置文件中定义需要在运行时进行评估的任何类型的表达式。

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

"" &安培;&安培; " B"

!(" a"&&" d")

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

2 个答案:

答案 0 :(得分:0)

  

有什么办法在Java中实现这个?

我会使用像Javacc或Antlr这样的东西:

  • 阅读该工具的教程,并研究这些示例(特别是如果您之前从未学过/曾经学过语法和解析器生成器)
  • 为您的简单语言编写语法
  • 在语法中添加“动作”以动态评估表达式
  • 生成Java类

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

  

JUEL有帮助吗?

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

答案 1 :(得分:0)

基本技术是递归下降,Dijkstra分流码算法,或通过许多系统中的任何一个生成解析器。如果你只需要处理括号,'不','和',以及'或',我自己就不会超越递归下降。