nextToken() 不使用流中的令牌?

nextToken() not consuming token from stream?

我能够生成以下 RuntimeException,但不确定原因。我的理解是 nextToken() 推进了底层流。有问题的标记是我正在解析的文档中间的一个正常标记,而不是像 EOF 这样的奇怪标记。

class TokenStreamRelease implements TokenStream
{
    private final MyLexer _lexer; // MyLexer extends org.antlr.v4.runtime.Lexer

    Token _nextToken;

    @Override
    public Token next()
    {
        Token toReturn = _nextToken;
        _nextToken = _lexer.nextToken();
        if(_nextToken == _lexer.getToken())
        {
            throw new RuntimeException();
        }
        return toReturn;
    }
}

你的代码基本上说:如果当前令牌等于当前令牌,抛出一个 RuntimeException.

Lexer.getToken 定义为:

public Token getToken() { return _token; }

Lexer.nextToken更新和returns _token

因此在 nextToken 之后立即调用 getToken 将得到与结果相同的令牌。