估计阅读时长: 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

Leave a Reply

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

博客文章
December 2025
S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031  
  1. 谢博,您好。阅读了您的博客文章非常受启发!这个基于k-mer数据库的过滤框架,其核心是一个“污染源数据库”和一个“基于覆盖度的决策引擎”。这意味着它的应用远不止于去除宿主reads。 我们可以轻松地将它扩展到其他场景: 例如去除PhiX测序对照:建一个PhiX的k-mer库,可以快速剔除Illumina测序中常见的对照序列。 例如去除常见实验室污染物:比如大肠杆菌、酵母等,建一个联合的污染物k-mer库,可以有效提升样本的纯净度。 例如还可以靶向序列富集:反过来想,如果我们建立一个目标物种(比如某种病原体)的k-mer库,然后用这个算法去“保留”而不是“去除”匹配的reads,这不就实现了一个超快速的靶向序列富集工具吗? 这中基于kmer算法的通用性和扩展性可能会是它的亮点之一。感谢博主提供了这样一个优秀的思想原型

  2. WOW, display an image on a char only console this is really cool, I like this post because so much…

  3. 确实少有, 这么高质量的内容。谢谢作者。;-) 我很乐意阅读 你的这个技术博客网站。关于旅行者上的金唱片对外星朋友的美好愿望,和那个时代科技条件限制下人们做出的努力,激励人心。