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
将得到与结果相同的令牌。
我能够生成以下 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
将得到与结果相同的令牌。