如何使用 ANTLR 逐段解析输入?

How to parse an input piece by piece with ANTLR?

我正在解析一个未知的输入,因此解析器可能会失败,但我想尽可能多地解析它 .

此外,输入可以非常大 (> 1 Go).

假设解析器解析 items (用字母表示) 这是输入:

A
B
C
D
E
  1. 我想一段一段地解析这个输入。我不能给它完整的输入,因为 :
  1. 我不想任意剪切输入因为:
  1. 我目前的解决方案是设置我的语法
blind_parsing
    : blind_statement swallow_to_eof
    ;

swallow_to_eof
    : ~(EOF)*
    ;

解析器解析一项吞没规则swallow_to_eof中的其余项。 我给解析器一个部分输入,然后一点一点地完成它。

我不喜欢这个解决方案:

也许这个问题有一个明显的解决方案,但我错过了。 你是如何解决这个问题的?

谢谢:)

这被称为增量解析 不,ANTLR4 不支持开箱即用。以前有很多人讨论过这个问题,但我不记得有没有看到可靠的解决方案。