加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

文本编辑器中的语法分析

发布时间:2020-12-15 22:18:41 所属栏目:安全 来源:网络整理
导读:文本编辑器如何执行语法突出显示?我知道 vim使用带有特殊扩展的简单正则表达式来使它们更加强大,以区分语法元素,但我也知道像TextMate这样的其他文本编辑器允许您定义完整的解析器.不知道TextMate在大文件上表现良好,但Sublime Text据说在大文件上比vim表现
文本编辑器如何执行语法突出显示?我知道 vim使用带有特殊扩展的简单正则表达式来使它们更加强大,以区分语法元素,但我也知道像TextMate这样的其他文本编辑器允许您定义完整的解析器.不知道TextMate在大文件上表现良好,但Sublime Text据说在大文件上比vim表现更好,但支持传统的TextMate语法解析器.是否有一些有趣的黑客用来避免执行文件的从上到下的解析,或者只是采用了非常有效的解析算法?

解决方法

我写过一次文本编辑器.我以为我能比别人做得更好.然后我学会了Vim并意识到我错了:P突出引擎的一部分 still exist on GitHub.

有几种方法是可行的.您可以编写真正的词法分析(或浅层解析)例程,但如果您有效地使用它们并且您不是源解析理论方面的专家,那么正则表达式实际上可能会更快.我用了两者的混合物.

为了获得良好的性能,编辑人员极不可能突出显示整个文件.相反,只需突出显示文件的可见区域,这样就可以最大限度地减少完成的工作.当然,那么你必须考虑当用户开始在该可见区域中间某处编辑时会发生什么.我的方法是始终在内存中保留词法分析器状态(即所有令牌和词法状态的放置)的快照,然后从光标向后走一个或两个令牌,在该点使用词法分析器状态(即保持令牌和状态堆栈在左侧,并丢弃右侧的那些)并从该点重新启动突出显示器直到可见范围的结束.因为所有(我认为)源语言都是从左到右读取的,所以在编辑区域左侧的标记突出显示应该永远不会改变.

编辑|只是重新阅读我的源代码,我还有一些其他优化方法.长的关键字列表(例如内置函数名称)检查起来很昂贵.我将它们构建成一个基数树,它具有巨大的性能提升.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读