antlr表达式引擎
初次在项目中使用antlr,刚做了第一版,功能很简单(参不多正则都能做╮(╯▽╰)╭)
用antlr做表达式引擎,分析表达式变量和函数
举例:表达式为[a]+[b]>[c]*([d]+[e]) ,可以分析出[]中的变量
sum([a]+1000), 可以分析出变量,并得到函数名,进行运算,或是直接输出
源码: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
相关推荐
lightningmn 2020-06-14
疏雨过 2013-09-30
知行天下 2016-03-29
crazzylp 2014-01-08
jinvasshole 2013-02-19
simonhc 2012-05-31
jinvasshole 2012-05-28
tuniumobile 2012-05-21
MyIgnorance 2012-05-05
crazzylp 2011-11-01
MyIgnorance 2011-10-10
simonhc 2011-09-14
crazzylp 2011-06-11
jinvasshole 2011-03-07
MyIgnorance 2013-11-21
simonhc 2010-05-11
sysuqgy 2010-04-13
jsjbkshz0 2008-08-20
simonhc 2008-01-15