7

我有一个定义 DSL(领域特定语言)的 ANTLR 语法。这个语法比较简单。它正在解析语言并输出 C 代码以创建一个非常基本的翻译器。

该语言旨在用于 C# 应用程序(输入某种控件,无论是 RichTextBox 还是自定义控件),并且一个要求是该语言的语法突出显示。我搜索了互联网,希望能找到一些关于如何完成此任务的信息,或者找到一种工具来让我自己更轻松一些。

在没有找到太多信息之后,我最好的假设是我需要使用 ANTLR 生成的词法分析器来查看标记并相应地为它们着色。这是正确的行动路径,还是有其他方法/工具可以为自定义域特定语言提供语法突出显示?如果这是正确的方法,我该如何识别特定的令牌?

如果我遗漏了任何重要信息,请询问!谢谢!

4

2 回答 2

4

我成功地将AvalonEdit用于我的一个类似项目。我刚刚创建了一个带有正确语法突出显示的小编辑器。

在您的项目中启动和运行它非常简单快捷。您只需为其提供一个简单的 XML 文件来记录您的 DSL 的语法,并且您将拥有一个开箱即用的彩色输出作为 WPF 控件。

自从我使用以来,他们似乎增加了完成设施,虽然我没有这方面的经验,但我怀疑如果质量与着色相同,它也做得很好。

于 2012-12-14T20:09:03.427 回答
3

该语言旨在用于 C# 应用程序(输入某种控件,无论是 RichTextBox 还是自定义控件),并且一个要求是该语言的语法突出显示。

考虑使用Scintilla进行控制。它是用于 IDE 样式文本编辑的文本控件。Notepad++使用它来进行文本控制,就像它起源的 SciTE IDE 一样。我在一个用 C# 编写的小型自定义 IDE 项目中使用了它,使用了一个非官方的 .NET 特定版本——我认为它是ScintillaNET

Scintilla 支持自定义关键字突出显示以及各种可编程功能,如波浪线下划线等。


如果您有一个更喜欢使用的控件,我认为使用小型 ANTLR 词法分析器为您生成标记是合理的。每个标记都包含行号、起始字符位置、源文本和标记类型——您需要知道要突出显示什么以及如何突出显示的所有内容。每次更改文本时,唯一的麻烦就是通过词法分析器运行文本。有一些有效的方法可以做到这一点,而无需重新分析整个文档,但仍然需要牢记这一点。

于 2012-12-14T19:44:52.030 回答