Parsing 大文件的实时语法突出显示解析器
我熟悉解析器生成器以及从头到尾一次性处理流的解析器的基础知识 我的问题是针对语法突出显示文本编辑器之类的情况。当用户将每个字符更改为一个非常大的文件时,需要执行大量计算才能重新解析和突出显示整个文件 我能想到的简单优化:Parsing 大文件的实时语法突出显示解析器,parsing,optimization,syntax-highlighting,Parsing,Optimization,Syntax Highlighting,我熟悉解析器生成器以及从头到尾一次性处理流的解析器的基础知识 我的问题是针对语法突出显示文本编辑器之类的情况。当用户将每个字符更改为一个非常大的文件时,需要执行大量计算才能重新解析和突出显示整个文件 我能想到的简单优化: 延迟该操作,直到击键空闲几秒钟 重新分析整个文件,但格式只能应用于可见的视口文本 但是,是否存在只重新处理“本地”文本而不从文件开头开始的普遍适用的技术 想法: 更改的上游影响似乎不如下游更改的影响大,因此,根据算法允许的前瞻令牌数量,我们可能可以从这么多令牌重新处理回文
- 延迟该操作,直到击键空闲几秒钟
- 重新分析整个文件,但格式只能应用于可见的视口文本
- 更改的上游影响似乎不如下游更改的影响大,因此,根据算法允许的前瞻令牌数量,我们可能可以从这么多令牌重新处理回文件末尾
- 我们知道在大多数重新处理请求时光标在哪里,因此我们可以捕获该点的一些状态快照,然后从那里继续(如果这有帮助的话)
谢谢 语法突出显示不一定要精确。事实上,有时精确的语法高亮显示很烦人(例如,当整个屏幕变灰时,因为在文件开头的某个地方引入了语法错误)。您通常可以通过以下方式逃脱:
这些只是一些建议。Vim和Emacs存储库中有许多成功的高亮显示程序的示例,您可以查看这些示例以了解特定语言的实用思想。NB通常语法高亮显示可以从标记中完成,您不需要解析任何内容。