使用 Roslyn 实现新语言
Using Roslyn for a new language implementation
我正在探索如何为 .NET 平台实现 general-purpose/DSL 语言。据我所知,有几种工具可以使语言实现(解析源代码)相对容易。 Irony、Yacc、ANTLR……这些项目的问题是有些没有进化,有些生成解析器速度慢,有些不能 运行 在 .NET Core CLR 等上。总是有一些障碍促使我走向解决方案“编写自己的解析器”。
所以我想知道...... 是否可以编写我自己的解析器并 connect/integrate 使用 Roslyn? 是否有任何书籍、教程或示例如何实现完成了吗?
Roslyn 不适用于此。
您可以使用 Roslyn 做的最好的事情是在您手动解析语言后生成 C#(或 VB)语法树和编译,让 Roslyn 负责类型系统和代码生成。
只有当您的语言可以完全转换为 C#(或 VB)语法时,这才有效。
Roslyn 不允许这样做。
看看这个项目:Nitra。
它正在积极开发中。
我知道这是一个旧线程,但你最好的选择(至少在 visual studio 中)是创建一个 IVsSingleFileGenerator 将你的代码转换为 c# 或其他 Roslyn 语言。
我正在探索如何为 .NET 平台实现 general-purpose/DSL 语言。据我所知,有几种工具可以使语言实现(解析源代码)相对容易。 Irony、Yacc、ANTLR……这些项目的问题是有些没有进化,有些生成解析器速度慢,有些不能 运行 在 .NET Core CLR 等上。总是有一些障碍促使我走向解决方案“编写自己的解析器”。
所以我想知道...... 是否可以编写我自己的解析器并 connect/integrate 使用 Roslyn? 是否有任何书籍、教程或示例如何实现完成了吗?
Roslyn 不适用于此。
您可以使用 Roslyn 做的最好的事情是在您手动解析语言后生成 C#(或 VB)语法树和编译,让 Roslyn 负责类型系统和代码生成。
只有当您的语言可以完全转换为 C#(或 VB)语法时,这才有效。
Roslyn 不允许这样做。
看看这个项目:Nitra。 它正在积极开发中。
我知道这是一个旧线程,但你最好的选择(至少在 visual studio 中)是创建一个 IVsSingleFileGenerator 将你的代码转换为 c# 或其他 Roslyn 语言。