Antlr4 如何忽略令牌并重置lexer先行索引

Antlr4 如何忽略令牌并重置lexer先行索引,antlr4,Antlr4,几周前,我开始使用ANTLR4。我想知道是否有一种方法可以通过lexer忽略匹配的令牌,并将CharStream的索引位置重置为被忽略令牌的开始位置,以便可以通过其他规则(例如,不同模式中的其他规则)再次匹配它 非常感谢。这听起来有点像lesser命令,它是被提出的,但从未完全定义过: 现在,我将覆盖lexer中的nextToken命令 @Override public Token nextToken() { while (true) { int mark = inpu

几周前,我开始使用ANTLR4。我想知道是否有一种方法可以通过lexer忽略匹配的令牌,并将CharStream的索引位置重置为被忽略令牌的开始位置,以便可以通过其他规则(例如,不同模式中的其他规则)再次匹配它


非常感谢。

这听起来有点像
lesser命令,它是被提出的,但从未完全定义过:

现在,我将覆盖lexer中的
nextToken
命令

@Override
public Token nextToken() {
    while (true) {
        int mark = input.mark();
        try {
            int startIndex = input.index();
            Token token = super.nextToken();
            if (token != null && token.getType() == MY_SPECIAL_TYPE) {
                pushMode(MY_SPECIAL_MODE);
                input.seek(startIndex);
                continue;
            }

            return token;
        }
        finally {
            input.release(mark);
        }
    }
}

可能:{u input.seek(_tokenStartCharIndex);skip();};它起作用了。我认为按照链接中的建议创建lexer命令是一个有趣的想法。非常感谢。