2013-01-31 2 views
5

나는 터키어 자연어 텍스트를 토큰 화하기 위해 antlr 4를 사용하여 렉서를 만들었으므로 하나씩 토큰을 가져올 수있는 토큰 스트림을 가져야합니다.antlr 4 TokenStream을 반복 스트림으로 사용하는 방법은 무엇입니까?

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

: 내 입력이 거대 할 수 있기 때문에 토큰의 목록을 구성하지 않으려는 그러나

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

가, 난 그냥 뭔가를 원하는 :이처럼 사용하는 경우 CommonTokenStream는 목록을 반환 어느 EOF 토큰을 얻을 때까지 반복 할 것입니다.

토큰을 반복 할 수있는 토큰 스트림이 있습니까?

답변

10

CommonTokenStream을 사용하는 대신 Lexer.nextToken을 사용하면됩니다.

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

아 감사합니다. Token 스트림에서 이것을 노출하는 것이 좋을 수도 있습니다. 부수적으로 Java 버전은 lexer.nextToken()을 사용합니다. – mdakin