规则引擎设计实践课 | 青训营笔记

63 阅读2分钟

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

规则引擎是什么

规则引擎是一种应用程序组件,用于将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策,接受数据输入,解释业务规则,并根据业务规则作出业务决策(比较类似编译器根据源码生成目标代码)。

规则引擎的组成

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

规则引擎的基础

编译原理的基本概念

词法分析 语法分析 抽象语法树的生成 参数注入 类型检查

规则引擎功能编译原理概念
规则理解词法分析 语法分析
规则执行抽象语法树生成
输入输出参数注入 类型检查

词法分析

简单来说词法分析就是把源代码字符串转换为词法单元(Token)的过程
例如:price > 500 && (isNewUser || userLevel > 5)

屏幕截图 2023-02-01 135358.png 关于如何识别Token,可以搭建有限自动机完成。有限自动机的状态数量是有限的,并且在任何一个状态基于输入的字符,都能做一个确定的状态转换。

屏幕截图 2023-02-01 140129.png

语法分析

语法分析是指在词法分析的基础上识别表达式的语法结构的过程。 表达式的语法结构可以用树来表示,即抽象语法树。其每个节点(子树)是一个语法单元,单元的构成规则即为语法。

v2-4d456738a16d16fc3f884ae317dc6117_r.jpg 构建语法树可选择递归下降算法(自顶向下构建语法树),即不断对Token进行语法展开。

设计一个规则引擎需要考虑的要素

词法(合法Token)
支持的数据类型
支持的运算符
运算符优先级
以及基于以上要素的预定义语法的规则表达式