编写语法荧光笔

Ian*_*las 21 regex syntax-highlighting actionscript-3

我希望为我正在考虑的夏季项目编写自己的语法高亮显示器,但我不知道如何编写自己的语法高亮显示器.

我知道有很多实现,但我想了解正则表达式以及语法高亮如何工作.

语法高亮如何工作以及开发语法有哪些好的参考?语法高亮显示器是否在键入每个字符时扫描每个字符,还是在键入每个字符后整体扫描文档/文本区域?

任何见解将不胜感激.

谢谢.

PS:我打算用ActionScript编写它

小智 21

语法荧光笔可以以两种非常通用的方式工作.第一个为突出显示的语言实现完整的词法分析器和解析器,准确识别每个标记的类型(关键字,类名,实例名,变量类型,预处理器指令......).这提供了根据一些规范精确突出代码所需的所有信息(红色的关键字,蓝色的类名,你有什么).

第二种方式类似于Google Code Prettify采用的方式,而不是每种语言实现一个词法分析器/解析器,而是使用了几个非常通用的解析器,它们可以在大多数语法上做得不错.例如,这个荧光笔将能够合理地解析和突出任何类C语言,因为它的词法分析器/解析器可以识别这些语言的一般组件.

这也有一个优点,因此,您不需要明确指定语言,因为引擎将自己确定哪些通用解析器可以做到最好.当然,缺点是突出显示不如使用特定于语言的解析器时完美.

  • 据我了解@Marplesoft,每种语言编写词法分析器和解析器是第一种方式,编写通用词法分析器和解析器是第二种. (8认同)
  • 你开始说荧光笔以两种方式工作,但除非我误解,你没有解释第二种方式. (3认同)

小智 6

构建语法荧光笔的全部目的在于在代码中查找特定的关键字并为其指定特定的样式(字体,字体样式,颜色等)。为了实现此目的,您将需要定义特定于用于编写代码的编程语言的关键字列表,然后解析文本(例如使用正则表达式),找到特定的标记并将其替换为样式正确的标记。 HTML标记。

用JavaScript编写的一个非常基本的highligher看起来像这样:

var keywords = [ "public", "class", "private", "static", "return", "void" ];
for (var i = 0; i < keywords.length; i++)
{
        var regex = new RegExp("([^A-z0-9])(" + keywords[i] + ")([^A-z0-9])(?![^<]*>|[^<>]*</)", "g");
        code = code.replace(regex, "$1<span class='rm-code-keyword'>$2</span>$3");
}
Run Code Online (Sandbox Code Playgroud)


hlo*_*dal 5

StackOverflow 播客第 50 期中, Steve Yegge 谈到了他创建一些通用突出显示机制的项目。不是成品,可能比您想要的更复杂,但可能会有一些有趣的东西。

  • @OrestesKappa 看来不是。我只需搜索“The Stack Overflow Podcast”并向下滚动到第 50 集,就可以在 Google 的播客应用程序上找到它。任何播客播放器都应该可以提供它。 (2认同)

小智 5

Udacity 课程 CS262是一个良好的开端。标题是构建一个 Web 浏览器,但实际上该课程重点关注您正在寻找的问题 - 如何解析和词法一组文本。就您而言,您将使用该信息来突出显示。我刚拿了它,效果非常好。课程现已“结束”,但视频和练习题/作业仍然可供观看。