我曾经实现过生成增量解析器的SLR解析器生成器。解析器可以从头到尾解析一段文本,但是当您删除或插入文本时,它会在令牌流和语法树中完成最少量的工作和最少量的更改,而不是从头开始重新解析所有内容。问题是我找不到任何用途?解析器比普通解析器稍微多做一些工作。这样的东西有用吗? PS。如果你想知道如何,google'编译器设计diku'的基础知识,它是一本免费的书,那么我所要做的就是稍微修改一下算法,这样就可以将解析器的状态存储到各处,这是额外的工作我在上面提到过。
答案 0 :(得分:4)
显而易见的答案是对结构化编辑器的支持,其中编辑器保存的是AST而不是文本。这允许编辑器在仅提供部分输入时建议如何继续编辑(例如,在“while”关键字之后,编辑器知道“(”是必要的并且可以建议它;它可以放入完整的“if”语句在提供关键字之后,它会抱怨输入的语法错误,因为您输入等等。)
已经建造了很多这样的编辑器,其中大多数都没有成功;人们似乎喜欢/讨厌这样做的编辑。
当前最先进的项目我知道这是伯克利的Harmonia项目。他们使用增量解析器的大哥版本:增量GLR解析器。