【问题标题】:Parser Generator for changing file用于更改文件的解析器生成器
【发布时间】:2010-02-16 15:59:06
【问题描述】:

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

你好,

马蒂亚斯

【问题讨论】:

  • 如果n 行的更改影响了其他行怎么办?请问你想解决什么问题?您要解析什么“语言”?
  • 任何编程语言,我的猜测是,如果我更改第 n 行,那么我只需要用 java 或 c# 等语言重新解析 n 之后的所有行。
  • 您要查找的词是“增量”,如增量编译。不过,我不知道支持它的解析生成器。我会通过将行信息保存在 AST 中来修补它...

标签: language-agnostic parser-generator


【解决方案1】:

Tim Wagner 在这方面工作了很长时间。请参阅他的GLR parsing engine paper. 它基本上是通过保留解析树并尝试将“整个流”重新解析为一系列解析树和更改的标记来工作的。它很聪明。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 对我来说,这听起来像是(在完全不同的层面上)改变头文件中某个类或结构的存储大小,并且不想重新编译所有依赖它的目标文件。 . 肯定会在脚下开枪。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多