规则引擎 | 青训营笔记

111 阅读3分钟

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

规则引擎基础

是嵌入在应用程序中的组件,实现将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,根据业务规则做出业务决策。

解耦业务决策和代码开发

组成

  • 数据输入
  • 规则理解
  • 规则执行

应用场景

  • 流程分支非常复杂,规则变量庞大,常规编码(if-else)难以实现
  • 有不确定性的需求,变更频率较高
  • 需要快速做出响应和决策
  • 规则变更期望脱离于开发人员,脱离coding

编译原理概念

词法分析、语法分析

词法分析:将源代码转为词法单元:有限自动机,将词唯一转换为词法单元Token

词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。

语法分析:将词法单元转化为抽象语法树

语法分析任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.

抽象语法树:

抽象语法树(abstract syntax tree,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。 抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。因些,很多编译器经常要独立地构造语法分析树,为前端,后端建立一个清晰的接口。 抽象语法树在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器。

  • 上下文无关语法(context-free grammer) 语句无需考虑上下文:可使用巴克斯范式(BNF)
  • 递归下降算法 自顶向下构造语法树,不断对Token进行语法展开

执行

遍历抽象语法树,执行

输入输出:类型检查

  • 类型综合 根据子表达式的类型构造父表达式的类型
  • 编译时检查 & 运行时检查