这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
1.主要内容
- 认识规则引擎,了解规则引擎的应用场景、探究规则引擎的由来
- 编译原理的基本概念
- 规则引擎的设计与实现
2.本节详细内容
规则引擎简介
- 规则引擎就是嵌入在应用程序中的组件,实现了把业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规划,根据业务规划进行业务决策。
- 解决开发人员重复编码问题,业务决策和服务解耦,提高服务可维护性;缩短开发路径,提高效率。
- 应用在风控对抗,活动策略运营以及数据分析和清洗。
编译原理基本概念
规则引擎编译原理包括三个大部分:理解、执行和输入输出
理解:词法分析、语法分析
执行:抽象语法树
输入输出:参数注入、类型检查
什么是编译
编译的过程就是 把某种语言的源程序,在不改变语义的条件下,转换成另一种语言程序(目标语言程序)
- 如果源代码编译后要在操作系统上运行,那目标代码就是汇编/机器代码。
- 如果编译后是在虚拟机里执行,那目标代码就可以不是汇编代码,而是一种解释器可以理解的中间形式的代码即可。
词法分析
将源代码字符串转换为词法单元(Token)的过程。,使用有限自动机识别,因为其状态数量有限,基于输入的字符,都有一个确定的状态转换。
语法分析
语法分析就是在词法分析的基础上识别出程序的语法结构。这个结构是一个树状结构。这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。树的每个节点(子树)是一个语法单元,这个单元的构成规则就叫“语法”。每个节点还可以有下级节点。
抽象语法树
上下文无关语法 Context-Free Grammar
语言句子无需考虑上下文,就可以判断正确性。不使用自然语言而使用上下文无关文法是因为便于设计编译器、便于代码开发维护、汇编语言/机器语言上下文无关。
巴科斯范式
BNF是描述上下文无关理论的一种具体方法,通过BNF可以实现上下文无关语法的表达,是实现代码解析的必要条件。其本质就是树形分解,分解成一颗抽象语法树。
递归下降算法
自顶向下构造语法树
不断的对Token进行语法展开(下降),展开过程中可能会遇到递归的情况。
类型检查
类型综合
根据子表达式的类型构造出父表达式的类型
编译时检查&运行时检查
- 类型检查可以发生在编译阶段或者执行时;
- 编译时需要提前声明参数的类型,在构建语法树的过程中进行类型检查;
- 执行时根据参数输入的值类型,在执行过程中进行类型检查。
3.实践
设计实现一个规则引擎(Yong Engine)
4.课后总结
- 真的难
- 需要再去看编译原理基础
- 解释型语言和编译型语言可以去了解下区别
5.引用
字节实践课:规则引擎设计与实现
稀土掘金-后端学习资料