antlr-(二)用武之地之处理平衡组

antlr-(二)用武之地之处理平衡组
有这么一个字符串:a1=1,a2=X2{b1=1,b2=X3{c1=1,c2=2}},a3=X4{b1=1}
想写一个正则表达式,让下面code的执行结果是:
result(以逗号为token来分割字符串,逗号在"{"和"}"里面的忽略其做为token):
a1 = 1   
a2
= X2{b1 = 1 , b2 = X3{c1 = 1 , c2 = 2 }}   
a3
= X4{b1 = 1 }
以上问题来自 http://www.javaeye.com/post/265973

使用antlr3规则处理
grammar Spl ;
options {
  output
= AST ;
  ASTLabelType = CommonTree ;
}
stat     :    spl
[ 0 ] ;
spl 
[ int step ]      returns  [ String value ] :    (expr [ step ]   
    {    
        if ($value!
= null)
            $value +
=  $expr.value ;
        else
            $value 
=  $expr.value ;
    }) +
    
;
expr 
[ int step ]     returns  [ String value ] :    a = ID ' = ' b = ID (| p = param [ step ] ) c = ' , '? 
    {
        String str 
=  $a.text +  " = "  + $b.text ;
        if (p ! = null)
            str +
=  $param.value ;
        if ($step  ==   0 ) {
            System.out.println(str)
;
        } else {
            $value 
=  str ;
            if (c! = null)
                $value +
= " , " ;
        } 
    }
    
;
param  [ int step ]  returns  [ String value ] :    '{' spl [ 1 ]  '}'
    {
        $value 
=   " { "  + $spl.value +  " } " ;
    }
    
;
ID    :    ('a'..'z' | 'A'..'Z' | '
0 ' .. ' 9 ')('a'..'z' | 'A'..'Z' | ' 0 ' .. ' 9 ') * ;
EQPARAM    :    ' = ' ;
WS    :    (' '|'\t'|'\n'|'\r') + {skip() ; };

你可能感兴趣的:(antlr-(二)用武之地之处理平衡组)