Usando Antlr para analizar datos de un flujo interminable

¿Es Antlr adecuado para analizar datos de flujos que no tienen EOF justo después del texto a analizar? Según mi observación, el lexer no emite el token actual hasta que se recibe el primer carácter del token siguiente. Además de eso, el analizador parece no emitir la regla hasta que se recibe el primer token de la siguiente regla. Aquí hay una gramática simple que probé:

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

Luego utilicé el analizador generado con UnbufferedCharStream y 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();

cuando la corriente se ponerápido' - no pasa nada.

cuando 'b'entra - entrando en la regla'zorro'

entonces 'roun'- nada (hay 2 fichas en el flujo - ¡ninguna de ellas se sabe que se haya perdido aún!)

Solo después 'f'el oyente visita el primer token:'rápido'

entonces - nada en 'buey'

en nueva línea (unix): token de visita 'marrón'

Ahora el flujo tiene todos los datos (4 tokens), pero solo se reconocen 2 tokens.

Descubrí que para insertar esos tokens a través del sistema, el flujo puede emitir 2 tokens, es decir, cualquier token conocido por la gramática. Podrían ser 2 líneas extra nuevas, o digamos 'zorro'y'marrón'. Sólo entonces los tokens 'zorro'y'\norte'Visitar, el analizador sale de la regla'zorro'y el análisis se termina.

¿Es eso un error o una característica? ¿Hay alguna manera de eliminar ese retraso?

¡Gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta