规则引擎设计与实现 | 青训营笔记

85 阅读3分钟

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

1.主要内容

  1. 认识规则引擎,了解规则引擎的应用场景、探究规则引擎的由来
  2. 编译原理的基本概念
  3. 规则引擎的设计与实现

2.本节详细内容

规则引擎简介

  • 规则引擎就是嵌入在应用程序中的组件,实现了把业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规划,根据业务规划进行业务决策。
  • 解决开发人员重复编码问题,业务决策和服务解耦,提高服务可维护性;缩短开发路径,提高效率。
  • 应用在风控对抗,活动策略运营以及数据分析和清洗。

编译原理基本概念

规则引擎编译原理包括三个大部分:理解、执行和输入输出
理解:词法分析、语法分析
执行:抽象语法树
输入输出:参数注入、类型检查

什么是编译

编译的过程就是 把某种语言的源程序,在不改变语义的条件下,转换成另一种语言程序(目标语言程序)

image.png

  • 如果源代码编译后要在操作系统上运行,那目标代码就是汇编/机器代码。
  • 如果编译后是在虚拟机里执行,那目标代码就可以不是汇编代码,而是一种解释器可以理解的中间形式的代码即可。

词法分析

将源代码字符串转换为词法单元(Token)的过程。,使用有限自动机识别,因为其状态数量有限,基于输入的字符,都有一个确定的状态转换。

image.png

语法分析

语法分析就是在词法分析的基础上识别出程序的语法结构。这个结构是一个树状结构。这棵树叫做抽象语法树(Abstract Syntax Tree,AST)。树的每个节点(子树)是一个语法单元,这个单元的构成规则就叫“语法”。每个节点还可以有下级节点。

抽象语法树

上下文无关语法 Context-Free Grammar

语言句子无需考虑上下文,就可以判断正确性。不使用自然语言而使用上下文无关文法是因为便于设计编译器、便于代码开发维护、汇编语言/机器语言上下文无关。

巴科斯范式

BNF是描述上下文无关理论的一种具体方法,通过BNF可以实现上下文无关语法的表达,是实现代码解析的必要条件。其本质就是树形分解,分解成一颗抽象语法树。

递归下降算法

自顶向下构造语法树
不断的对Token进行语法展开(下降),展开过程中可能会遇到递归的情况。

类型检查

类型综合

根据子表达式的类型构造出父表达式的类型

编译时检查&运行时检查

  • 类型检查可以发生在编译阶段或者执行时;
  • 编译时需要提前声明参数的类型,在构建语法树的过程中进行类型检查;
  • 执行时根据参数输入的值类型,在执行过程中进行类型检查。

3.实践

设计实现一个规则引擎(Yong Engine)

4.课后总结

  • 真的难
  • 需要再去看编译原理基础
  • 解释型语言和编译型语言可以去了解下区别

5.引用

字节实践课:规则引擎设计与实现
稀土掘金-后端学习资料