初次在项目中使用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表达式引擎相关推荐

  1. 牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!!

    最近在负责一个和定价有关的系统,要做分层的价格决策.在决策过程中有两个诉求: 1.需要根据一定的表达式公式,进行分层决策.如订单金额大于1000元时,给10块钱红包,介于100和1000之间的给5元红 ...

  2. Jexl表达式引擎-根据字符串动态执行JAVA

    Table of Contents generated with DocToc 一.使用场景 二.市面上表达式引擎比较 2.1 Aviator 2.2 Jexl 一.使用场景 在做某些项目的时候,有时 ...

  3. 【java表达式引擎】一、汇总目前开源的公式计算开源库

    java表达式引擎 前言 一.Fin-Expr 二.Expr4J 三.exp4j 四.Aviator VIATOR--轻量级JAVA表达式求值引擎 五. BeanShell 六.脚本语言 Ognl.M ...

  4. 最简单却又极具扩展性的Java表达式引擎,自创编程语言必备

    这个表达式引擎只有短短的100多行,却能实现包括加减乘除.括号优先级在内的运算,可以在"处理表达式"函数中自行扩展想要处理的算法.这里面算法的难点主要在于如何实现在多级括号存在的情 ...

  5. 表达式引擎在转转平台的实践

    一.业务背景介绍 笔者负责了转转APP后端研发工作,主要的模块有首页.列表.详情页.个人中心等.在负责的详情页模块中,有这样的一个场景,APP打开不同商品的时候,会根据商品所属的业务,跳转到对应业务所 ...

  6. 本周推荐 | 表达式引擎的组合子实现方案

    推荐语:本文清晰而详细地介绍了如何使用 Parser 组合子方案,结合 Monad 通过合理的分层.抽象和组合,在性能达标的情况下实现消息场景中函数式的表达式解析.非常具有实践意义,推荐阅读学习! - ...

  7. java fel_Java表达式引擎fel/groovy/expression4j/java脚本引擎的性能对比【原创】

    又是性能对比,最近跟性能较上劲了. 产品中需要用到数学表达式,表达式不复杂,但是对性能要求比较高.选用了一些常用的表达式引擎计算方案,包含:java脚本引擎(javax/script).groovy脚 ...

  8. 流行的表达式引擎简单分析对比

    序        最近来了个能耗监测的需求,也就是对设备上报数据做一些业务的计算后阈值预警风控类的.对需求进行抽丝剥茧的拆解后,发现除去业务,最难的点也就是阈值比较了,到此有经验的码农很容易就想到了表 ...

  9. 表达式引擎aviator

    转自:https://blog.csdn.net/keda8997110/article/details/50782848 简介 Aviator是一个高性能.轻量级的 java 语言实现的表达式求值引 ...

最新文章

  1. 网络字节序,主机字节序,地址转换函数
  2. Lync Server存档和监控服务器PART A:准备篇
  3. 多个php版本的composer使用
  4. oracle创建用户需要什么权限,Oracle 创建普通用户,并赋予权限
  5. UVA - 12096:The SetStack Computer
  6. 前端学习(2957):组件之间的参数传递父传子
  7. Unity3D-协同程序
  8. iOS Xcode热重载工具: InjectionIII 使用简介(无需重启,快速刷新界面,动态调试)
  9. hdu 1004(排序+统计)
  10. linux卸载jdk方法
  11. 阿坝县人民医院管理系统软件硬件配置参数
  12. 官方AWZ爱伪装 一键新机 全息备份 虚拟定位 非NZT 暗王者 IG V8 V3 IOSAPP一键新机 全息备份
  13. 江苏2021高考成绩查询全省排名,2021江苏省地区高考成绩排名查询,江苏省高考各高中成绩喜报榜单...
  14. 您的组织策略阻止我们为您完成此操作
  15. 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结
  16. 将本地视频上传到云端_如何将本地文件上传到新浪云服务器应用
  17. PS各个工具的字母快捷键和英文全名
  18. dlna 交互步骤-转发
  19. 佳能(Canon)打印机初始化备忘录
  20. uni-app 180查看好友朋友圈完善(一)

热门文章

  1. 【jeecg-boot项目开发crm】:day07JeecgBoot-零基础入门视频-05Online表单默认值和填值规则使用【p3】
  2. 城市绿化类毕业论文文献包含哪些?
  3. 圣何塞州立大学 计算机科学,圣何塞州立大学相当于中国什么等级的大学?
  4. 深入理解 Jvm 读书笔记(一)
  5. 物流APP开发要素(源码对接)
  6. 2019 年(大)前端技术规划
  7. python小游戏 消消乐小游戏设计与实现
  8. hexo博客快速搭建
  9. 什么是存储虚拟化?记录层和块层都包含哪些设备?
  10. 双十一提前盘点 这些必入的科大讯飞AI生产力好物