评估领域特定表达的搜索方法
Searching approach to evaluate domain specific expression
我正在 java 项目的上下文中开发一个工具来评估自定义域特定的、类似规则的表达式,例如
min-5 avg datalist > Number
各个标记的含义如下:
- min-5 :以下项
的可选最小(或最大,在这种情况下为 max-5)出现
- avg :一个可选的聚合函数,它对以下令牌数据列表进行操作(也可以是 sum 或任何类似的东西)
- 数据列表:数据列表(类型:整数/双精度),在整个表达式开始计算之前可用,可以通过前面的聚合函数减少为单个值
- 运算符:条件运算符<或>或=
- 数字:条件运算符的值
备注:
- The optional amount of occurrences and the aggregation can not happen both, that would make no sense.
- There can be multiple of the above expressions, chained with and/or
- These expressions are external input, not pre-defined
这个表达式的计算应该输出一个布尔值
因为我对表达式求值/解析比较陌生,所以我正在寻找一种优雅的方法来解决这个问题,可能使用 java framework/tool.
到目前为止我尝试过的:
- 手动解析结果不是很好
- 正在尝试使用 Janino Expression Evaluator,但我不知道如何以编程方式处理此问题
我正在寻找一种优雅的解决方案,感谢您的任何建议
您尝试做的是 DSL(领域特定语言),解决您的问题的优雅方法是为您的特定语言创建语法,以帮助您解析功能。
看看 JavaCC 或 Antlr。
我正在 java 项目的上下文中开发一个工具来评估自定义域特定的、类似规则的表达式,例如
min-5 avg datalist > Number
各个标记的含义如下:
- min-5 :以下项 的可选最小(或最大,在这种情况下为 max-5)出现
- avg :一个可选的聚合函数,它对以下令牌数据列表进行操作(也可以是 sum 或任何类似的东西)
- 数据列表:数据列表(类型:整数/双精度),在整个表达式开始计算之前可用,可以通过前面的聚合函数减少为单个值
- 运算符:条件运算符<或>或=
- 数字:条件运算符的值
备注:
- The optional amount of occurrences and the aggregation can not happen both, that would make no sense.
- There can be multiple of the above expressions, chained with and/or
- These expressions are external input, not pre-defined
这个表达式的计算应该输出一个布尔值
因为我对表达式求值/解析比较陌生,所以我正在寻找一种优雅的方法来解决这个问题,可能使用 java framework/tool.
到目前为止我尝试过的:
- 手动解析结果不是很好
- 正在尝试使用 Janino Expression Evaluator,但我不知道如何以编程方式处理此问题
我正在寻找一种优雅的解决方案,感谢您的任何建议
您尝试做的是 DSL(领域特定语言),解决您的问题的优雅方法是为您的特定语言创建语法,以帮助您解析功能。 看看 JavaCC 或 Antlr。