这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一 认识
规则引擎-定义
即解耦,效率和稳定性提高
好处:
组成
应用场景
二 编译原理基本概念(规则引擎)
词法分析
句子切分,产生token
语法分析
抽象语法树
内置关键字/内置符号(内置符号、终结符)
add 和 mul 是递归运算的,BNF是一层一层往上定义的(所以优先级pri最高)
当前优先级做不了,下降到低优先级语法
完成一个token分析后,向上回溯
贪婪思想
类型检查
三 设计一个规则引擎
有限状态机--实现词法分析
语法分析
逻辑非的优先级比逻辑或大,拆分出expr
括号放在基数表达式'('expr')'
优先级:低logOr->logAnd->logNot->cmp->add->mul->pri高
语法树结构
语法树执行
后序遍历
类型检查
编译时检查需要处理的参数多
四 实现规则引擎
BNF
在 NewNodeWithPrefixFix中(builder.go中planValue函数里,简化程序特殊处理中),根据语法定义构造出来的语法树(同一优先级扫描,贪婪思想)是不符合认知的,需要调整成右图。
拓展----govaluate