Skip to content

yxw007/vb2js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Visual basic convert JavaScript

将 VB/VBA 风格代码转换成 JavaScript 的转换器(Transpiler)。

重要说明:当前实现的是「VB 语法子集」的转换器(MVP),并不是完整 VB 编译器。 你的文档思路(lexer -> parser -> AST -> generator -> CLI)完全正确; 只是“根据 VB 文法”这句话如果理解成“覆盖全部 VB 语法”,工作量会非常大,所以我在项目里先把“支持范围”写死并明确出来,避免误解。

输入

  • VB 代码入口文件(.vb 文本)

输出

  • 生成的 JS 代码(.js 文件)

当前支持的 VB 语法子集

  • 注释:' commentRem comment
  • 声明:Dim a, bConst X = exprAs Type 目前只解析不影响输出)
  • 过程:Sub Name(...) ... End Sub
  • 函数:Function Name(...) ... End Function
    • 支持 VB 的“给函数名赋值当返回值”:Name = expr 会被转成 return expr;
    • 支持 Exit Sub / Exit Function -> return;
  • 条件:
    • 多行块:If expr Then ... [Else ...] End If
  • 循环:
    • For i = start To end [Step step] ... Next [i](按 VB 的“包含 end”语义生成 JS)
    • While expr ... Wend
  • 表达式(子集):
    • 字面量:数字、字符串(VB 的 "" 转义)、True/FalseNothing
    • 运算符:+ - * /、比较 = <> < <= > >=、逻辑 And Or Not、字符串拼接 &
    • 函数调用:Foo(a, b)Call Foo(a, b)

不在支持范围(后续可加):ElseIf、单行 If、Select CaseDo ... Loop、数组/对象、成员访问 ., With、类型/模块/Class 等。

实现说明

  • 词法分析器:识别 token(见 src/lexer.js
  • 语法分析器:自顶向下(递归下降 + Pratt 表达式解析)生成 AST(见 src/parser.js
  • 代码生成:根据 AST 生成 JS(见 src/generator.js

CLI 使用

需要 Node.js >= 18。

运行示例:

  • npm test
  • node bin/vb2js.js examples/hello.vb -o examples/hello.js

调试:

  • node bin/vb2js.js examples/hello.vb --tokens
  • node bin/vb2js.js examples/hello.vb --ast

实现工具(参考)

  • VB AST Explorer / AST Explorer 的思路是对的:先能看到 AST,再逐步扩语法覆盖面。

About

VB/VBA Convert JavaScript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors