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

81 阅读2分钟

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

一、本堂课重点内容:

  • 规则引擎组成部分、应用场景、核心原理;
  • 实现YoungEngine引擎。

二、详细知识点介绍:

认识规则引擎
  • 定义:规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策,接受数据输入,解释业务规则,并根据业务规则做出业务决策。
  • 优势:解决开发人员重复编码问题;业务决策与服务本身解耦,提高服务的可维护性;缩短开发路径提高效率。
  • 组成部分:数据输入;规则理解;规则执行。
  • 应用场景:风控对抗;活动策略运营;数据分析和清洗。
编译原理
  • 词法分析:把源代码字符串转换为词法单元(Token)的过程——有限自动机。
  • 语法分析:在词法分析的基础上,识别表达式的语法结构的过程。——抽象语法树。
  • 类型检查:根据子表达式的类型构造出父表达式的类型;类型检查可以发生在表达式的编译阶段,即在构造语法树的阶段,需要提前声明参数的类型,在构造语法树过程中进行类型检查;也可以发生在执行时的阶段,根据执行时的参数输入的值类型,在执行过程中进行类型检查。

三、实践练习例子:

设计规则引擎YoungEngine

  • 词法

引擎支持指定的运算符和数据类型

运算符

  • 一元计算符 : ! - +
  • 二元计算符 : + - / * %
  • 二元比较符 : > >= < <= == !=
  • 逻辑操作符 : || &&
  • 括号 : ( )

数据类型

  • 字符串 "abc" 'def'
  • 十进制int 123
  • 十进制float 123.4
  • bool true
  • 变量 id

表达式词法

  • 表达式以换行结束、不支持多行表达式。形如a + 7 > 100

  • 支持字面量 (上述数据类型的常量)、变量和运算符(上述运算符)

  • 变量:由字母数字下划线构成且必须以字母开头,形如:_idfoo

  • 关键字:系统内置部分关键字

    • true: bool类型常量
    • false: bool类型常量

语法

支持简单的表达式语法

  • 一元运算: !true
  • 二元运算: a + b > c
  • 逻辑运算: a || b == 100
  • 括号: (a + b) * c

运算符的优先级

优先级运算符
0or
1&&
2! - +
3> >= < <= == !=
4+ -
5* /

四、课后个人总结:

  • 本节课学习了简单规则引擎的设计与实现,对其编译原理理解不太好。

五、引用参考: