是否有任何生成解析器的解析器生成器能够执行以下操作:解析文件,如果您更改第 n 行,那么它只会重新解析因此而更改的行或行。这样解析器就不需要重新解析整个文件。
问候,
马蒂亚斯
是否有任何生成解析器的解析器生成器能够执行以下操作:解析文件,如果您更改第 n 行,那么它只会重新解析因此而更改的行或行。这样解析器就不需要重新解析整个文件。
问候,
马蒂亚斯
我不能给出明确的是或否,但我对此表示怀疑。解析器生成器旨在为任意语法创建解析器。通过仅重新检查单行来更新解析树对语法或允许的更改施加了严格的限制,因为它必须只影响解析树的高度本地化部分。所以我强烈怀疑有人在通用解析器生成器中集成了这样的功能。
蒂姆瓦格纳在这方面工作了很长时间。请参阅他的GLR 解析引擎论文。 它的工作原理基本上是保留解析树并尝试将“整个流”重新解析为一系列解析树和更改的标记。它相当聪明。
Scott McPeak 声称Elsa实现了增量 GLR 解析器。AFAIK,Elsa 主要用于批量解析。
我在 Packrat 之上实现了一个通用解析引擎方面取得了一些成功。由于 memoisation,它非常适合这个目的 - 编辑器仅使与修改的行重叠的 memoised 块无效,然后重新解析整个文件,但实际上只解析修改的行,所有其余部分都保留从上一次运行中记住。
没有现成可用的解决方案,但您可以选择任何 Packrat 实现并在其上制作您自己的东西。
您可以在此处查看 Packrat 如何与文本编辑器集成: