5

我使用 antlr 4 创建了一个词法分析器,用于对土耳其自然语言文本进行标记,我需要做的是有一个标记流,我可以一个一个地获取标记。如果我像这样使用 CommonTokenStream ,它会返回一个列表:

ANTLRInputStream inputStream = new ANTLRInputStream(input);
TurkishLexer lexer = new TurkishLexer(inputStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
List<Token> tokens = tokenStream.fill();
for (Token token : token) ...

但是我不想构建一个令牌列表,因为我的输入可能很大,我只想要这样的东西:

for (Token token: tokenStream.next()) ...

我会迭代直到获得 EOF 令牌。

是否有允许我迭代令牌的令牌流?

4

1 回答 1

12

而不是使用 a CommonTokenStream,您可以简单地使用Lexer.nextToken.

for (Token token = lexer.nextToken();
     token.getType() != Token.EOF;
     token = lexer.nextToken())
{
    ...
于 2013-01-31T14:24:44.823 回答