[ 后端与 Go | 青训营笔记 ]

79 阅读3分钟

[ 后端与 Go | 青训营笔记 ]

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

课内:Go 规划引擎设计与实现

规则引擎是一种嵌入在应用服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则,并做出决策。规则引擎能大大提高系统的灵活性和扩展性。

重点

  • 理解规则引擎的组成部分及应用场景;
  • 理解规则引擎的核心原理 - 编译原理的相关概念;
  • 设计并实现一个规则引擎;
  • 结合已学内容,实现一个 Web 板规则引擎。

细节

认识规则引擎

由来

image-20230131165442650

定义

  • 一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

image-20230131165740416

优点与应用场景

应用场景

  • 风控对抗;
  • 活动策略运营;
  • 数据分析和清洗。
组成和实现原理

组成

  • 数据输入:支持使用预定义的语义编写的规则作为策略集;
  • 规则理解:能够按照预定义的词法、语法、优先级、运算符等正确理解业务规则所表达的语义;
  • 规则执行:正确解释并检查执行策略集。

编译原理基本概念

image-20230131170557740

词法分析
  • 将源代码字符串转化为词法单元的过程。

如何识别词法单元

  • 有限自动机:状态机,状态是有限的。该状态机在任何一个状态,基于输入的字符,都能做一个确定的状态转换;

image-20230131170926039

语法分析
  • 在词法分析的基础上,识别表达式的语法结构的过程。

image-20230131171101223

抽象语法树
  • 表达式的语法结构可以用树来表示,其每一个节点是一个语法单元,这个单元的构成规则就叫语法。每个节点还可以有下级节点;

image-20230131171411234

image-20230131171522169

image-20230131171535155

类型检查

类型综合

  • 根据子表达式的类型构造出父表达式的类型;

编译时检查 & 运行时检查

  • 类型检查可以发生在表达式的编译阶段,即构造语法树的阶段,也可以发生在执行时的阶段;

image-20230131172053674

设计规则引擎

设计目标
  • 设计一个规则引擎,支持特定语法、运算符、数据类型和优先级。并且支持基于以上预定义语法和规则表达式的编译和执行。

image-20230131172314981

image-20230131172410742

image-20230131172446544

语法树

语法树执行

  • 预先定义好每种操作符的执行逻辑。对抽象语法进行后续遍历执行;

image-20230131172654069

总结

了解了规划引擎。