这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
规则引擎是什么
所谓规则引擎,其实就是一个嵌入到应用程序中的组件,接受数据输入,使用预定义的语义模板来编写业务。有了规则引擎,业务人员就可以直接的修改规则决策了,解决了开发重复编码问题,提高了可维护性。
组成:
- 数据输入:支持接受使用预定义的语义编写的规则作为策略集
- 规则理解:理解业务规则所表达的语义
- 规则执行:根据执行时输入的参数来解释和执行并检查策略集
应用场景:
风控对抗、活动策略运营、数据分析和清洗
编译原理基本概念
规则引擎编译原理——>理解
词法分析: 将源代码字符串转为Token(词法单元)的过程。
语法分析: 在词法分析的基础上,识别表达式的语法结构(如:左操作数,右操作数,操作符)。
规则引擎编译原理——>执行
抽象语法树:
我们在数据结构中学习过树,其实表达式的语法结构也可以用树来表示,这个树的每一个结点(子树)代表语法单元,这个单元的构成规则叫语法。通俗点说这个树就是将源代码字符串按照其结构来转化成树。比如prize>500&&(isNewUser||userLevel>5)的抽象语法树为:
递归下降算法:
自顶向下构造语法树。在不断对Token进行展开时,可能会遇到递归的情况。
规则引擎编译原理——>输入输出
类型检查: 类型检查可以发生在表达式编译阶段(构造语法树的阶段),也可以发生在执行阶段
如何设计一个规则引擎
- 确定词法(Token):包括参数、数据类型和运算符,确定好优先级。
- 语法分析:分析出优先级的表达、分析语法树结构。
语法树结构分析方法:
一元运算符:左子树为空,右子树为右操作数。
二元运算符:左子树为左操作数,右子树为右操作数。
括号:左子树为空,右子树为内部表达式的AST。
- 语法树执行:后续遍历来执行。
先执行左子树,再执行右子树,最后根据结点的操作符执行得到根节点的值。
- 类型检查:校验左右结点的类型
'>'符号要求左右结点的值都存在并且为int或float;
'!'符号要求左节点为空且右结点为bool
总结
了解了规则引擎的设计与实现,重点内容是抽象语法树的结构,学过数据结构中的树,相信对于这部分内容会很容易理解的。本人第一次接触规则引擎,如文中有错误,还请大家帮忙指出!感谢阅读!