这是我参加「第五届青训营」笔记创作活动的第四天
一、所谓规则引擎
规则引擎:一种嵌入到应用程序的组件,能够根据数据输入,解析业务规则,并通过业务规则做出业务决策
规则引擎将业务决策抽离出来,不仅解决了开发人员重复编码的问题,而且提高了服务的可维护性
规则引擎由三部分组成:
1、数据输入 --词法分析、语法分析
2、规则理解 --转化为抽象语法树
3、规则执行 --参数注入、类型检查
可见,规则引擎设计中有类似于编译原理的部分
规则引擎的应用场景:
1、风险对抗
2、活动策略经营
3、数据分析和清洗
二、编译原理基本概念
1、词法分析
词法分析实际上是将源代码字符串转化为词法单元(token)的过程
而为了识别token,我们需要设计出对应的有限自动机
有限自动机是一个状态机,它在任何一个状态,基于输入的字符,都能转换到一个确定的状态
2、语法分析
在词法分析的基础上,语法分析需要识别出语法的结构并构建抽象语法树
抽象语法树:表达式的语法结构用树结构来表示,树的每一个节点都是一个语法单元
上下文无关语法:语句无需考虑上下文,就可以判断正确性
递归下降算法:自顶向下,不断对token进行语法展开,构建语法树
3、类型检查
类型综合:根据子表达式的类型构造父表达式的类型
编译时检查:发生在表达式编译阶段的检查,需要提前声明参数的类型,在构建语法树的过程中进行检查
运行时检查:程序执行时进行发生的检查,根据执行时参数输入值的类型在执行过程中检查