这是我参与「第五届青训营」伴学笔记创作活动的第7天
1 规则引擎
定义
将业务决策与程序代码分离开,使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策
优点
解决重复编码问题,将业务决策与服务本身解耦,提高服务的可维护性,缩短开发路径,提高效率
组成部分
- 数据输入:接受业务数据作为执行过程中的参数
- 规则理解:按照预先定义的词法、语法、优先级、运算符等正确理解业务规则所表达的语义
- 规则执行:根据执行时输入的参数对策略集中的规则进行正确的解释和执行,同时检查数据类型,确保执行结果正确
应用场景
- 风控对抗
- 活动策略运营
- 数据分析和清洗
2 编译原理
规则引擎——编译原理
- 理解——词法分析、语法分析
- 执行——抽象语法树
- 输入输出——参数注入、类型检查
工作原理
-
词法分析
- 源代码字符串 => 词法单元Token
- 如何识别Token?
- 有限自动机,状态机,在任何一个状态,基于输入的字符,都能得到一个确定的状态
-
语法分析
- 识别表达式的语法结构的过程
-
抽象语法树
- 表达式的语法结构可以用树表示,每个节点是一个语法单元
- 上下文无关语法:无需考虑上下文就可判断正确性,可使用巴克斯范式BNF表达
-
类型检查
- 类型综合:根据子表达式的类型构造父表达式的类型
- 编译时&运行时检查
3 设计一个规则引擎
设计目标
支持特定的词法、运算符、数据类型和优先级,并且支持以上预定义语法的规则表达式的编译和执行