这是我参与「第五届青训营」伴学笔记创作活动的第 6 天
规则引擎
概念
规则引擎是一种嵌入应用程序的组件,将业务决策从程序代码中分离。
解决了开发人员重复编码的问题,解耦业务决策和服务,提高了开发效率。
组成
数据输入
接受使用预定义的语义编写的规则。
接受业务数据作为执行过程的参数。
规则理解
按照预定义的词法、语法、优先级和运算符理解业务规则表达的语义。
规则执行
根据输入参数对策略集中的规则进行解释和执行。
检查执行过程中的数据类型,确保结果正确。
应用
风控对抗
与黑灰产的对抗,要求对黑灰产特征进行快速识别和对抗,通过调整和优化对抗策略实现风控识别效果。
活动策略运营
业务活动要根据用户反馈及时地调整运营策略,解耦运营逻辑和服务代码后,可以提高运营策略的迭代效率。
数据分析和清洗
数据分析师可以根据不同的需求来自定义规则,快捷更改产出的需要的数据类型。
编译原理
词法分析
把源代码字符串转换为词法单元,比如:
(a > 2) && (b < 5)
变为 "a",">","2","&&","b","<","5"
语法分析
词法分析之后,识别表达式的语法结构。
抽象语法树
表达式的语法结构使用树来表示,每个节点是一个语法单元。节点可以有下级节点。
构造抽象语法树可以通过巴克斯范式和递归下降算法来完成。
类型检查
类型检查可以通过类型综合和编译时检查、运行时检查。
类型综合是根据子表达式的类型构造父表达式的类型。
在构造语法树和执行时也可以进行类型检查。
设计规则引擎
目标
设计支持特定词法、运算符、数据类型和优先级,支持基于以上预定义语法的规则表达式的编译执行。
词法语法
合法的Token可以是由字母数字和下划线组成的参数,布尔值,字符串等等,设计一个状态机来分析词法。
语法树
对于一元运算符,设计为左子树为空,右子树为操作数。
对于二元运算符,左子树为左操作数,右子树为右操作数。
括号是左子树为空,右子树为内部表达式的抽象语法树。