估计阅读时长: 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程序集模块了。

谢桂纲

Attachments

Sort by:DefaultDateName

Leave a Reply

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

博客文章
November 2026
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930  
  1. 代谢组学那堆名词我上次查资料时也手抄过一页,QC 样本、保留时间、m/z 这些混在一张表里,来回对照着看特别费劲。你这篇把英文缩写和中文解释排在一起,省了我不少翻文献的功夫,尤其是代谢物鉴定那几段。

  2. 文中提出的"能否基于单细胞数据分析方法来分析和可视化我的基因组功能嵌入的结果矩阵呢?"让我想到一个需要先厘清的问题:把Family层级的分类当作细胞分群标签时,功能相似性与亲缘关系可能会混在一起,图上的聚集未必能直接解释为代谢功能接近。如果借用单细胞分析中的降维流程,是否可以同时标注物种分类和基因组注释完整度,看看分离主要对应哪一种差异?尤其是这里用的是EC注释的TF-IDF矩阵,缺少某项注释究竟代表功能缺失还是未被识别,也可能影响对分群结果的判断。

  3. Greetings! I stumbled upon this really useful site and figured I'd thanks for you post at here.