这是我参与「第五届青训营」笔记创作活动的第6天。 上课之前,我在运行这节课的示例项目时提示没有dokcer,然后根据学生手册安装了docker,并在网上搜集资料了解了docker的大致工作原理。之后就是这节课的内容,首先介绍了什么是规则引擎,为什么要用到规则引擎以及规则引擎带来的便利,这是我第一次接触到规则引擎,在课前搜集了资料,理解的是一种规范,通过定义一些语法词法将输入的条件输出成我们需要的规则,之前规则的实现需要我们技术员手工敲代码,有了规则引擎,就可以通过规则引擎去拿到我们想要的规则而不需要我们手动去敲或者反复修改,简化了后端技术员的工作,在学习了这门课之后,感觉这种理解出入不大(但可能我的描述有问题)。然后是编译原理的一些基本概念,包括词法分析、语法分析、抽象语法树以及类型检查,这些都是构成规则引擎必须的组件。在词法分析中涉及到有限自动机的概念,就是有限状态机并且通过代码设计让其自动转换这些状态。在语法分析中涉及到上下文无关语法以及巴科斯范式BNF。在抽象语法树中涉及到了递归下降算法,就是通过递归自上而下地搜索token和BNF以及建立抽象语法树,并且老师通过一个例子辅助理解。在类型检查中涉及到了类型综合、编译时检查和执行时检查。接着是设计一个规则引擎。在设计时首先根据所用到的token类型设计有限自动机对应的是词法分析,然后设计BNF进行对应的是语法分析,然后是语法树的执行,对每种操作符定义执行逻辑并后续遍历抽象树,然后是类型检查,对每种操作符预设规则,在语法树执行时检查左右节点是否符合该操作符的规则。最后一部分是实操,老师通过讲解代码从无到有地介绍了规则引擎的设计,这一部分我认为是最难的一部分,代码量还是比较多的。