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

Language agnostic 用于更改文件的解析器生成器,language-agnostic,parser-generator,Language Agnostic,Parser Generator,是否有任何解析器生成器,生成的解析器能够执行以下操作:解析文件,如果您更改了第n行,那么它只会重新解析该行或因此而更改的行。这样解析器就不需要重新分析整个文件 问候 马蒂亚斯我不能给出肯定的是或否,但我对此表示怀疑。解析器生成器用于为任意语法创建解析器。仅通过重新检查一行来更新解析树会对语法或允许的更改产生强烈的约束,因为它只能影响解析树的高度本地化部分。因此,我强烈怀疑是否有人在通用解析器生成器中集成了这样的功能。蒂姆·瓦格纳(Tim Wagner)在这方面工作了相当长一段时间。请看他的文章,

是否有任何解析器生成器,生成的解析器能够执行以下操作:解析文件,如果您更改了第n行,那么它只会重新解析该行或因此而更改的行。这样解析器就不需要重新分析整个文件

问候


马蒂亚斯

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

蒂姆·瓦格纳(Tim Wagner)在这方面工作了相当长一段时间。请看他的文章,它的工作原理基本上是保持解析树,并尝试将“整个流”重新解析为一系列解析树和更改的标记。这很聪明


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

我成功地在Packrat之上实现了一个通用的解析引擎。它非常适合这一目的,因为它采用了回忆录—编辑器只会使与修改行重叠的回忆录块无效,然后重新解析整个文件,但实际上只解析修改行,其余的都会保留上次运行时的回忆录

没有现成可用的解决方案,但您可以选择任何Packrat实现,并在其上编写自己的东西

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


对我来说,这听起来像(在完全不同的级别上)更改头文件中某个类或结构的存储大小,而不想重新编译依赖它的所有对象文件。。。当然,这是一个打击你自己脚的好办法。如果第
n
行上的更改影响到其他行怎么办?请问你想解决什么问题?你想解析什么“语言”?任何一种编程语言,我的猜测是,如果我改变n行,那么我只需要在java或c#之类的语言中重新解析n之后的所有行。你要找的词是“增量”,就像增量编译一样。不过,我对支持它的解析生成器一无所知。我会通过在AST中保留行信息来修补它。。。