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

基于所解析得到的ModuleBlockSyntax列表,我们就可以用来生成对应的WebAssembly程序集模块了。

Latest posts by xie guigang (see all)

Attachments

Leave a Reply

Your email address will not be published.