antlr表达式引擎
初次在项目中使用antlr,刚做了第一版,功能很简单(参不多正则都能做╮(╯▽╰)╭)
用antlr做表达式引擎,分析表达式变量和函数
举例:表达式为[a]+[b]>[c]*([d]+[e]) ,可以分析出[]中的变量
sum([a]+1000), 可以分析出变量,并得到函数名,进行运算,或是直接输出
这里有个antlr介绍的小文章:http://blackproof.iteye.com/blog/1807372
源码:https://github.com/dirkzhang/
留下一点对源码的笔记:
options {output=AST; ASTLabelType=CommonTree; language=Java;
}
antlr分析输出为AST树
tokens
{INDEX;MEMBERACCESS;CALL;VARIABLE;BRACKETEXP;
}
定义ast树上的节点,可以再rule中使用
methodExpr : IDENTIFIER LPAREN (argument (COMMA argument)*)? RPAREN -> ^(CALL IDENTIFIER argument*);
给出一个函数的rule,表示遇到前边的翻译为CAll为根的树,如下
fragment Exponent : ('e'|'E') INTEGER_LITERAL;
fragment中的lexer是不能成为树节点的,可以被其他使用,相当于.g的全局变量
DATETIME_LITERAL: '\'' STRING_LITERAL '\'';STRING_LITERAL : '"' (~('"'|'['|']'))* '"';IDENTIFIER: LETTER (LETTER|Digit)*;
这些是可以成为ast的node的lexer
贴一个antlr的工具antlrwork,很好用,可以网上搜搜
给个csdn的下载地址,要分的,还是搜搜下载吧:
http://download.csdn.net/detail/blackproof/5130394
antlr表达式引擎相关推荐
- 牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!!
最近在负责一个和定价有关的系统,要做分层的价格决策.在决策过程中有两个诉求: 1.需要根据一定的表达式公式,进行分层决策.如订单金额大于1000元时,给10块钱红包,介于100和1000之间的给5元红 ...
- Jexl表达式引擎-根据字符串动态执行JAVA
Table of Contents generated with DocToc 一.使用场景 二.市面上表达式引擎比较 2.1 Aviator 2.2 Jexl 一.使用场景 在做某些项目的时候,有时 ...
- 【java表达式引擎】一、汇总目前开源的公式计算开源库
java表达式引擎 前言 一.Fin-Expr 二.Expr4J 三.exp4j 四.Aviator VIATOR--轻量级JAVA表达式求值引擎 五. BeanShell 六.脚本语言 Ognl.M ...
- 最简单却又极具扩展性的Java表达式引擎,自创编程语言必备
这个表达式引擎只有短短的100多行,却能实现包括加减乘除.括号优先级在内的运算,可以在"处理表达式"函数中自行扩展想要处理的算法.这里面算法的难点主要在于如何实现在多级括号存在的情 ...
- 表达式引擎在转转平台的实践
一.业务背景介绍 笔者负责了转转APP后端研发工作,主要的模块有首页.列表.详情页.个人中心等.在负责的详情页模块中,有这样的一个场景,APP打开不同商品的时候,会根据商品所属的业务,跳转到对应业务所 ...
- 本周推荐 | 表达式引擎的组合子实现方案
推荐语:本文清晰而详细地介绍了如何使用 Parser 组合子方案,结合 Monad 通过合理的分层.抽象和组合,在性能达标的情况下实现消息场景中函数式的表达式解析.非常具有实践意义,推荐阅读学习! - ...
- java fel_Java表达式引擎fel/groovy/expression4j/java脚本引擎的性能对比【原创】
又是性能对比,最近跟性能较上劲了. 产品中需要用到数学表达式,表达式不复杂,但是对性能要求比较高.选用了一些常用的表达式引擎计算方案,包含:java脚本引擎(javax/script).groovy脚 ...
- 流行的表达式引擎简单分析对比
序 最近来了个能耗监测的需求,也就是对设备上报数据做一些业务的计算后阈值预警风控类的.对需求进行抽丝剥茧的拆解后,发现除去业务,最难的点也就是阈值比较了,到此有经验的码农很容易就想到了表 ...
- 表达式引擎aviator
转自:https://blog.csdn.net/keda8997110/article/details/50782848 简介 Aviator是一个高性能.轻量级的 java 语言实现的表达式求值引 ...
最新文章
- 网络字节序,主机字节序,地址转换函数
- Lync Server存档和监控服务器PART A:准备篇
- 多个php版本的composer使用
- oracle创建用户需要什么权限,Oracle 创建普通用户,并赋予权限
- UVA - 12096:The SetStack Computer
- 前端学习(2957):组件之间的参数传递父传子
- Unity3D-协同程序
- iOS Xcode热重载工具: InjectionIII 使用简介(无需重启,快速刷新界面,动态调试)
- hdu 1004(排序+统计)
- linux卸载jdk方法
- 阿坝县人民医院管理系统软件硬件配置参数
- 官方AWZ爱伪装 一键新机 全息备份 虚拟定位 非NZT 暗王者 IG V8 V3 IOSAPP一键新机 全息备份
- 江苏2021高考成绩查询全省排名,2021江苏省地区高考成绩排名查询,江苏省高考各高中成绩喜报榜单...
- 您的组织策略阻止我们为您完成此操作
- 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结
- 将本地视频上传到云端_如何将本地文件上传到新浪云服务器应用
- PS各个工具的字母快捷键和英文全名
- dlna 交互步骤-转发
- 佳能(Canon)打印机初始化备忘录
- uni-app 180查看好友朋友圈完善(一)