Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ide 代码着色是如何工作的?_Ide_Colors - Fatal编程技术网

Ide 代码着色是如何工作的?

Ide 代码着色是如何工作的?,ide,colors,Ide,Colors,代码着色引擎到底是如何工作的?他们只是生成一个解析树来保留空白、给叶子上色并重建原始程序吗?实时代码着色是如何高效地进行动态着色的 据我所知,大多数语法hightligter不会对语法树做出反应,而只是根据它形成的标记的类型对源文本和颜色文本进行标记。highlighter等最困难的任务是识别多行注释(和/或字符串,如果语言允许);其他所有内容都可以保存在单个源行中 自动压痕引擎更为复杂。理论上,最好的结果来自于重建完整的语法树,但这很慢,并且会产生错误处理问题(因为大多数程序在编辑时甚至格式不

代码着色引擎到底是如何工作的?他们只是生成一个解析树来保留空白、给叶子上色并重建原始程序吗?实时代码着色是如何高效地进行动态着色的

据我所知,大多数语法hightligter不会对语法树做出反应,而只是根据它形成的标记的类型对源文本和颜色文本进行标记。highlighter等最困难的任务是识别多行注释(和/或字符串,如果语言允许);其他所有内容都可以保存在单个源行中

自动压痕引擎更为复杂。理论上,最好的结果来自于重建完整的语法树,但这很慢,并且会产生错误处理问题(因为大多数程序在编辑时甚至格式不好)。取而代之的是,他们使用各种简化的扫描和启发式方法,这些方法并不总是能够匹配语言的真正语法


(编辑:进一步考虑,这不是完全正确的。例如,Eclipse的Java编辑器还将根据标识符是否命名本地变量、实例字段或静态变量/方法来更改标识符的颜色。这在编辑器解析和键入检查代码后,与基本词汇突出显示分开进行r实时交叉引用)。

据我所知,大多数语法HightLigger不会对语法树做出反应,而只是根据其形成的标记类型对源文本和彩色文本进行标记。highlighter等最困难的任务是识别多行注释(和/或字符串,如果语言允许的话);其他所有内容都可以保存在单个源行中

自动缩进引擎更为复杂。理论上,最好的结果来自于重建完整的语法树,但这很慢,并且会带来错误处理问题(因为大多数程序在编辑时甚至格式不好).相反,他们使用各种简化的扫描和启发式方法,这些方法并不总是能够匹配语言的真正语法


(编辑:进一步考虑,这不是完全正确的。例如,Eclipse的Java编辑器还将根据标识符是否命名本地变量、实例字段或静态变量/方法来更改标识符的颜色。这在编辑器解析和键入检查代码后,与基本词汇突出显示分开进行r实时交叉引用)。

语法高亮显示通常在lexer级别工作,而不是解析器级别


它本质上是一个由一组正则表达式派生的有限状态机,因此运行速度非常快。

语法高亮显示通常在lexer级别工作,而不是解析器级别

它本质上是一个由一组正则表达式派生的有限状态机,因此运行起来非常快