规则引擎 | 青训营笔记

66 阅读2分钟

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

简介

一种嵌入在服务中的组件,可以将灵活多变的业务决策从服务代码中分离出来

优点

解决重复编码问题,业务决策与业务本身解耦,缩短开发路径

组成部分

  • 数据输入
  • 规则理解
  • 规则执行

编译原理

词法分析

把源代码字符串转换为词法单元(token)的过程

  • 有限自动机:识别token

语法分析

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

抽象语法树(Abstract Syntax Tree,AST)

表达式的语法结构可以用树表示,每个节点是一个语法单元

  • 上下文无关语法,无需考虑上下文,就可以判断正确性
  • 递归下降:自顶向下构造语法树

上下文无关语法G:终结符集合T + 非终结符集合N + 产生式集合P + 起始符号S

为何不使用自然语言

  • 便于设计编译器,目前无法设计出上下文相关文法
  • 便于代码开发维护,防止出现歧义
  • 汇编语言和机器语言都是上下文无关的 脚本语言的弱类型,设计成了上下文相关的

巴科斯范式

  • BNF是描述上下文无关理论的一种具体方法,通过BNF可以实现上下文无关文法的具体化、公式化、科学化,是实现代码解析的必要条件。
  • 本质上时树形分解,分解成一颗抽象语法树

类型检查

  • 类型综合:根据子表达式的类型构造父表达式的类型
  • 编译时检查或者运行时检查

设计规则引擎

实现规则引擎

  • 注意每个token的结构设置,要有优先级设置

Linux命令

lsof

列出当前系统打开文件的工具

lsof -i:port

netstat

用于显示tcp,udp的端口和进程等相关情况

netstat -tunlp | grep 端口号