Parsing 如何使用ANTLR逐个解析输入?
我正在解析一个未知的输入,因此解析器可能会失败,但我希望尽可能多地解析它 此外,输入可以是非常大的(>1次) 假设解析器解析项(由字母表示),这就是输入:Parsing 如何使用ANTLR逐个解析输入?,parsing,antlr,antlr4,grammar,Parsing,Antlr,Antlr4,Grammar,我正在解析一个未知的输入,因此解析器可能会失败,但我希望尽可能多地解析它 此外,输入可以是非常大的(>1次) 假设解析器解析项(由字母表示),这就是输入: A B C D E 我想逐块分析这个输入。我无法给出全部输入,因为: 它可能太大了 项目故障可能会导致以下项目出现故障 我不想随意剪切输入,因为: 如果在错误的地方 >剪切,它会产生错误(例如在B的中间切割)。 如果我试图不在错误的位置剪切,我最终会“准备”输入。(preparsing意味着我将面临与解析相同的问题,语法复杂,项目可以
A
B
C
D
E
- 它可能太大了
- 项目故障可能会导致以下项目出现故障
- 如果我试图不在错误的位置剪切,我最终会“准备”输入。(preparsing意味着我将面临与解析相同的问题,语法复杂,项目可以嵌套,因此preparsing很复杂)
- 项目可能会有很大的差异(数千到数百万个字符),因此我给解析器提供了大量的项目,以确保不会意外地将最大的项目一分为二
- 性能很差:
- 解析输入的大小很大(上一点)
- 我们一直在解析相同的元素,将它们转储到swallow_to_eof规则中(如果一切顺利,上面的示例将被解析5次,这听起来非常低效:
- BCDE
- B CDE
- 德
- D E
- E
谢谢:)这就是所谓的增量解析,不,ANTLR4不支持开箱即用。过去有很多关于这个问题的讨论,但我不记得有过可靠的解决方案。“ANTLR4不支持开箱即用”谢谢你的回答,这正是我想知道的:是否有ANTLR4解决方案,或者是否必须“从外部”解决。现在我知道这个词的由来了。这将使我的搜索更加高效。干杯
blind_parsing
: blind_statement swallow_to_eof
;
swallow_to_eof
: ~(EOF)*
;