如何实现一个自定义规则引擎

规则引擎的功能可以简化为当满足一些条件时触发一些操作,通常使用 DSL 自定义语法来表述。规则引擎需要先解析 DSL 语法形成语法树,然后遍历语法树得到完整的语法表达式,最后执行这些语法表达式完成规则的执行。

image.png

本文以 gengine 来探讨如何设计和实现一个自定义规则引擎。

支持的语句

为了满足基本的业务规则需求,规则引擎应该要支持的语句有:

逻辑与算术运算

  • 数学运算(+、-、*、/)
  • 逻辑运算(&&、||、!)
  • 比较运算(==、!=、>、<、>=、<=)

流程控制

  • 条件(IF ELSE)
  • 循环 (FOR)

高级语句

  • 对象属性访问(对象.属性)
  • 方法调用(func())

规则语法的解析

规则的 DSL 语法定义应该简单明了,gengine 使用了开源的语法解析器 Antlr4 来定义和解析规则语法。

定义规则语法

规则的 DSL 基本语法格式如下:

begin
//规则体
end

其中规则体为具体规则语句,由上述的 逻辑与算术运算、流程控制、高级语句 组合而成。

例如,判断为一个大额异常订单的规则体:

if Order.Price>= 1000000 {
 return
}

更多内容请前往,「后端搬运工」查看原文。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容