当前位置:  开发笔记 > 编程语言 > 正文

编写语法荧光笔

如何解决《编写语法荧光笔》经验,为你挑选了2个好方法。

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

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

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

任何见解将不胜感激.

谢谢.

PS:我打算用ActionScript编写它



1> 小智..:

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

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

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


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

2> 小智..:

构建语法荧光笔的全部目的在于在代码中查找特定的关键字并为其指定特定的样式(字体,字体样式,颜色等)。为了实现此目的,您将需要定义特定于用于编写代码的编程语言的关键字列表,然后解析文本(例如使用正则表达式),找到特定的标记并将其替换为样式正确的标记。 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])(?![^<]*>|[^<>]*$2$3");
}

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有