← 都来码← 文档索引BASIC原文English

BASIC

老式写法,命令式一行一行往下走。

在手机上怎么跑

vml run examples/basic/test/sysinfo.bas

编译要等一会儿(C 那种要一两分钟,脚本类语言几秒)。程序跑起来后屏幕底部就是手柄,方向键 + 四个动作键都在;点右上角返回可以回到命令行。

写法要点

示例

文件演示什么
app/blackjack.bas21 点(轮询式消息循环 + 振动)
app/gorilla.bas猴子扔香蕉(完整游戏 + 音效)
app/gorilla_pro.bas同上,加了渐变 / 路径 / 图块
app/hammurabi.bas汉谟拉比(回合制经营)
app/hurkle.bas老式打字机式文本程序(内联了 _tty.bas)
app/lander.bas登月舱
app/nibbles.bas贪吃蛇
app/tetris.bas俄罗斯方块(网格 + 手柄)
app/whack.bas打地鼠(随机数 + 定时器 + 振动)
bgi/demo_bgi.bas图形语句逐条演示
bgi/gfx_demo.bas同上
bgi/gfx_modes.bas各 SCREEN 模式的分辨率
test/sysinfo.bas设备信息
tty/demo_tty.bas文本模式(ANSI 彩色)
ui/demo_ui.bas开窗 / 画图 / 消息循环的最小骨架

同目录还有:CREDITS.md、app/calendar.bas、app/donkey.bas、app/notepad.bas、app/stock.bas、app/weather.bas、demo/demo_std.bas、test/libs.bas、thirdparty/LICENSES.txt、thirdparty/bouncing_ball.bas、thirdparty/dosbism.bas、thirdparty/dosbismkey.bas、thirdparty/doscolortst.bas、thirdparty/dosgrbism.bas、thirdparty/dosgrdemo.bas、thirdparty/dosmathtbl.bas、thirdparty/dosrandom.bas、thirdparty/ex_calc.bas、thirdparty/ex_message.bas、thirdparty/ex_numgame.bas、thirdparty/ex_print.bas、thirdparty/ex_rnddots.bas、thirdparty/futureblocks_tetris.bas、thirdparty/gwiezdna_bitwa.bas、thirdparty/maze.bas、thirdparty/qbjc_guess.bas、thirdparty/qbjs_paint.bas、thirdparty/qtrek.bas、thirdparty/solitaire.bas、thirdparty/turtle.bas、thirdparty/w84d_app_template.bas、thirdparty/w84d_desert_rally.bas、thirdparty/w84d_mouse_cursor.bas、thirdparty/w84d_radar.bas、thirdparty/w84d_spaceship.bas

实测踩过的坑


下面的内容是从 VML 源码里直接带的(third_party/vml/VMLPrepares/BasicCompiler/): README 讲这个前端支持什么、怎么编;语言规范 讲语法本身。上游一改,这里重新生成就是最新的。

语言规范

BASIC 语言编译器规范说明

版本:v2.1 | 日期:2026-08-01 | 修订者:深圳市探索智能科技有限公司 更新: v1.66.33 — 全方言 ≥90% + CLASS/OOP + GPIO + 140 条关键字(实测,v0.96.506)

规范标准

字段值
目标标准QBasic (默认) + 9 种方言(共 10 个 BasicDialect 成员,见 VMLPlugins/CompilerOptions.cs), 全部 ≥90% 完成度
CLI 选项--basictype qbasic|turbobasic|freebasic|truebasic|purebasic|chipbasic|minibasic
完成度92% (QBasic), 90% (全部方言)
测试63 通过 (Lang_BASIC) + 22 方言测试
Token 总数140 条关键字(实测,v0.96.506), 171 个 TokenType(实测,v0.96.506)

多方言关键字集合

BASIC 编译器通过 --basictype 选项支持 10 种方言。下方列出每种方言的关键字差异。

1. QBasic (默认) — __QBASIC__

Microsoft QBasic/QuickBASIC 兼容。所有后续方言以此为基础。

独有关键字 (14): PSET, CIRCLE, PAINT, DRAW, VIEW, WINDOW, PALETTE, SCREEN, LPRINT, PRINT USING, FREEFILE, ON ERROR, RESUME, DEF FN

适用场景: DOS 时代 QBasic 程序、QuickBASIC 游戏 (GORILLAS/NIBBLES)


2. TurboBasic — __TURBOBASIC__

Borland Turbo Basic 兼容。

QBasic 基础上新增 (6): EXIT, DO, LOOP, UNTIL, CASE ELSE, FUNCTION

移除 (与 QBasic 差异) (8): PSET, CIRCLE, PAINT, DRAW, VIEW, WINDOW, PALETTE, SCREEN

适用场景: 科学计算、结构化 BASIC 程序


3. FreeBasic — __FREEBASIC__

开源跨平台 BASIC 编译器兼容。

QBasic 基础上新增 (12): PTR, CAST, CPTR, ANY, EXTENDS, OPERATOR, PROPERTY, ENUM, NAMESPACE, USING, DESTRUCTOR, CONSTRUCTOR

移除 (与 QBasic 差异) (6): LPRINT, PRINT USING, PSET, CIRCLE, DRAW, PALETTE

适用场景: 现代开源 BASIC 项目、跨平台开发


4. TrueBasic — __TRUEBASIC__

ANSI/ISO 标准 BASIC。

QBasic 基础上新增 (4): MAT, ZER, CON, SOUND

移除 (与 QBasic 差异) (12): SELECT, CASE, IS, ELSEIF, DO, LOOP, EXIT, GOSUB, PEEK, POKE, LPRINT, ON ERROR

适用场景: 教育、标准兼容程序


5. PureBasic — __PUREBASIC__

PureBasic 兼容。

QBasic 基础上新增 (8): PROCEDURE, ENDPROCEDURE, PROTECTED, GLOBAL, THREADED, INTERFACE, ENDINTERFACE, NEW

移除 (与 QBasic 差异) (10): GOSUB, RETURN, LPRINT, PSET, CIRCLE, DRAW, VIEW, WINDOW, PALETTE, DEF FN

适用场景: 游戏开发、GUI 应用


6. ChipBasic — __CHIPBASIC__

MCU 优化方言。

QBasic 基础上新增 (3): PINMODE, DIGITALWRITE, DIGITALREAD

移除 (与 QBasic 差异) (15): SCREEN, PSET, LINE, CIRCLE, PAINT, DRAW, VIEW, WINDOW, PALETTE, LPRINT, PRINT USING, FREEFILE, ON ERROR, RESUME, CHIPASM

适用场景: 嵌入式 MCU (Arduino/STM32)、IoT 设备


7. MiniBasic — __MINIBASIC__

最小子集 — 教学/资源受限环境。

QBasic 基础上新增 (0): 无新增。

移除 (与 QBasic 差异) (20): TYPE, DIM, REDIM, ERASE, SWAP, SHARED, COMMON, SELECT, CASE, DO, LOOP, EXIT, GOSUB, GOTO, CALL, LPRINT, PRINT USING, PSET, CIRCLE, DRAW

保留关键字 (仅 15): PRINT, INPUT, IF, THEN, ELSE, FOR, NEXT, WHILE, WEND, LET, REM, DIM(简化), END, GOTO(简化), GOSUB(简化)

适用场景: 教学、微控制器引导程序


方言关键字对比总表
类别QBasicTurboBasicFreeBasicTrueBasicPureBasicChipBasicMiniBasic
关键字总数~70~68~76~62~68~57~15
完成度92%90%90%90%90%90%90%
图形✅❌❌❌❌❌❌
OOP❌❌✅❌✅❌❌
MCU GPIO❌❌❌❌❌✅❌
行号✅✅✅✅❌✅可选
GOSUB✅✅✅❌❌✅简化

QBasic 关键字完整列表 (按类别)

控制流 (14)

IF, THEN, ELSE, ELSEIF, END, END IF, SELECT, CASE, IS, TO, FOR, STEP, NEXT, WHILE, WEND, DO, LOOP, UNTIL, EXIT, GOTO, GOSUB, RETURN

子程序/函数 (7)

SUB, FUNCTION, CALL, BYVAL, BYREF, DECLARE, DEF FN

变量/数据 (12)

LET, DIM, SWAP, ERASE, REDIM, PRESERVE, LOCAL, STATIC, SHARED, COMMON, CONST, TYPE

I/O (8)

PRINT, INPUT, LPRINT, PRINT USING, OPEN, CLOSE, AS, FREEFILE

图形 (17)

SCREEN, PSET, LINE, CIRCLE, PAINT, DRAW, COLOR, LOCATE, CLS, VIEW, WINDOW, PALETTE, GET, PUT, WIDTH, BEEP

函数 (20+)

ABS, SGN, SQR, INT, FIX, SIN, COS, TAN, EXP, LOG, ATN, RND, RANDOMIZE, TIMER, DATE$, TIME$, PEEK, POKE, INKEY$, KBGETCH, KBHIT, MOUSEGETX, MOUSEGETY, MOUSELEFT, MOUSERIGHT, LEN, CHR$, ASC, STR$, VAL, LEFT$, RIGHT$, MID$, exit

其它 (9)

REM, DATA, READ, RESTORE, SLEEP, SYSTEM, ON ERROR, RESUME, CHIPASM, ASM

运算符完整列表 (优先级从高到低)

优先级运算符Token说明
1^EXPONENT指数
2- (一元)MINUS负号
3* /MULTIPLY, DIVIDE乘除
4+ -PLUS, MINUS加减
5= < > <= >= <>EQUALS, LESS, GREATER, LESS_EQUAL, GREATER_EQUAL, NOT_EQUAL关系
6NOTNOT逻辑非
7ANDAND逻辑与
8OROR逻辑或

分隔符

符号Token用途
,COMMA参数/分栏分隔
;SEMICOLONPRINT 不换行
:COLON多语句分隔
.DOT成员访问
"QUOTE字符串定界
( )LPAREN, RPAREN函数/数组括号
#HASH文件号前缀

3. 语句参考

3.1 基本 I/O
' PRINT — 输出到控制台
PRINT "Hello"       ' 字符串
PRINT 42            ' 数字
PRINT A; B;         ' 分号不换行
PRINT A, B          ' 逗号分栏
PRINT               ' 空行

' INPUT — 键盘输入
INPUT "prompt: ", X
INPUT A, B, C
INPUT A$

' LPRINT — 打印机输出
LPRINT "Hello"

PRINT 输出目标规则

PRINT 的输出目标由 SCREEN 模式决定:

模式控制台输出内存输出说明
默认(无 SCREEN)✅❌仅输出到控制台终端
SCREEN 0(文本模式)✅✅ 0xB8000控制台 + VGA 文本显存同时输出
SCREEN N>0(图形模式)❌✅ VGA 帧缓冲仅渲染到 VGA 图形帧缓冲,控制台不输出

具体机制:

3.2 变量操作
' LET (可省略)
LET A = 42
B = A + 10

' SWAP — 变量交换
SWAP A, B

' ERASE — 清除数组
ERASE ArrayName

' DIM — 数组声明
DIM A(10)           ' 一维
DIM B(5, 5)         ' 二维
DIM C(3, 3, 3)      ' 三维
DIM S$(10)          ' 字符串数组
3.3 控制流
' IF
IF condition THEN
    ...
ELSEIF condition THEN
    ...
ELSE
    ...
END IF

' 单行 IF
IF X > 10 THEN PRINT "Big" ELSE PRINT "Small"

' FOR
FOR I = 1 TO 10 STEP 2
    PRINT I
NEXT I

' WHILE
WHILE A > 0
    A = A - 1
WEND

' DO
DO
    EXIT DO
LOOP WHILE A > 0

DO WHILE A > 0
    EXIT DO
LOOP

DO
LOOP UNTIL A > 0

' SELECT CASE
SELECT CASE X
    CASE 1
        PRINT "One"
    CASE 2 TO 5
        PRINT "Two to Five"
    CASE IS > 10
        PRINT "Big"
    CASE ELSE
        PRINT "Other"
END SELECT

' GOTO / GOSUB
GOTO label
GOSUB subroutine
RETURN

' EXIT
EXIT FOR
EXIT DO
EXIT WHILE
EXIT SUB
EXIT FUNCTION
3.4 子程序与函数
SUB MySub(param1, BYREF param2)
    LOCALVAR = param1
    param2 = 99
END SUB

FUNCTION Add(a, b)
    Add = a + b
END FUNCTION

CALL MySub(x, y)
result = Add(5, 3)
3.5 图形 (标准 QBASIC 语法)
SCREEN 9              ' 设置图形模式
WIDTH 80, 25          ' 设置文本尺寸
COLOR 7, 0            ' 前景色, 背景色
CLS                   ' 清屏
LOCATE 10, 20         ' 光标定位

PSET (100, 150), 4    ' 画点 (x, y), 颜色索引
LINE (0,0)-(100,100), 2                    ' 画线
LINE (0,0)-(100,100), 2, B                 ' 矩形边框
LINE (0,0)-(100,100), 2, BF                ' 填充矩形
CIRCLE (160,120), 50, 3                    ' 画圆
PAINT (160,120), 4, 3                      ' 填充

' 图形字符串宏 (DRAW)
DRAW "U10 R20 D10 L20"                     ' 绘图字符串

SCREEN 模式对 PRINT 的影响 SCREEN 语句切换显示模式,PRINT 输出到控制台。

3.6 VML 扩展图形
VGAPUTPIXEL x, y, r, g, b      ' 24位彩色画点
VGADRAWLINE x1,y1,x2,y2,r,g,b   ' 彩色画线
VGADRAWCIRCLE x,y,radius,r,g,b  ' 彩色画圆
VGAFILLCIRCLE x,y,radius,r,g,b  ' 彩色填充圆
VGADRAWRECT x,y,w,h,r,g,b       ' 彩色矩形边框
' 字符串
LEN(s$), CHR$(n), ASC(s$), STR$(n), VAL(s$)
LEFT$(s$, n), RIGHT$(s$, n), MID$(s$, start, len)

' 随机
RND(n)
RANDOMIZE [TIMER]

' 内存
PEEK(addr)
POKE addr, value

' 时间
TIMER, DATE$, TIME$

' 检测
KBGETCH(), KBHIT()
MOUSEGETX(), MOUSEGETY(), MOUSELEFT(), MOUSERIGHT()
VGAGETPIXEL(x,y), VGAGETWIDTH(), VGAGETHEIGHT()
3.7 文件操作
OPEN "file.txt" FOR INPUT AS #1
OPEN "file.txt" FOR OUTPUT AS #2
INPUT #1, X
PRINT #2, "Hello"
CLOSE #1
3.9 音频
' PLAY — 音乐字符串播放
PLAY "C D E F G A B"
PLAY "O3 L4 CDEFGAB"

' SOUND — 频率/持续时间
SOUND 440, 18         ' 频率(Hz), 持续时间(1/18秒)

' BEEP — 系统蜂鸣
BEEP
3.10 错误处理
' ON ERROR GOTO — 运行时错误处理
ON ERROR GOTO ErrorHandler
    ... 正常代码 ...
    EXIT SUB

ErrorHandler:
    PRINT "错误: "; ERR
    RESUME NEXT
3.11 数据类型与结构
' CONST — 常量定义
CONST PI = 3.14159
CONST MAX_ROWS = 25

' TYPE / END TYPE — 自定义类型
TYPE Point
    X AS INTEGER
    Y AS INTEGER
END TYPE

' 自定义类型使用
DIM P AS Point
P.X = 10
P.Y = 20

' DATA/READ/RESTORE — 内嵌数据
DATA 1, 2, 3, 4, 5
FOR I = 1 TO 5
    READ X
    PRINT X
NEXT
RESTORE

' DEF FN — 单行自定义函数
DEF FNAdd(a, b) = a + b
PRINT FNAdd(3, 5)

' COMMON — 模块共享变量
COMMON SHARED Score, Lives

' REDIM/PRESERVE — 动态数组重定义
DIM A(10)
REDIM A(20)
REDIM PRESERVE A(30)    ' 保留原有数据
3.12 其他
SLEEP [seconds]     ' 暂停
SWAP A, B           ' 变量交换
ERASE ArrayName     ' 清除数组
SYSTEM              ' 退出程序
exit(code)          ' 退出并返回code给系统 (SYSCALL 3)
END                 ' 程序结束
DEFINT A-C          ' 类型声明 (兼容)
DEFSNG D-F
DEFSTR S

' OPTION BASE — 数组下标起始
OPTION BASE 0       ' 数组从0开始 (默认)
OPTION BASE 1       ' 数组从1开始

' INKEY$ — 无阻塞按键检测
K$ = INKEY$
IF K$ <> "" THEN PRINT "Key: "; K$

' DECLARE — 前置声明子程序
DECLARE SUB MySub(x)
DECLARE FUNCTION MyFunc(x, y)

' LOCAL / STATIC / SHARED / COMMON
SUB MyProc()
    LOCAL temp        ' 局部变量
    STATIC count      ' 静态变量 (持久)
    SHARED globalVar  ' 共享变量
END SUB
COMMON SHARED Score, Lives  ' 模块共享
3.13 调用约定与内联汇编
' __stdcall 调用约定 — 参数全部栈传递,被调用者清理
SUB MyFunc STDCALL(a, b)
    MyFunc = a + b
END SUB

' ASM — 内联 VML 汇编
ASM "MOVE R0, #42"
ASM "SYSCALL #4"

' CHIPASM — 内联目标架构汇编 (6502/Z80/8051 等)
CHIPASM "LDA #$42"
CHIPASM "STA $0400"
3.14 高级图形 (GET/PUT/PALETTE/VIEW/WINDOW)
' PALETTE — 设置调色板颜色 (SCREEN 13 模式)
PALETTE 0, 0, 0, 0         ' 索引0=黑色
PALETTE 1, 63, 0, 0        ' 索引1=红色
PALETTE 2, 0, 63, 0        ' 索引2=绿色

' GET — 保存屏幕区域到数组
DIM buffer(200)
CIRCLE (50,50), 10, 2
GET (40,40)-(60,60), buffer

' PUT — 从数组恢复屏幕区域
PUT (100,100), buffer       ' 直接覆盖
PUT (100,100), buffer, 1    ' XOR 模式

' VIEW — 设置图形视口
VIEW (10,10)-(200,100)       ' 视口区域
VIEW (10,10)-(200,100), 2, 4 ' 带颜色边框

' WINDOW — 设置逻辑坐标系统
WINDOW (0,0)-(1,1)           ' 逻辑坐标 0-1
CIRCLE (0.5,0.5), 0.3       ' 在逻辑坐标中绘制
3.15 PRINT USING — 格式化输出
PRINT USING "###.##"; 12.345     ' 输出: 12.35
PRINT USING "####"; 42            ' 输出:   42
PRINT USING "$$###.##"; 12.3     ' 输出: $ 12.30

4. 与标准 QBASIC 的差异

不支持的特性
扩展特性

浮点与64位编译模式

VML 工具链通过三个编译参数控制浮点和 64 位整数的处理策略:

参数可选值默认值说明
--float32hard / soft / nonehard32位浮点 (SINGLE/!) 处理模式
--float64hard / soft / nonesoft64位浮点 (DOUBLE/#) 处理模式
--int64hard / soft / nonesoft64位整数处理模式
32位浮点 (float32)

本语言中的 32 位单精度浮点类型 SINGLE / ! 按以下模式编译:

64位浮点 (double)

本语言中的 64 位双精度浮点类型 DOUBLE / # 按以下模式编译:

64位整数 (int64)

64 位整数类型在本语言中由 VML 编译层支持,BASIC 标准中未定义对应的显式类型,但编译器预留了通过 --int64 扩展支持的可能性。

软件模拟库

以上软件模拟库均位于 Lib/shared/ 目录,使用 C 语言编写并由 C 编译器编译为 VML,所有语言共享:

库文件用途核心函数
softfloat.cQ15.16 定点数 32 位浮点模拟__vml_float_add/sub/mul/div/neg/abs/cmp、__vml_int2float/float2int
softdouble.cIEEE 754 双精度 64 位浮点模拟__vml_double_add/sub/mul/div/neg/abs/cmp、__vml_int2double/double2int、__vml_float2double/double2float
softint64.c64 位整数双寄存器模拟__vml_i64_add/sub/neg/and/or/xor/not/shl/shr

5. 硬件接口

内存映射 I/O
地址用途
0x60键盘数据端口
0x64键盘状态端口
0x300-0x304鼠标 X/Y/按钮
系统调用
编号功能
1输出字符串
4输出字符
5输入字符
7输入整数
100-104设备管理
110-114文件操作
设备管理 (syscall 100-104)
100: 打开设备  R0=设备名地址 → R0=句柄
101: 关闭设备  R0=句柄
102: 读设备    R0=句柄, R1=缓冲区, R2=长度
103: 写设备    R0=句柄, R1=数据, R2=长度
104: 控制设备  R0=句柄, R1=命令, R2=数据, R3=长度

6. 编译

# 编译
dotnet run --project VMLPrepares/BasicCompiler input.bas -o output.vml

# 运行 (字符模式)
dotnet run --project VMLEmulators/ConsoleEmulator -- --run output.vml

# 运行 (VGA 模式)

# 运行 (GUI 图形模式)
dotnet run --project VMLEmulators/FullDevicesEmulator

🆕 字符串编码 (v1.65.19)

该语言编译器通过共享库 (Lib/shared/) 间接使用 VML 字符串体系。

伪指令宽度编码C 类型
.string8-bitUTF-8char*
.wstring16-bitUTF-16LEwchar_t*
.ustring32-bitUTF-32LEchar32_t*

MCU 模式 (默认): 字符串输出为 UTF-8 (.string) OS 模式: 可通过 VML_WSTRING 宏判断编码


v1.66.33 改进 (2026-08-01)

全方言 90%+ 完成度
CLASS/OOP 支持
词法分析器
预处理器
测试覆盖
已知限制

共享库已提供宽字符串转换函数 (wchar.h/uchar.h),各语言编译器可按需使用。

编译器 README

BASIC 编译器

路径: VMLPrepares/BasicCompiler/ | 版本: v1.66.33 完成度: 10方言 ≥90% | 🟢 生产可用(图形/声音/文件已通手机端) ⚠ 测试数字(78 / Lang_BASIC、VMLTests/、test/basic_examples/)是上游仓库的 —— 本仓(分家后的移动端副本)没有 VMLTests/ 与 test/ 这两个目录,那些路径与数字在这里复现不了。本仓的判据是 scripts/vml-basic-probe/(54 例 + fileio.sh 5 例)。 标准库: Lib/basic/

多方言支持

通过 --basictype 选项支持 10 种 BASIC 方言:

方言CLI 值派系完成度
QBasic (默认)qbasicMicrosoft92%
GW-BASICgwbasicMicrosoft90%
VisualBasic 6visualbasicMicrosoft90%
TurboBasicturbobasicBorland90%
PowerBASICpowerbasicBorland90%
FreeBasicfreebasic开源90%
PureBasicpurebasic商业90%
TrueBasictruebasicANSI/ISO90%
ChipBasicchipbasicMCU90%
MiniBasicminibasic教学90%
vmltool -x basic --basictype freebasic test.bas -o test.vml
vmltool -x basic --basictype gwbasic test.bas -o test.vml

关键字实现

⚠ 这里的数字此前对不上代码(README 写 81/99、同文件下面又写 116+,SPEC 又写 116/141)。按 v0.96.506 实测重算:词法表 140 条关键字、TokenType 171 个; ALL_KEYWORDS.md 那张 99 项的表按实测是 89 实现 / 10 未实现。 以 ALL_KEYWORDS.md 为准,它逐条标了实测状态。

完全实现
部分实现
未实现 (需类型系统)

方言特有功能

功能适用方言说明
CLASS/OOPFreeBasic类/构造/析构/方法/枚举
GPIOChipBasicPINMODE/DIGITALWRITE/DIGITALREAD
GLOBALPureBasic→ SHARED 映射
PROCEDUREPureBasic→ SUB 映射
ENUM 值代入FreeBasic编译时常量 (RED+GREEN=30)
NEWPureBasic→ EmitAlloc 堆分配
Private/PublicVisualBasic修饰符识别

文件结构

BasicCompiler/
├── ASTNode.cs                 # AST 节点 (实测 171 个 TokenType)
├── Lexer.cs                   # 词法分析 (实测 140 条关键字)
├── Parser.cs / Parser.*.cs    # 语法分析 (10方言支持)
├── CodeGenerator.cs / *.cs    # 代码生成 (TypedCodeGen<BasicType>)
├── BasicCompilerPlugin.cs     # 插件入口 + 编译流水线
├── TokenType.cs               # Token 类型枚举
├── BASIC_LANGUAGE_SPEC.md     # 语言规范 v2.1
├── ALL_KEYWORDS.md            # 99关键字×10方言清单
├── UNIMPLEMENTED_FEATURES.md  # 未实现特性清单
└── README.md                  # 本文件

使用

# QBasic (默认)
vmltool input.bas -o output.vml

# 指定方言
vmltool -x basic --basictype freebasic input.bas -o output.vml
vmltool -x basic --basictype visualbasic input.bas -o output.vml

# 编译 + 运行
vmltool input.bas -o output.vml && vmltool -r output.vml

测试

# 运行所有 BASIC 测试
dotnet test VMLTests/VMLTests.csproj --filter "ClassName~Lang_BASIC"

# 运行现代特性测试
dotnet test VMLTests/VMLTests.csproj --filter "ClassName~Lang_ModernFeatures"