3

我曾经实现过一个生成增量解析器的 SLR 解析器生成器。解析器可以从头到尾解析一段文本,但是当您删除或插入文本时,它会做最少的工作和对令牌流和语法树的最小更改,而不是从头开始重新解析所有内容。问题是我找不到这个的任何用途?解析器比普通解析器做的工作略多。这样的东西有什么用吗?PS。如果你想知道怎么做,谷歌'basics of compiler design diku',这是一本免费的书,那么我所要做的就是稍微修改一下算法,让它到处存储解析器的状态,这是额外的工作我上面提到过。

4

1 回答 1

4

显而易见的答案是支持结构化编辑器,其中编辑器拥有的是 AST 而不是文本。这允许编辑器在仅提供部分输入时建议如何继续编辑(例如,在“while”关键字之后,编辑器知道“(”是必要的并可以建议它;它可以放入完整的“if”语句仅提供关键字后,它可能会在您键入时抱怨输入的语法错误等)

已经建立了很多这样的编辑器,但大多数都没有成功;人们似乎喜欢/讨厌这样做的编辑。

我所知道的最先进的当前项目是伯克利的Harmonia项目。他们使用增量解析器的老大哥版本:增量 GLR 解析器。

于 2010-11-08T15:31:16.223 回答