这是我参加[第五届青训营]伴学笔记创作活动的第6天
规则引擎
什么是规则引擎
业务规则引擎是在运行时生产环境中执行一个或多个业务规则的软件系统。这些规则可能来自法律法规(“员工可以因任何原因或无理由被解雇,但不能出于非法原因”)、公司政策(“所有一次花费超过 100 美元的客户将获得 10% 的折扣”)或其他来源。业务规则系统使这些公司策略和其他操作决策能够独立于应用程序代码进行定义、测试、执行和维护。 —— Wikipedia
规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。这样,业务人员便可以通过规则引擎直接修改规则决策,而避开通过人员修改,增加工作效率。
规则引擎的组成
- 数据输入:接受使用预定义的语句编写规则作为策略集,接受业务的数据作为执行过程中的参数。
- 规则理解:能够按照预先定义的词法,语法,优先级,运算符等正确理解业务规则所表达的语义。
- 规则执行:根据执行时输入的参数对策略集中的规则进行正确的解释和执行,同时对规则执行中的数据类型进行检查,确保结果正确。
规则引擎的应用
- 封控对抗
- 活动策略运营
- 数据分析和清洗
- 等等
编译原理
词法分析
词法分析就是把源代码字符串转化为词法单元(Token)的过程
可以通过有限状态机来对Token进行识别。
有限状态机
这种状态机的状态数量是有限的,可以根据不同的输入字符,转化为不同的状态。
词法分析结束后就通过语法分析来识别表达式
语法分析
就是在词法分析的基础上,识别表达式的语法结构的过程 通过语法分析,我们可以将表达式构造成抽象语法树
抽象语法树
在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。 —— Wikipedia
巴科斯范式
对于上下文无关语法(无须考虑上下文就可以判断正确性的语句),可使用巴科斯范式来表达:
exp : add;
add : add '+' mul | mul; // 加法表达式,可匹配 a + b + c 或 a + b * c
mul : mul '*' pri | pri; // 乘法表达式,可匹配 a * b * c
pri : string | bool | number | identifer; // 基础表达式,可匹配 weight 或 20 或 "abcde"
以上每一行被称为产生式。可代指一种可以由另外已知类型的表达式或者符号推导产生的表达式。
本例中,pri(代指基础表达式)可由常量(string, bool, number)或标识符(identifer)组成;mul(代指乘法表达式)可由 pri 或 mul * pri 组成,以此类推。
递归下降算法
一种算法,可以用来构建抽象语法树
引用
[规则引擎设计与实现]第五届字节跳动青训营-后端专场