ANTLR4:获取Listener中特定规则的令牌列表

时间:2013-02-21 16:00:11

标签: antlr4

我正在扩展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());
}

我可以看到解析器类中有一个令牌列表,但是我找不到与当前规则关联的令牌列表。

我之所以这样问,是因为我可以避免在Listener和语法中重新输入我需要的令牌名称。通过这样做,我可以检查是否找到了该特定规则中的每个令牌类型,而无需手动输入名称。

1 个答案:

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