规则引擎 | 青训营笔记

86 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,主要是对于规则引擎的了解和学习。同时对于编译原理有了初步的认识。

规则引擎:一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。(实现业务决策和服务本身解耦)

一、组成部分

数据输入:

  • 支持接收使用预定义的语义编写的规则作为策略集
  • 接受业务的数据作为执行过程的参数

规则理解:

  • 按照预先定义的词法、语法、优先级、运算符等正确理解业务规则所要表达的语义

规则执行:

  • 根据执行输入的参数进行正确解释和执行,同时对执行过程中的数据类型进行检查

二、编译原理

理解(词法分析+语法分析)

词法分析:把源代码字符串转换为词法单元(Token)

识别token-----有限自动机(一种状态机)

语法分析:在词法分析的基础上识别出表达式的语法结构

执行(抽象语法树)

抽象语法树一定时唯一确定

上下文无关语法(语言句子不需要考虑上下文,就可以判断正确性------巴科斯范式BNF)

递归下降算法(自顶向下构造语法树,不断对Token进行语法展开)

输入输出(参数注入+类型检查)

类型检查:在抽象语法树中,通常会验证某节点的子节点的数据类型是否合法

类型综合(根据子表达式的类型构造出父表达式的类型)

编译时检查+运行时检查(发生在构造语法树和执行阶段)

参数注入:在规则执行过程中,使用输入的参数值来计算语法树中的标识节点值