我正在扩展ANTLR4中的一个监听器,我希望获得与解析器中特定规则相关联的所有标记,是否有方法可以做到这一点?
即
myConfiguration: CONFIG EQUALS parameters ;
parameters: ALPHANUMERIC+
CONFIG: 'config' ;
ALPHANUMERIC: [a-zA-Z0-9] ;
如何在输入CONFIG
解析规则时告诉听众查找EQUALS
和myConfiguration
的值?
我可以使用某种类型的for循环吗?
for( all tokens in this rule) {
System.out.println(token.getText());
}
我可以看到解析器类中有一个令牌列表,但是我找不到与当前规则关联的令牌列表。
我之所以这样问,是因为我可以避免在Listener和语法中重新输入我需要的令牌名称。通过这样做,我可以检查是否找到了该特定规则中的每个令牌类型,而无需手动输入名称。
答案 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));
}
}