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

问题描述:

是否有任何生成解析器的解析器生成器能够执行以下操作:解析文件,并且如果更改第n行,则它只会重新计算因此发生更改的行或行。以便解析器不需要重新分析完整文件。用于更改文件的解析器生成器

映入眼帘,

马蒂亚斯

+0

如果上线'变化N'影响一些其他线路?我可以问你想解决什么问题吗?你想要解析什么“语言”? – 2010-02-16 16:33:43

+0

任何编程语言,我的猜测是,如果我改变第n行,那么我只需要重新编译n之后的所有行,像java或c#语言。 – mgiza 2010-02-16 16:44:35

+2

您正在寻找的词是增量编译中的“增量”。不过,我不知道支持它的解析生成器。我会通过在AST中保留行信息来修补它... – dmckee 2010-02-16 17:45:23

Tim Wagner在此工作了很长时间。见他的GLR parsing engine paper.它基本上通过保持解析树,并试图重新分析“整个流”作为一系列的分析树和改变的令牌。它非常聪明。

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

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

+0

对我来说,听起来像(在完全不同的级别)更改头文件中某些类或结构的存储大小,而不想重新编译所有依赖于它的目标文件......当然可以在脚下拍摄自己。 – 2010-02-16 16:15:45

我在Packrat上实现了一个通用的解析引擎,取得了一些成功。由于memoisation - 编辑器仅使与修改后的行重叠的memoised块无效,然后重新整理整个文件,但只有修改过的行被实际解析,其余所有其余部分保留自上一次运行记忆,因此它符合此目的。

没有现成的可用解决方案,但您可以拿起Packrat的任何实施方案,并在自己的产品上打造自己的产品。

你可以看看Packrat用文本编辑器在这里如何整合:

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