【发布时间】:2018-04-17 03:36:21
【问题描述】:
我正在尝试制作一个突出显示多种不同语言语法的 Xamarin.Android 应用。我计划使用 ANTLR 来处理其中的大部分,但对于 C#,我想使用 Roslyn,因为它无疑会比 ANTLR 更快且错误更少。
使用 Roslyn 实现语法高亮的最佳方法是什么?为了突出 Java 语法,我采用的方法是将文本解析为解析树,并使用访问者为与每个终端关联的文本着色。你可以查看我的代码here。这对 Roslyn 来说也是一个好主意,还是 Roslyn 提供用于语法高亮的 API? (例如,Visual Studio 中语法高亮背后的代码是否存在于 dotnet/roslyn 存储库中?)我真的不想重新发明轮子,但如果必须的话,我会这样做。
编辑: 我接受了 Tamas 的回答,因为他的解决方案对我的用例来说是最实用的;我无法获得构建语义模型的完整解决方案,因此我必须自己进行一些分析。但是,如果您的应用支持更广泛的 C# 集成并且可以构建语义模型,请查看 Jonathon Marolf 的回答中使用的 Roslyn 分类 API。
【问题讨论】: