这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
本节课程的主要内容
本节课程主要讲解了规则引擎的基本概念、组成以及应用场景,以及编译原理的相关知识,最后讲解了要如何设计一个规则引擎。
本节详细内容
规则引擎的基本概念
什么是规则引擎:规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。其可以将业务决策与服务进行解耦。缩短开发路径,提高效率。
规则引擎组成:数据输入、规则理解、规则执行
其中数据输入包括两部分:预定义的语法编写的规则和业务的数据 规则理解:按照预定义的语法理解 规则执行:需要类型检查等额外的工作
应用场景:风险对抗、活动策略运营、数据分析和清洗
编译原理基础知识
也就是规则引擎是如何实现的。分别学习了词法分析、语法分析、抽象语法树、参数注入、类型检查。
-
词法分析:通过状态机,将源代码字符转换成一个个token,来让下一阶段使用。比如说对“李想通过了青训营”这句话,经过词法分析后拆分成了“李想”、“通过了”、“青训营”这三部分。
-
语法分析:在词法分析的基础上,识别整个表达式的语法结构。比如上式中,“李想”是主语,“通过了”是谓语,“青训营”是宾语。
-
抽象语法树:表达式抽象语法结构的树状表示,对于一个表达式,抽象语法树一定是唯一确定的。抽象语法树中每个节点是一个语法单元,每个节点还可以有下级节点。
-
参数注入:在规则执行过程中,使用输入的参数值来计算语法树中的标识符节点值的过程
-
类型检查:验证执行的结果是否为合适的数据类型。在抽象语法树中,通常会验证某节点的子节点的数据类型是否合法。类型综合指根据子表达式的类型构造出父表达式的类型。类型检查可以在编译时检查,也可以在执行时检查。编译时检查需要提前声明参数类型,在构建语法树时进行类型检查。而执行时检查则是根据参数输入的类型,在执行过程中进行类型检查。
有限自动机(Finite state machine)是一个状态机,该状态机在任何一个状态,基于输入的字符,都能做一个确定的状态转换。
还学习了上下文无关语法(在本节课中只是学习了语言句子无需考虑上下文,就可以判断正确性这个定义)和梯度下降算法(自顶向下构造语法树,从根节点开始,可能会用到递归)。还需要补充其他的知识(我编译原理还是没学好啊)
如何设计一个规则引擎
首先学习了设计目标,设计规则引擎时要让规则引擎支持特定的词法、运算符、数据类型和优先级。并且支持基于以上预定义语法的规则表达式的编译和执行。
之后学习了本节课中的规则引擎支持的词法、运算符、数据类型以及优先级。需要设计词法分析的状态机,预先定义好每种操作符的执行逻辑,自己设计好各个逻辑。
总结
经过本节课的学习,了解了什么是规则引擎,以及规则引擎的应用场景,并且学习了设计规则引擎的步骤,并通过一个demo加深了理解。