2012-12-14 52 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控件的开箱即用的彩色输出。

它看起来像他们添加完成设施,因为我用它,虽然我没有那方面的经验,但我怀疑它也做得很好,如果质量与着色相同。

相关问题