2012-12-14 101 views
7

我有一個定義DSL(域特定語言)的ANTLR語法。這個語法比較簡單。它解析語言並輸出C代碼來創建一個非常基本的翻譯器。ANTLR語法在Visual Studio中突出顯示DSL

該語言旨在用於C#應用程序(鍵入某種控件,無論是RichTextBox還是自定義控件),並且一個要求是爲此語言提供語法高亮顯示。我搜索了互聯網,希望能夠找到關於如何實現這一目標的某種信息,或者找到一種工具讓自己更容易一點。

在沒有找到太多信息之後,我的最佳假設是我需要使用ANTLR生成的詞法分析器來查看令牌並相應地給它們着色。這是正確的行爲路徑,還是有其他方法/工具爲自定義域特定語言提供語法高亮顯示?如果這是正確的方法,我該如何去識別特定的令牌?

如果我遺漏了任何重要信息,請詢問!謝謝!

回答

3

此語意在C#應用程序中使用(輸入到某種控制,無論是RichTextBox的或自定義控制)和一個要求是有語法高亮顯示這種語言。

考慮使用Scintilla來控制。它是IDE風格文本編輯的文本控件。 Notepad++將其用於其文本控制,正如其源自的SciTE IDE一樣。我用它在一個用C#編寫的小型自定義IDE項目中使用非官方的.NET特定版本 - 我認爲它是ScintillaNET

Scintilla支持自定義關鍵字高亮顯示以及各種可編程功能,如波浪線下劃線和類似的東西。


如果你有,你想用一個控制,我認爲這是合理使用小ANTLR詞法分析器產生的令牌給你。每個標記都包含行號,起始字符位置,源文本和標記類型 - 您需要知道要突出顯示的內容和方式。每次文本改變時,唯一的麻煩就是通過詞法分析器運行文本。有效的方法可以在不重新整理整個文檔的情況下完成,但仍然需要注意。

4

我成功地將AvalonEdit用於我的一個類似項目。我剛剛創建了一個正確的語法高亮顯示的小編輯器。

在項目中啓動並運行它非常簡單快捷。你只需要提供一個簡單的XML文件來記錄你的DSL的語法,並且你將有一個作爲WPF控件的開箱即用的彩色輸出。

它看起來像他們添加完成設施,因爲我用它,雖然我沒有那方面的經驗,但我懷疑它也做得很好,如果質量與着色相同。

相關問題