如何忽略令牌并重置词法分析器预测索引

时间:2013-11-26 11:42:58

标签: antlr4

几周前,我开始使用ANTLR4。我想知道是否有办法忽略词法分析器匹配的标记,并将CharStream的索引位置重置为被忽略标记的起始位置,以便可以通过其他规则再次匹配(例如其他规则)不同的模式)。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

这听起来有点像less lexer命令,它被提出但从未完全定义:
#212: A new lexer command: Less

现在,我会覆盖你词法分析器中的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);
        }
    }
}