规则引擎的设计与实现二 | 青训营笔记

74 阅读2分钟

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

编译原理基本概念

程序员的三大浪漫之一,编译原理,介绍编译,词法分析,语法分析,抽象语法树等概念。

词法分析

把源代码字符串转换为词法单元token的这个过程,我们使用的是有限自动机,他的状态数量是有限的,该状态机在任何一个状态基于输入的字符,都能做一个确定的状态转化。

语法分析

在词法分析的基础上识别出表达式的语法结构,表达式的语法结构可以用树来表示,其每个节点是一个语法单元,这个单元的构成规则就叫语法,每个节点还可以有下级节点。

抽象语法树

表达式抽象语法结构的树状表示,对于一个表示式,抽象语法树一定是唯一确定的(没有二义性)。上下文无关语法,语言句子无需考虑上下文,就可以判断正确性,可以使用巴科斯范式来表达,递归下降算法就是自顶向下构造语法树,不断地对token进行语法展开,展开过程中会遇到递归的情况。

类型检查

验证执行的结果是否为合适的数据类型,在抽象语法树中,通常会验证某节点的子节点的数据类型是否合法。

参数注入

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

设计一个规则引擎

从零开始设计一个规则引擎young-engine明确其对语法,词法的支持,设计编译和执行的流程。

规则引擎的实现

实战演练部分,实现规则引擎young-engine的各个部分,并介绍其中的几个重点实现思路。