d11*_*wtq 11
我写过一次文本编辑器.我以为我能比别人做得更好.然后我学会了Vim并意识到我错了:P我突出引擎的部分仍然存在于GitHub上.
有几种方法是可行的.您可以编写真正的词法分析(或浅层解析)例程,但如果您有效地使用它们并且您不是源解析理论方面的专家,那么正则表达式实际上可能会更快.我用了两者的混合物.
为了获得良好的性能,编辑人员极不可能突出显示整个文件.相反,只需突出显示文件的可见区域,这样就可以最大限度地减少完成的工作.当然,那么你必须考虑当用户开始在中间的某个地方进行编辑时会发生什么那个可见区域.我的方法是始终在内存中保留词法分析器状态(即所有令牌和词法状态的放置)的快照,然后从光标向后走一个或两个令牌,在该点使用词法分析器状态(即保持令牌和状态堆栈在左侧,并丢弃右侧的那些)并从该点重新启动突出显示器直到可见范围的结束.因为所有(我认为)源语言都是从左到右读取的,所以在编辑区域左侧的标记突出显示应该永远不会改变.
编辑| 只是重新阅读我的源代码,我还有一些其他优化方法.长的关键字列表(例如内置函数名称)检查起来很昂贵.我将它们构建成一个基数树,它具有巨大的性能提升.