2013-01-31 77 views
5

我已經創建了一個使用antlr 4的詞法分析器來標記土耳其自然語言文本,我需要做的是有一個令牌流,我可以一個接一個地獲取令牌。如果我使用這樣CommonTokenStream返回一個列表:如何使用antlr 4 TokenStream作爲可迭代流?

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標記。

是否有令牌流允許我迭代令牌?

回答

10

而不是使用CommonTokenStream,您可以簡單地使用Lexer.nextToken

for (Token token = lexer.nextToken(); 
    token.getType() != Token.EOF; 
    token = lexer.nextToken()) 
{ 
    ... 
+0

啊非常感謝。也許在令牌流中公開這個會很好。作爲一個附註,Java版本使用lexer.nextToken() – mdakin