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