这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。
一、本堂课重点内容:
- 规则引擎组成部分、应用场景、核心原理;
- 实现YoungEngine引擎。
二、详细知识点介绍:
认识规则引擎
- 定义:规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策,接受数据输入,解释业务规则,并根据业务规则做出业务决策。
- 优势:解决开发人员重复编码问题;业务决策与服务本身解耦,提高服务的可维护性;缩短开发路径提高效率。
- 组成部分:数据输入;规则理解;规则执行。
- 应用场景:风控对抗;活动策略运营;数据分析和清洗。
编译原理
- 词法分析:把源代码字符串转换为词法单元(Token)的过程——有限自动机。
- 语法分析:在词法分析的基础上,识别表达式的语法结构的过程。——抽象语法树。
- 类型检查:根据子表达式的类型构造出父表达式的类型;类型检查可以发生在表达式的编译阶段,即在构造语法树的阶段,需要提前声明参数的类型,在构造语法树过程中进行类型检查;也可以发生在执行时的阶段,根据执行时的参数输入的值类型,在执行过程中进行类型检查。
三、实践练习例子:
设计规则引擎YoungEngine
-
词法
引擎支持指定的运算符和数据类型
运算符
- 一元计算符 :
!-+ - 二元计算符 :
+-/*% - 二元比较符 :
>>=<<===!= - 逻辑操作符 :
||&& - 括号 :
()
数据类型
- 字符串
"abc"'def' - 十进制int
123 - 十进制float
123.4 - bool
true - 变量
id
表达式词法
-
表达式以换行结束、不支持多行表达式。形如
a + 7 > 100 -
支持字面量 (上述数据类型的常量)、变量和运算符(上述运算符)
-
变量:由字母数字下划线构成且必须以字母开头,形如:
_id、foo -
关键字:系统内置部分关键字
true: bool类型常量false: bool类型常量
语法
支持简单的表达式语法
- 一元运算:
!true - 二元运算:
a + b > c - 逻辑运算:
a || b == 100 - 括号:
(a + b) * c
运算符的优先级
| 优先级 | 运算符 |
|---|---|
| 0 | or |
| 1 | && |
| 2 | ! - + |
| 3 | > >= < <= == != |
| 4 | + - |
| 5 | * / |
四、课后个人总结:
- 本节课学习了简单规则引擎的设计与实现,对其编译原理理解不太好。
五、引用参考: