规则引擎 | 青训营笔记

65 阅读2分钟

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

简介

本篇笔记主要记录规则引擎的相关概念和前置知识。

规则引擎

我们考虑这样的一个场景,我们现在要设计一个功能,根据用户购买的商品的金额,赠送不同的积分。我们当然可以写一堆 if-else 语句来完成这个功能。但是当产品需要更多细致的划分时,我们就需要重构代码来再次完成这个功能,程序本身的逻辑代码和业务代码互相嵌套,导致代码臃肿和难于维护。于是规则引擎便出现了。

规则引擎: 可降低复杂业务逻辑组件复杂性、降低应用程序的维护和可扩展性成本的组件,它常常用于把业务代码从代码中分离出来。

前置知识:编译原理

编译:利用编译程序从源语言编写的源程序产生目标程序的过程。它主要经过五个阶段:词法分析、语法分析、语义检查、中间代码生成和代码优化、目标代码生成。 词法分析:是计算机科学中将字符序列转换为单词(Token)序列的过程,例如对于 a + b > c,那么词法分析会将其划分为不同的单词,abc会被解释为标识符,+会被解释为加法操作符,> 会被解释为大于比较符。

语法分析:语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序“,“语句”,“表达式”等等。语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述,语法分析程序可以用YACC等工具自动生成。如判断a+b>c是正确的,a+b>>c是错误的。

抽象语法树:是源代码抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说语法是’抽象’的,是因为这里的语法不会表示出真实语法中出现的每个细节。使用抽象语法树可以对代码的结构以及表达式的执行顺序作出划分。

类型检查:类型检查指验证操作接收的是否为合适的类型数据以及赋值是否合乎类型要求。又分为静态分析(编译时检查)和动态分析(运行时检查)。