2011-08-07 40 views
1

代碼着色引擎如何工作,到底如何?他們是否只生成一個保留空白的分析樹,爲葉子着色並重建原始程序?實時代碼着色如何實現足夠高效的動態執行?代碼着色如何工作?

回答

5

我所瞭解的大多數語法高級組件都不會對語法樹做出反應,而只是根據它所形成的令牌種類標記源和文本文本。像熒光筆這樣最困難的任務是識別多行註釋(和/或字符串,如果語言允許的話);其他任何東西都可以保存在一個源代碼行中。

自動縮進引擎更多參與。從理論上講,最好的結果將來自重構一個完整的語法樹,但這很慢,並且引發了錯誤處理的問題(因爲大多數程序在編輯時都不是很完美)。相反,他們使用各種簡化的掃描和啓發式方法,但並不總是能夠匹配語言的真正語法。例如,Eclipse的Java編輯器也會根據它們是否命名局部變量,實例字段或靜態變量/方法來改變標識符的顏色,這種情況發生在在編輯器解析並查看實時交叉引用的代碼之後,從基本詞彙突出顯示中單獨傳遞)。

2

語法高亮通常工作在詞法水平,而不是解析器水平。

它本質上是一組由正則表達式派生而來的有限狀態機,所以它運行起來非常快。