语境:
当我了解解析器时,编译代码(比如 C++)的过程是这样解释的:
- 将代码写入文件并保存。
- 将文件放入编译器。
- 编译器首先将代码解析成抽象语法树,
- 然后生成机器码。
- 运行代码来测试它。
- 重复。
Bret Victor 想要一种在您键入时评估代码的编程环境。( http://worrydream.com/#!/InventingOnPrinciple )
我想他不是第一个,将这个概念转换为 2D 游戏编程之外的通用编程可能存在一些概念问题,而且我知道有些系统已经做了类似的事情:例如 preadsheets(如 Excel),短暂聊天。
这不是我想讨论的。
问题:(有点宽泛,抱歉——主要问题是粗体字)
编辑时如何解析文本?我的想法是,每当编辑器发送一个事件,指示文本的某些部分被更改时,只有一部分 AST 会被重新评估,并且受 AST 的这一部分影响的值也会被重新评估。
我考虑编写一个解析器生成器,它像往常一样采用语法,但生成一个解析器来处理文本的增量更改,而不是整个文本。
1. 这是一个合理的概念吗?(对于任何晦涩难懂的编程语言/环境。可能是“功能反应式”的东西。或者只是 html。)
(2.) 它甚至可能使用过吗?
(3.) 解析整个文件的速度是否足以让复杂的方法变得不必要?
(4.) Eclipse 等 IDE 中的语法高亮显示或类型检查器是否像这样工作?它们是如何工作的?我认为它们不如编译器解析器强大,无法让它们工作得足够快,对吗?
(5.) 在 Stackoverflow 中,有样式文本的实时预览。它会在每次击键后解析整个问题吗?它是否有一些“我的”概念可以解决的限制?