这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,主要是对于规则引擎的了解和学习。同时对于编译原理有了初步的认识。
规则引擎:一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。(实现业务决策和服务本身解耦)
一、组成部分
数据输入:
- 支持接收使用预定义的语义编写的规则作为策略集
- 接受业务的数据作为执行过程的参数
规则理解:
- 按照预先定义的词法、语法、优先级、运算符等正确理解业务规则所要表达的语义
规则执行:
- 根据执行输入的参数进行正确解释和执行,同时对执行过程中的数据类型进行检查
二、编译原理
理解(词法分析+语法分析)
词法分析:把源代码字符串转换为词法单元(Token)
识别token-----有限自动机(一种状态机)
语法分析:在词法分析的基础上识别出表达式的语法结构
执行(抽象语法树)
抽象语法树一定时唯一确定
上下文无关语法(语言句子不需要考虑上下文,就可以判断正确性------巴科斯范式BNF)
递归下降算法(自顶向下构造语法树,不断对Token进行语法展开)
输入输出(参数注入+类型检查)
类型检查:在抽象语法树中,通常会验证某节点的子节点的数据类型是否合法
类型综合(根据子表达式的类型构造出父表达式的类型)
编译时检查+运行时检查(发生在构造语法树和执行阶段)
参数注入:在规则执行过程中,使用输入的参数值来计算语法树中的标识节点值