2012-06-19 61 views
1

我有一个树遍历这样的:ANTLR树遍历,返回值的多次

function: 
    ^(FUNCTION_TOK fcname=IDENTIFIER param=functionParameters*){ 
     a_param_arrayList.add(param); 
    } 
; 

functionParameters returns [Object sth]: 
    ^(PARAM_TOK value=IDENTIFIER){ sth = $value.getText();} 
; 

这是一个简单的场景,我只是想将参数添加到一个ArrayList,但上面的代码(a_param_arrayList.add(param))将仅收集第一个参数并忽略其他参数。但函数参数实际上会对多个参数进行调整。

有谁知道如何修复这棵树步行者? 非常感谢!

回答

1

我通过使用规则参数解决了这个问题。

function: 
    ^(FUNCTION_TOK fcname=IDENTIFIER functionParameters[a_param_arraylist]*) 
; 

functionParameters [ArrayList arr] returns [Object sth]: 
    ^(PARAM_TOK value=IDENTIFIER){ sth = $value.getText(); arr.add(sth);} 
;