这是我参与[第五届青训营]伴学笔记创作活动的第6天
规则引擎是什么
规则引擎是一种应用程序组件,用于将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策,接受数据输入,解释业务规则,并根据业务规则作出业务决策(比较类似编译器根据源码生成目标代码)。
规则引擎的组成
数据输入->规则理解->规则执行
规则引擎的基础
编译原理的基本概念
词法分析 语法分析 抽象语法树的生成 参数注入 类型检查
| 规则引擎功能 | 编译原理概念 |
|---|---|
| 规则理解 | 词法分析 语法分析 |
| 规则执行 | 抽象语法树生成 |
| 输入输出 | 参数注入 类型检查 |
词法分析
简单来说词法分析就是把源代码字符串转换为词法单元(Token)的过程
例如:price > 500 && (isNewUser || userLevel > 5)
关于如何识别Token,可以搭建有限自动机完成。有限自动机的状态数量是有限的,并且在任何一个状态基于输入的字符,都能做一个确定的状态转换。
语法分析
语法分析是指在词法分析的基础上识别表达式的语法结构的过程。 表达式的语法结构可以用树来表示,即抽象语法树。其每个节点(子树)是一个语法单元,单元的构成规则即为语法。
构建语法树可选择递归下降算法(自顶向下构建语法树),即不断对Token进行语法展开。
设计一个规则引擎需要考虑的要素
词法(合法Token)
支持的数据类型
支持的运算符
运算符优先级
以及基于以上要素的预定义语法的规则表达式