用于更新解析树的高效算法


14

假设我有很多代码已经被字典化和解析了。
假设只有一个字符发生变化;我想更新我的解析,但是由于与整个事物相比修改很小,我想知道是否有可能不再次解析整个事物,但是是否有算法来确定重新解析的范围,并妥善处理移动的令牌边界。

提前致谢!


1
嗨,欢迎光临!我不是该主题的专家,但是我认为您要寻找的关键字是增量解析增量编译
MS Dousti 2011年

@Sadeq感谢您的指导!您会考虑添加一些详细信息的答案吗?不胜感激!
Agos

Answers:


9

按照@Agos的要求,我将评论变成了答案。

首先,我必须承认我在这一领域并不真正有知识。但是,我建议您阅读“ 构建友好的解析器以及高效灵活的增量解析”一文,以了解2000年前用于增量解析的算法。

有关更新的治疗方法,您可以查看以下论文:

更多信息:有(至少)两种解析/编译方法:

  • 批次的方法,其中的代码整个块被解析/编译。
  • 增量的方法,其中所述文档被第一解析/编译在批处理模式,然后检测到更改和最小重新解析/重新编译应用。这种方法不仅提高了解析/编译速度,而且还有助于实现IDE的出色功能,例如与延迟编译有关的后台编译。(您也可以搜索诸如IntelliSense之类的商业功能 )。

1

如果您的增量解析器在行的每一行保存状态,则仅从最后一个有效的解析器状态重新解析(在最佳情况下,例如,在完全解析之后,这只是修改开始的行的开始),并在结尾处停止解析修改结束的行(内部解析器可能会在修改之后向前看以正确识别结构)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.