2013-01-31 24 views
5

Ben Türk doğal dil metinleri tokenizing için antlr 4 kullanarak bir lexer yarattık, yapmam gereken ne belirteçleri teker teker getirebilir bir simge dizisini sahip olmaktır.nasıl antlr 4 TokenStream kullanılır?

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

: Benim giriş kocaman olabileceği kadar jeton bir listesini oluşturmak istemiyoruz Ancak

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

, ben sadece böyle bir şey istiyorum: Böyle kullanırsanız CommonTokenStream bir listesi döndürür Bir EOF jetonu olana kadar yinelemek istiyorum.

orada beni belirteçleri üzerinde yineleme sağlayan bir Token Akışı mı?

cevap

10

bir CommonTokenStream kullanmak yerine, sadece Lexer.nextToken kullanabilirsiniz.

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

Ah çok teşekkürler. Yine de, bunu Token akışlarında açığa çıkarmak güzel olurdu. Bir yan not olarak, Java sürümü lexer.nextToken() kullanır – mdakin

İlgili konular