将 VB/VBA 风格代码转换成 JavaScript 的转换器(Transpiler)。
重要说明:当前实现的是「VB 语法子集」的转换器(MVP),并不是完整 VB 编译器。 你的文档思路(lexer -> parser -> AST -> generator -> CLI)完全正确; 只是“根据 VB 文法”这句话如果理解成“覆盖全部 VB 语法”,工作量会非常大,所以我在项目里先把“支持范围”写死并明确出来,避免误解。
- VB 代码入口文件(.vb 文本)
- 生成的 JS 代码(.js 文件)
- 注释:
' comment、Rem comment - 声明:
Dim a, b、Const X = expr(As Type目前只解析不影响输出) - 过程:
Sub Name(...) ... End Sub - 函数:
Function Name(...) ... End Function- 支持 VB 的“给函数名赋值当返回值”:
Name = expr会被转成return expr; - 支持
Exit Sub/Exit Function->return;
- 支持 VB 的“给函数名赋值当返回值”:
- 条件:
- 多行块:
If expr Then ... [Else ...] End If
- 多行块:
- 循环:
For i = start To end [Step step] ... Next [i](按 VB 的“包含 end”语义生成 JS)While expr ... Wend
- 表达式(子集):
- 字面量:数字、字符串(VB 的
""转义)、True/False、Nothing - 运算符:
+ - * /、比较= <> < <= > >=、逻辑And Or Not、字符串拼接& - 函数调用:
Foo(a, b)、Call Foo(a, b)
- 字面量:数字、字符串(VB 的
不在支持范围(后续可加):ElseIf、单行 If、Select Case、Do ... Loop、数组/对象、成员访问 ., With、类型/模块/Class 等。
- 词法分析器:识别 token(见
src/lexer.js) - 语法分析器:自顶向下(递归下降 + Pratt 表达式解析)生成 AST(见
src/parser.js) - 代码生成:根据 AST 生成 JS(见
src/generator.js)
需要 Node.js >= 18。
运行示例:
npm testnode bin/vb2js.js examples/hello.vb -o examples/hello.js
调试:
node bin/vb2js.js examples/hello.vb --tokensnode bin/vb2js.js examples/hello.vb --ast
- VB AST Explorer / AST Explorer 的思路是对的:先能看到 AST,再逐步扩语法覆盖面。