规则引擎 | 青训营笔记

85 阅读2分钟

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

一、什么是规则引擎?

规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。

按照我的理解:我们先行定义一些规则,让机器理解,那我们下次再输入相关需求,电脑自己运用定义好的规则解析,完成我们的需求。

组成部分

数据输入-->规则理解-->规则执行

二、规则引擎编译原理

在设计规则引擎时,它的基本思想是编译原理,主要分为四个部分:

1.词法分析:把源代码字符串转换为词法单元 (Token)的这个过程

2.语法分析:在词法分析的基础上识别出表达式的 语法结构

3.抽象语法树

4.类型检查

利用有限自动机识别Token(类似于分词)

有限自动机就是一个状态机,它的状态数量是有限的。该状态机在任何一个状态,基于输入的字符,都能做一个确定的状态转换。

image.png

词法分析

image.png

语法分析

image.png

抽象语法树

表达式的语法结构可以用树来表示,其每个节点(子树)是一个语法单元,这个单元的构成规则就叫”语法”。每个节点还可以有下级节点。

其本质是二叉树,拥有节点、左子树、右子树。

image.png

1.上下文无关语法

语言句子无需考虑上下文,就可以判断正确性。可以使用巴科斯范式(BNF)来表达

image.png 2.递归下降算法

递归下降算法就是自顶向下构造语法树

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

image.png

三、设计规则引擎

1.设计目标

想好以下:

image.png

2.词法分析

image.png

3.语法分析

image.png

4.语法树执行与类型检查

语法树执行:后续遍历

类型检查: 在一个节点的左右子节点执行完成后,分别校验左右子节点的类型是否符合对应操作符的类型检查预设规则。