读书人

antlr表达式发动机

发布时间: 2013-03-19 17:22:05 作者: rapoo

antlr表达式引擎

初次在项目中使用antlr,刚做了第一版,功能很简单(参不多正则都能做())

用antlr做表达式引擎,分析表达式变量和函数

举例:表达式为[a]+[b]>[c]*([d]+[e])?,可以分析出[]中的变量

? ? ? ? ? ? ? ? ? ? ? ? ? ?sum([a]+1000), 可以分析出变量,并得到函数名,进行运算,或是直接输出

?

?

这里有个antlr介绍的小文章:http://blackproof.iteye.com/blog/1807372

?

源码:https://github.com/dirkzhang/antlr-expression

留下一点对源码的笔记:

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为根的树,如下


antlr表达式发动机
?

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

?

?

?

读书人网 >软件架构设计

热点推荐