6

ANTLR4でリスナーを拡張していますが、パーサーの特定のルールに関連付けられているすべてのトークンを取得したいのですが、それを行う方法はありますか?

すなわち

myConfiguration: CONFIG EQUALS parameters ;
parameters: ALPHANUMERIC+

CONFIG: 'config' ;
ALPHANUMERIC: [a-zA-Z0-9] ;

解析ルールの値CONFIGを検索するようにリスナーに指示するにはどうすればよいですか?EQUALSmyConfiguration

使用できるある種のforループはありますか?

for( all tokens in this rule) {
    System.out.println(token.getText());
}

パーサークラスを介してトークンのリストがあることはわかりますが、現在のルールに関連付けられているトークンのリストが見つかりません。

私がこれを求めている理由は、リスナーと文法で必要なトークン名を再入力することを避けるためです。そうすることで、名前を手動で入力しなくても、その特定のルールの各トークンタイプが見つかったかどうかを確認できます。

4

1 に答える 1

8

これはあなたが探しているものかもしれません。

List<TerminalNode> terminalNodes = new ArrayList<TerminalNode>();
for (int i = 0; i < context.getChildCount(); i++) {
    if (context.getChild(i) instanceof TerminalNode) {
        terminalNodes.add((TerminalNode)context.getChild(i));
    }
}
于 2013-02-21T18:33:06.720 に答える