评估领域特定表达的搜索方法

时间:2019-01-22 11:53:40

标签: java parsing dsl

我正在Java项目的上下文中使用一种工具来评估自定义域特定的,类似规则的表达式,例如

min-5 avg datalist > Number

带有各个标记的含义如下:

  • min-5:以下项出现的可选最小值(或最大值,在这种情况下为max-5)
  • avg:一个可选的聚合函数,可对以下令牌数据列表进行操作(也可以是总和或类似的值)
  • datalist:在整个表达式开始求值之前将可用的数据列表(类型:integer / double),可以通过前面的聚合函数将其简化为单个值
  • 运算符:条件运算符<或>或=
  • Number:条件运算符的值

说明:

  
      
  • 可选的发生次数和聚合不能同时发生,这没有任何意义。
  •   
  • 上面的多个表达式可以与和/或
  • 链接在一起   
  • 这些表达式是外部输入,不是预定义的
  •   

对此表达式的求值应输出一个布尔值

由于我比较不熟悉表达式评估/解析,因此我正在寻找一种优雅的方法来解决此问题,可能使用Java框架/工具。

到目前为止,我已经尝试过:

  • 手工分析,结果并不理想
  • 尝试使用Janino Expression Evaluator,但我不知道如何以编程方式处理

我正在寻找一种解决方案,以一种优雅的方式解决此问题,感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

您尝试做的是DSL(特定于域的语言),解决问题的一种优雅方法是为特定于您的语言创建语法,以帮助您解析功能。 看一下JavaCC或Antlr。