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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值