这是我参与「第五届青训营」伴学笔记创作活动的第6天
1.课前准备
- 数据结构基础:二叉树的各种遍历方式
- 编译原理基础:编译过程和步骤;词法分析;抽象语法树;类型检查
- 搭建环境:下载ref2. young_engine项目,安装 docker 环境和 docker-compose 插件
git clone https://github.com/qimengxingyuan/young_engine.git
chmod a+x ./setup.sh
./setup.sh
setup 脚本执行成功说明环境安装完备。
2.重点内容
- 规则引擎的设计:明确设计目标,完成目标拆解, 完成各部分状态机的详细设计
- 规则引擎的实现:基于项目工程完成词法分析,语法分析,抽象语法树的执行功能
- 规则引擎的核心原理:词法分析,语法分析,类型检查,语法树执行
3.详细介绍
规则引擎是一种应用程序中的组件,实现业务决策和程序的分离。规则引擎上通过使用预定义的语义模块编写业务决策并解释业务规则,做出决策。
优点:解决开发人员重复编码的问题;业务决策与服务本身解耦,提高服务的可维护性;缩短开发路径,提高效率
应用场景:风控对抗;活动策略运营;数据分析和清洗;配置下发
编译原理基本概念
规则引擎编译原理:
- 理解:词法分析;语法分析
- 执行:遍历抽象语法树
- 输入输出:参数注入、类型检查
- 词法分析:把字符串转换为 Token;方法:有限状态自动机
- 语法分析:把Token 识别为抽象语法树;方法:上下文无关语法、巴斯克范式、递归下降算法
- 类型检查:类型综合;编译时检查 & 运行时检查
规则引擎
设计过程
- 定义词法,运算符,数据类型,和优先级。设计词法分析的状态机。
- 语法分析,分析出巴斯克范式。设计语法树结构。
- 语法树执行:对抽象语法树后序遍历。
4.总结
开发规则引擎必须首先理解设计与实现原理。之后进行规则引擎设计需要先确立设计目标,再依次完成各个步骤的设计。设计中需要开发者对相关理论有坚实的理解。最后进行详细设计,实现规则引擎,这要求开发者不仅了解设计思路,而且也要对大量实现细节有周全的解决,需要一定的编程能力。
5.Ref
- 编译原理 The Dragon book, Compilers: Principles, Techniques, and Tools.
- qimengxingyuan/young_engine: 简单的规则引擎 (github.com)