2013-01-31 6 views
5

Ich habe einen Lexer erstellt mit Hilfe von Antlr 4 für Tokening Türkisch natürliche Sprache Texte, was ich tun muss, ist ein Token-Stream, den ich Token eins nach dem anderen holen kann. CommonTokenStream gibt eine Liste, wenn ich es wie folgt verwenden:Wie verwende ich den TokenStream von antlr 4 als iterierbaren Stream?

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

aber ich möchte nicht eine Liste von Token zu konstruieren, wie meine Eingabe sehr groß sein könnte, ich will nur so etwas wie:

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

Was ich wiederholen würde, bis ich ein EOF-Token bekomme.

Gibt es einen Token-Stream, mit dem ich über Token iterieren kann?

Antwort

10

Anstatt eine CommonTokenStream zu verwenden, können Sie einfach Lexer.nextToken verwenden.

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

Ah vielen Dank. Vielleicht wäre es trotzdem schön, dies in Token-Streams zu veröffentlichen. Als Randnotiz verwendet die Java-Version lexer.nextToken() – mdakin

Verwandte Themen