我有一个像这样的树行者:

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))只会收集第一个参数,而忽略其他参数。但是functionParameters实际上是多个参数。

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

最佳答案

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

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);}
;

08-05 21:24