QLExpress使用及源码分析

简介: 本示例演示QLExpress规则引擎的完整使用流程:从实体构建、接口定义到脚本编写,表达式内容由yaml文件(如user.yaml)维护。运行时通过QLExpressRunner解析语法树,支持上下文定制与二次扩展。自动扫描规则脚本,构建AST并执行,支持别名映射与汉化,实现灵活的规则计算与管理。(238字)

1.示例Demo
1.实体构建
2.接口定义
3.脚本编写
表达式内容维护在一个yaml里,默认扫描路径为:classpath:/rules/**/.yaml
这里为:user.yaml
2.运行环节
QLExpressRunner如下图所示,从语法树分析、上下文、执行过程三个方面提供二次定制的功能扩展。
1.获取原始脚本,参数
QLRule中的value可以使用缺省值,对应yaml的key则为缺省值对应的ruleCode
存在默认读取文件路径:com.c2f.boot.starter.rule.engine.QLExpressProperties
String rule为获取的原始脚本,后续基于此构建AST语法树
2.构建后续赋值上下文
没取别名,默认构建一组:形参:value
取别名,另构建一组:别名:value(后续yaml能汉化使用也是基于此)
所以默认构建的上下文数量 = 形参个数 1,有别名 = 形参个数 2
3.调用执行
延迟执行
默认第一次执行即缓存
构建AST语法树
基于:com.ql.util.express.parse.KeyWordDefine4Java 构建
选择匹配工厂
递归解析
分解为Word[]:"sum",”=“,”0“,”;“,"for","(","i",......
Word[]转化为List《ExpressNode》:每一个word变得有意义:常量、变量、符号、分割符号
解析第一行:请领状态 = 药品请领单.执行状态
解析第二行:执行计划状态 = 执行计划.当前执行状态,clearDataStack后续也会当做一个指令使用
解析第三行,不再是loadAttr而是LoadData
或需是引包则loadData,变量定义是LoadAttr,未研究
真正执行
基于不同指令进入不同的重写方法
清除栈内数据
执行完毕返回

目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 算法
Together可视化规则引擎
DMN标准定义了可视化规则引擎的技术规范,实现业务逻辑的图形化建模与高效执行。它打破技术壁垒,支持复杂算法与AI融合,提升企业敏捷性,降低运维成本,推动规则引擎向通用算法引擎演进。
|
3月前
|
人工智能 JSON Java
AI时代,我们为何重写规则引擎?—— QLExpress4 重构之路
AI时代下,规则引擎的需求反而更旺盛。QLExpress4 通过全面重构,在性能、可观测性和AI友好性上大幅提升。
1227 15
AI时代,我们为何重写规则引擎?—— QLExpress4 重构之路
|
3月前
|
人工智能 前端开发 流计算
前端的同学,终于要起飞啦,Github 6.3k star + ,免费可商用的UI元素库!!!
小华同学推荐:galaxy 是一个免费可商用的开源 UI 元素库,收录超 3,000 个组件,支持 CSS 与 Tailwind 双格式,兼容 Figma/React/HTML,助力高效开发与设计协作。
613 7
|
JSON Java 数据格式
RestTemplate请求UnknownContentTypeException:no suitable HttpMessageConverter异常
RestTemplate请求UnknownContentTypeException:no suitable HttpMessageConverter异常
668 0
|
存储 数据库 时序数据库
influxdb得导出与导入
influxdb得导出与导入
1028 1
|
SQL 关系型数据库 MySQL
Mysql中from多表跟join表的区别
Mysql中from多表跟join表的区别
1100 0
|
Java
hdfs 故障服务namenode 报错GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=
hdfs生产故障 GC pool 'ConcurrentMarkSweep' had collection(s): count=1 time=
2177 0
Seata undo_log无数据处理
Seata undo_log无数据处理
|
Java Python
百度搜索:蓝易云【Java执行Python代码的两种方法(Jython与ProcessBuilder)】
通过使用Jython或ProcessBuilder,您可以在Java中执行Python代码并与两种编程语言进行交互。选择哪种方法取决于您的需求和偏好。请根据实际情况选择适合您的项目的方法。
454 0
|
存储 SQL JSON
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)

热门文章

最新文章