来源:AI开发日志公众号专辑「Build Your Own X With AI」
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMjg3MjE2OA==&mid=2247485952&idx=1&sn=35b23aa5271b7fde199a7d55b3ec66c1&chksm=f95c9187ce2b189179bb8e8482782af5960ed2d8fbfd58ac846005e9e58dce49d0df7ad66083#rd
BASIC 解释器
一个使用 Swift 和 SwiftUI 为 macOS 构建的全功能 BASIC 语言解释器。该解释器支持经典的 BASIC 程序,包括来自 Basic Computer Games 仓库的程序。
功能特性
支持的 BASIC 关键字
基于经典的 BASIC 语言规范:
关键字
英文
描述
LET
LET
变量赋值
IF/THEN
IF/THEN
条件执行
GOTO
GOTO
跳转到行号
GOSUB
GOSUB
调用子程序
RETURN
RETURN
从子程序返回
FOR/TO/STEP/NEXT
FOR/TO/STEP/NEXT
循环结构
输出文本
INPUT
INPUT
读取用户输入
DATA/READ/RESTORE
DATA/READ/RESTORE
数据存储和检索
DIM
DIM
定义数组维度
DEF
DEF
定义函数
REM
REM
注释
STOP/END
STOP/END
程序终止
内置函数
数学函数:
ABS(x)
- 绝对值
INT(x)
- 整数部分
SQR(x)
- 平方根
SIN(x)
, COS(x), TAN(x), ATN(x) - 三角函数
EXP(x)
, LOG(x) - 指数和对数
RND
- 随机数 (0-1)
字符串函数:
LEN(s$)
- 字符串长度
VAL(s$)
- 将字符串转换为数字
STR$(n)
- 将数字转换为字符串
LEFT$(s$, n)
- 左子字符串
RIGHT$(s$, n)
- 右子字符串
MID$(s$, start, len)
- 中间子字符串
TAB(n)
- 间距
项目结构
BASIC/
├── BASIC/
│ ├── BASICToken.swift # 令牌定义
│ ├── BASICLexer.swift # 词法分析器
│ ├── BASICAST.swift # AST 节点和表达式
│ ├── BASICParser.swift # 语法解析器
│ ├── BASICContext.swift # 运行时上下文
│ ├── BASICInterpreter.swift # 主解释器
│ ├── FileLoader.swift # 文件 I/O 和示例
│ ├── ContentView.swift # SwiftUI 界面
│ └── BASICApp.swift # 应用程序入口点
构建和运行
从 Xcode:
在 Xcode 中打开 BASIC.xcodeproj
按 Cmd+R 构建和运行
解释器窗口将显示代码编辑器和输出面板
从命令行:
cd BASIC
xcodebuild -project BASIC.xcodeproj -scheme BASIC -configuration Debug build
open Build/Products/Debug/BASIC.app
使用方法
运行程序:
在左侧编辑器面板中输入或粘贴 BASIC 代码
点击 “Run” 按钮或按 Cmd+R
输出显示在右侧面板中
对于 INPUT 语句,底部将出现一个输入字段
示例程序:
点击 “Samples” 按钮加载预设的示例程序
示例包括:猜数字游戏、倒计时、计算器等
加载文件:
点击 “Open” 从磁盘加载 .BAS 文件
支持标准文本编码 (UTF-8/ASCII)
示例程序:
10 REM 猜数字游戏
20 PRINT”我想了一个 1 到 100 之间的数字”
30 LET N = INT(RND * 100) + 1
40 LET G = 0
50 INPUT”你的猜测”; G
60 IF G = N THENGOTO100
70 IF G < N THENPRINT”太小了!”
80 IF G > N THENPRINT”太大了!”
90 GOTO50
100 PRINT”正确! 你猜对了!”
110 END
架构
解释器流程:
词法分析器
(BASICLexer.swift):将输入文本标记化
语法解析器
(BASICParser.swift):构建抽象语法树
上下文
(BASICContext.swift):管理运行时状态
解释器
(BASICInterpreter.swift):执行解析后的程序
关键组件:
令牌类型
:关键字、运算符、字面量、标识符
表达式求值
:支持算术、逻辑和字符串操作
语句执行
:所有标准 BASIC 语句
控制流
:GOTO、GOSUB/RETURN、FOR/NEXT 循环
变量存储
:数字和带 $ 后缀的字符串
数组支持
:通过 DIM 实现多维数组
运行 basic-computer-games 中的程序
解释器与许多经典 BASIC 程序兼容。要运行仓库中的程序:
从 basic-computer-games 下载 .BAS 文件
某些程序可能需要轻微修改以确保兼容性:
如果出现问题,从 REM 语句中删除行号
确保 INPUT 提示正确引用
检查 PRINT 语句是否使用分号进行适当间距
键盘快捷键
Cmd+R
- 运行程序
Enter
- 提交输入(当输入字段处于活动状态时)
系统要求
macOS 26.0 或更高版本
Xcode 26.0 或更高版本用于构建
Swift 5.0
许可证
作为教育项目创建,用于实现 BASIC 编程语言。