1

私はこのようなツリーウォーカーを持っています:

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は実際には複数のパラメーターをパラメーター化します。

このツリーウォーカーを修正する方法を知っている人はいますか? どうもありがとう!

4

2 に答える 2

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);}
;
于 2012-06-19T13:37:55.277 に答える
1

リストのラベル割り当て (+=) は試しましたか? http://www.antlr.org/wiki/display/ANTLR3/ANTLR+Cheat+Sheetを参照してください

^(FUNCTION_TOK fcname=IDENTIFIER param += functionParameters*){
于 2012-08-21T07:07:04.707 に答える