代码着色引擎如何正常工作?他们只是生成一个解析树来保留空白,为叶子着色并重建原始程序吗?如何实时代码着色能够高效地实现它吗?
答案 0 :(得分:5)
我所知道的大多数语法hightligters都不会对语法树作出反应,而只是根据它形成的标记类型来标记源和颜色文本。像荧光笔这样最困难的任务是识别多行注释(和/或字符串,如果语言允许的话);其他一切都可以保存在一个源代码行中。
自动缩进引擎更为复杂。从理论上讲,最好的结果将来自重建完整的语法树,但这很慢并且引发了错误处理的问题(因为大多数程序在编辑时甚至都没有良好的形成)。相反,他们使用各种简化的扫描和启发式方法,并不总是能够匹配语言的真实语法。
(编辑:进一步认为这不完全正确。例如,Eclipse的Java编辑器也将根据它们是否命名局部变量,实例字段或静态变量/方法来更改标识符的颜色在编辑器解析并检查实时交叉引用的代码之后,这会在与基本词汇突出显示的单独传递中发生。)
答案 1 :(得分:2)
语法突出显示通常适用于词法分析器级别,而不是解析器级别。
它本质上是一个从一组正则表达式派生而来的有限状态机,因此运行起来非常快。