6

我正在扩展 ANTLR4 中的侦听器,并且我想获取与解析器中的特定规则相关联的所有标记,有没有这样做的方法?

IE

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 回答