估计阅读时长: 2 分钟

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 谢桂纲 (see all)

Attachments

Leave a Reply

Your email address will not be published. Required fields are marked *

博客文章
December 2024
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031  
  1. 在mysql之中,针对24小时内的数据按照半个小时进行一次统计数量: ```sql SELECT DATE_FORMAT(FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(add_time) / 1800) * 1800), '%Y-%m-%d %H:%i') AS half_hour, COUNT(*) AS count FROM user_track.page_view WHERE add_time >=…

  2. 针对图对象进行向量化表示嵌入: 首先,通过node2vec方法,将node表示为向量 第二步,针对node向量矩阵,进行umap降维计算,对node进行排序,生成node排序序列 第三步,针对node排序序列进行SGT序列图嵌入,实现将网络图对象嵌入为一维向量