Go语言规则引擎的学习 | 青训营笔记

102 阅读2分钟
这是我参与「第五届青训营」伴学笔记创作活动的第 6 天

规则引擎

概念

规则引擎是一种嵌入应用程序的组件,将业务决策从程序代码中分离。

解决了开发人员重复编码的问题,解耦业务决策和服务,提高了开发效率。

组成

数据输入

接受使用预定义的语义编写的规则。

接受业务数据作为执行过程的参数。

规则理解

按照预定义的词法、语法、优先级和运算符理解业务规则表达的语义。

规则执行

根据输入参数对策略集中的规则进行解释和执行。

检查执行过程中的数据类型,确保结果正确。

应用

风控对抗

与黑灰产的对抗,要求对黑灰产特征进行快速识别和对抗,通过调整和优化对抗策略实现风控识别效果。

活动策略运营

业务活动要根据用户反馈及时地调整运营策略,解耦运营逻辑和服务代码后,可以提高运营策略的迭代效率。

数据分析和清洗

数据分析师可以根据不同的需求来自定义规则,快捷更改产出的需要的数据类型。

编译原理

词法分析

把源代码字符串转换为词法单元,比如:

(a > 2) && (b < 5)

变为 "a",">","2","&&","b","<","5"

语法分析

词法分析之后,识别表达式的语法结构。

抽象语法树

表达式的语法结构使用树来表示,每个节点是一个语法单元。节点可以有下级节点。

构造抽象语法树可以通过巴克斯范式和递归下降算法来完成。

类型检查

类型检查可以通过类型综合和编译时检查、运行时检查。

类型综合是根据子表达式的类型构造父表达式的类型。

在构造语法树和执行时也可以进行类型检查。

设计规则引擎

目标

设计支持特定词法、运算符、数据类型和优先级,支持基于以上预定义语法的规则表达式的编译执行。

词法语法

合法的Token可以是由字母数字和下划线组成的参数,布尔值,字符串等等,设计一个状态机来分析词法。

语法树

对于一元运算符,设计为左子树为空,右子树为操作数。

对于二元运算符,左子树为左操作数,右子树为右操作数。

括号是左子树为空,右子树为内部表达式的抽象语法树。