ANTLR树步行者,多次返回值

时间:2012-06-19 13:05:38

标签: java parsing tree antlr abstract-syntax-tree

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

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 实际上会使多个参数停滞不前。

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

2 个答案:

答案 0 :(得分: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);}
;

答案 1 :(得分:1)

您是否尝试过列表标签分配(+ =)?见http://www.antlr.org/wiki/display/ANTLR3/ANTLR+Cheat+Sheet

^(FUNCTION_TOK fcname=IDENTIFIER param += functionParameters*){