这是我参与「第五届青训营 」伴学笔记创作活动的第 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 端口号