編輯:對於那些有興趣/誰想看到我在做什麼,我的應用程序的源代碼可以找到here。ANTLR:如何避免用戶修改文本時重新解析整個文件
我正在用C#構建一個代碼編輯器應用程序,它提供語法高亮顯示。我目前使用ANTLR for C#來解析代碼以突出顯示它。到目前爲止,當用戶最初打開文件時,我的應用程序可以非常快速地突出顯示代碼。不過,當用戶開始編輯文本時,我沒有編寫任何代碼來重新突出顯示文本。
我希望編輯器能夠很好地處理大文件,所以我不希望每次用戶輸入一個字符時都要重新解析整個文件。我做了一些研究,看起來我正在尋找的是一個增量式解析器。不幸的是,它看起來像ANTLR v4 can't do incremental parsing,所以我不確定要做什麼。
我的問題是:是否有另一種方法可以使用ANTLR在用戶輸入時不凍結應用程序?我真的很難放棄ANTLR,因爲它有a bunch of free grammars可用,所以增加對新語言的支持沒有太多工作。我查看了TextMate語法,VSCode使用了很多,但我不理解它們,也沒有可用的C#庫來操作它們。
感謝您的幫助!
你確定你甚至需要解析文件的語法高亮嗎?通常,語法高亮所需的只是令牌流,它不僅計算速度更快,而且僅重新標記文件的一小部分也更容易。如果您想使用語義信息,如果您想突出顯示實例變量而不是局部變量,則這是不夠的。但是,如果你想要的只是一種顏色的標識符,另一種是這組關鍵字等,基於令牌的突出顯示更容易和更高性能。 – sepp2k
您是否知道[Roslyn](https://github.com/dotnet/roslyn/wiki/Roslyn%20Overview)? –
@ sepp2k你是對的,如果我想要所有的標識符都是相同的顏色,我可以標記源代碼,但代碼看起來幾乎是單調的。例如,我想爲不同於本地變量標識符的顏色類型命名。 –