语法高亮设计模式

时间:2009-04-02 04:43:28

标签: language-agnostic syntax-highlighting

我正在寻找一些关于在文本框中启用语法突出显示的最佳实践和常用模式的概述。这似乎是一种非常常见的练习,几乎所有语言都具有UI控件,可以使用不同语言进行语法突出显示。我只是想知道是否有一种共同的实施模式。

每个人都使用正则表达式吗?是否存在常用于语法突出显示方案的正则表达式的存储库?

是否有替代/更好的语法突出显示方法?

更新

关于以给定语言执行语法突出显示的相关资源的链接或与语法突出显示相关的概念将是很好的。 Lexing(词汇分析)提出了一个答案,但没有链接可以了解更多信息。任何有助于更好地理解这个通常解决的问题的事情都会很棒。

Lexical Analysis on Wikipedia

1 个答案:

答案 0 :(得分:2)

正则表达式绝对是最开始的第一个。但是,它们无法真正处理大多数语言中遇到的许多边缘情况 - 看起来像关键字的文本可以在找到的字符串文字中,字符串文字又可以包含转义分隔符以及特殊字符。同样适用于评论等。

基本上要做好语法高亮,你需要执行源的lexing - 使用特定于语言的启发式应用程序解析它来构建一个区域列表,其中源的每个区域都用它的注释方式进行注释风格。

随着编辑的发生,您可以再次应用语言规则来查看此更改可以在多大程度上改变区域的呈现方式。例如,在字符串文字中键入一个字母只会使字符串文字区域更长,但键入一个结束引号会截断该区域并将其剩余部分转换为代码,这取决于所有其他lexing规则。