文章阅读目录大纲
https://github.com/dotvanilla/vanilla
在Vanilla编译器项目之中,会需要一个程序模块将VisualBasic代码进行解析为语法树。然后我们基于此语法树就可以将VisualBasic项目转换为WAST源代码,从而实现编译为WebAssembly程序了。在这个步骤之中,我们可以通过一个微软官方的Roslyn编译器平台来实现。
Roslyn项目是微软公司开源的 .NET 编译器。编译器支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。这是一个更为开放式的编译器,与以往不透明的编译过程不同,开发者可以在编译过程中访问和分析编译数据,这也是微软在 BUILD 会议上展示的“Compiler-as-a-Service”概念。
安装Roslyn编译器
我们为了可以使用Roslyn编译器平台来进行VisualBasic项目源代码的解析操作,会首先需要进行相应的nuget程序包的安装。我们在这里只需要安装两个nuget程序包即可:
- Microsoft.CodeAnalysis.Common
- Microsoft.CodeAnalysis.VisualBasic
上面的两个nuget程序包仅仅是针对于.net core平台的编译器项目而言所需要安装的。对于在.NET Framework上进行Roslyn编译器开发,则会需要安装除上面的两个nuget程序包以外,还有一些更多的符加的程序包。例如MSBuild的nuget程序包等。
编号为Microsoft.CodeAnalysis.VisualBasic的nuget程序包是我们在这个WebAssembly编译器项目中进行VisualBasic代码的语法解析分析所必须的。而Microsoft.CodeAnalysis.Common则是对应的依赖项模块。
解析VisualBasic源代码文件
通过Roslyn编译器平台解析VisualBasic源代码文件是非常简单的,我们只需要调用一个API函数即可完成。例如,在vanilla编译器平台之中,将VisualBasic源代码解析为模块,可以通过下面的代码来实现:
Private Function GetCodeModules(vb As [Variant](Of FileInfo, String), [global] As ProjectEnvironment) As ModuleBlockSyntax()
Dim syntax As CompilationUnitSyntax = VisualBasicSyntaxTree _
.ParseText(vb.SolveStream) _
.GetRoot
Dim modules As ModuleBlockSyntax() = syntax.Members _
.OfType(Of ModuleBlockSyntax) _
.ToArray
Return modules
End Function
基于所解析得到的
列表,我们就可以用来生成对应的WebAssembly程序集模块了。ModuleBlockSyntax
- 【MZKit】简单自动化组织分区 - 2023年11月5日
- 【MZKit教程】质谱成像原始数据文件查看 - 2023年6月29日
- 生物序列图嵌入算法 - 2023年6月29日
One response
[…] Roslyn编译器开发 […]