用于更改文件的分析器生成器

时间:2010-02-16 15:59:06

标签: language-agnostic parser-generator

是否存在生成解析器的任何解析器生成器具有以下功能:解析文件,如果更改行n,则它仅重新排序由于此而更改的行或行。这样解析器就不需要重新解析整个文件了。

映入眼帘,

的Mathias

3 个答案:

答案 0 :(得分:1)

我不能肯定是或否,但我对此表示怀疑。解析器生成器旨在为任意语法创建解析器。仅通过重新检查单行来更新解析树会对语法或允许的更改施加强约束,因为它必须仅影响解析树的高度本地化部分。所以我强烈怀疑是否有人在通用解析器生成器中集成了这样的功能。

答案 1 :(得分:1)

蒂姆瓦格纳在这方面工作了很长时间。查看他的GLR parsing engine paper.它的工作原理基本上是保持解析树并尝试将“整个流”重新分析为一系列解析树和更改的标记。它很聪明。

Scott McPeak声称Elsa实现了增量GLR解析器。 AFAIK,Elsa主要用于批量解析。

答案 2 :(得分:0)

我在Packrat上实现了一般的解析引擎方面取得了一些成功。由于记忆,它很适合这个目的 - 编辑器仅使与修改后的行重叠的memoised块无效,然后重新整理整个文件,但实际只解析修改后的行,其余所有内容都保留在上一次运行中。

没有现成的解决方案,但您可以选择任何Packrat实现并在其上自行制作。

您可以在此处了解Packrat如何与文本编辑器集成:

http://www.meta-alternative.net/mbase.html