Używanie Antlr do analizowania danych z niekończącego się strumienia

Czy Antlr nadaje się do analizowania danych ze strumieni, które nie mają EOF bezpośrednio po tekście do analizy? Zgodnie z moimi obserwacjami leksyk nie emituje aktualnego tokena, dopóki nie otrzyma pierwszego znaku następnego tokena. Ponadto - parser wydaje się nie emitować reguły, dopóki nie otrzyma pierwszego znacznika następnej reguły. Oto prosta gramatyka, którą próbowałem:

fox: 'quick' 'brown' 'fox' '\r'? '\n' ;

Następnie użyłem wygenerowanego parsera z UnbufferedCharStream i UnbufferedTokenStream:

  CharStream input = new UnbufferedCharStream(is);
  MyLexer lex = new MyLexer(input);
  lex.setTokenFactory(new CommonTokenFactory(true));
  TokenStream tokens = new UnbufferedTokenStream(lex);
  MyParser parser = new MyParser(tokens);
  MyParser.FoxContext fox = parser.fox();

kiedy strumień się pojawiszybki' - nic się nie dzieje.

gdy 'b„wchodzi - wchodzi reguła”lis'

następnie 'roun'- nic (2 strumienie są w strumieniu - żaden z nich nie jest jeszcze znany do przeskoczenia!)

tylko po 'f„słuchacz odwiedza pierwszy token:”szybki'

potem - nic na tematwół'

w nowej linii (unix): odwiedź token 'brązowy'

Teraz strumień ma wszystkie dane (4 tokeny), ale rozpoznawane są tylko 2 żetony.

Odkryłem, że aby wypchnąć te tokeny przez system, strumień może emitować 2 tokeny, czyli wszystkie tokeny znane gramatyce. Mogą to być 2 dodatkowe nowe linie lub powiedzmy „lis' i 'brązowy” Tylko wtedy tokeny ”lis' i 'n„odwiedź, parser wychodzi z reguły”lis'i parsowanie zostanie zakończone.

Czy to błąd lub funkcja? Czy istnieje sposób na wyeliminowanie tego opóźnienia?

Dzięki!

questionAnswers(3)

yourAnswerToTheQuestion