「训」 笔记(05):规则引擎

本文最后更新于:40 分钟前

本文介绍规则引擎。

项目代码:https://github.com/qimengxingyuan/young_engine.git

1 规则引擎

1.1 定义

规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。

通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。

old

解决开发人员重复编码问题,业务决策与服务本身解耦,提高服务的可维护性。

new

1.1.1 组成部分

  • 数据输入
  • 规则理解
  • 规则执行

2 编译原理基本概念

2.1 编译

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

编译

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

有的语言提前把代码一次性转换完毕,这种就是编译型语言,用的转换工具就叫编译器,比如 C、C++、Go。一次编译可重复执行。

有的语言则可以一边执行一边转化,用到哪里了就转哪里,这种就是解释性语言,用的转化工具叫虚拟机或者解释器,比如 java、python、javascript。

  • Java 既有编译又有解释。但是编译并没有直接编译成机器码,而是编译成字节码,然后再放到虚拟机中执行。
  • Python 执行过程也是经过两个阶段,先编译成字节码 .pyc 再放到虚拟机中去执行。

2.2 词法分析(Lexical Analysis)

把源代码字符串转换为词法单元(Token)。

Lexical Analysis

2.3 语法分析(Syntax Analysis)

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

  • 上下文无关语法(Context-Free Grammar)

    语言句子无需考虑上下文,就可以判断正确性。

    巴科斯范式(BNF)是描述上下文无关理论的一种具体方法,通过 BNF 可以实现上下文无关文法的具体化、公式化、科学化,是实现代码解析的必要条件。

  • 递归下降算法(Recursive Descent Parsing)

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

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

3 设计规则引擎

详见项目代码


「训」 笔记(05):规则引擎
https://qanlyma.github.io/ByteDance-5/
作者
Qanly
发布于
2023年3月15日