首页 文章

ANTLR语法在Visual Studio中突出显示DSL

提问于
浏览
7

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

这种语言用于C#应用程序(键入某种控件,无论是RichTextBox还是自定义控件),一种要求是为此语言提供语法高亮显示 . 我已经浏览了互联网,希望能找到关于如何实现这一目标的某种信息,或者找到一种工具来让自己变得更容易 .

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

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

2 回答

  • 3

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

    考虑使用Scintilla作为您的控件 . 它是IDE样式文本编辑的文本控件 . Notepad++将其用于文本控制,它来自的SciTE IDE也是如此 . 我在一个用C#编写的小型自定义IDE项目中使用它,使用非官方的.NET特定版本 - 我认为它是ScintillaNET .

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


    如果你有一个你宁愿使用的控件,我认为使用一个小的ANTLR词法分析器来为你生成令牌是合理的 . 每个令牌都包含行号,起始字符位置,源文本和令牌类型 - 您需要知道要突出显示的内容以及如何突出显示的内容 . 每次更改文本时,唯一的麻烦就是通过词法分析器运行文本 . 有效的方法可以在不重新整理整个文档的情况下实现这一点,但仍需记住这一点 .

  • 4

    我成功地将AvalonEdit用于我的类似项目 . 我刚刚用正确的语法高亮创建了一个小编辑器 .

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

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

相关问题