BrainFuckFlow 是一个基于 Rust 的 BrainFuck 工具链,包含一个高性能解释器和一个能够将类汇编语言 (ASM) 编译为 BrainFuck 代码的编译器。
- BrainFuck 解释器: 支持标准 BrainFuck 语法,优化了 I/O 处理。
- 动态内存管理: 解释器支持动态内存扩容(默认最大 1GB),不再受固定内存大小限制。
- 实时调试服务器: 在运行时提供 HTTP 调试接口,可以实时查看内存状态、程序计数器、正在执行的指令等。
- ASM 编译器: 支持变量、算术运算、条件跳转等高级特性,自动生成 BrainFuck 代码。
- 测试套件: 包含完整的集成测试框架,支持
.bf和.asm文件的自动化测试。
确保你已经安装了 Rust。
git clone https://github.com/your-username/bf_flow.git
cd bf_flow
cargo build --release# 基础运行
cargo run -- run path/to/script.bf
# 带调试功能(提供源 ASM 文件)
cargo run -- run output.bf source.asm运行时会自动启动调试服务器在 http://localhost:8000/debug。
# 将 ASM 编译为 BF
cargo run -- compile path/to/source.asm > output.bf
# 运行生成的 BF(自动查找同名 .asm 文件用于调试)
cargo run -- run output.bf运行程序时,调试服务器会在后台启动。在另一个终端中查询状态:
curl http://localhost:8000/debug返回 JSON 格式的调试信息:
{
"memory_pointer": 32,
"bf_pc": 1523,
"vm_pc": 5,
"reserved_memory": [0, 0, 0, 5, 1, ...],
"asm_instruction": "ADD 0, #1"
}字段说明:
memory_pointer: 当前数据指针位置bf_pc: BrainFuck 代码执行位置vm_pc: 虚拟机程序计数器(对应 ASM 指令索引)reserved_memory: 前 256 字节内存快照(包含虚拟机寄存器)asm_instruction: 当前执行的 ASM 指令(如果提供了源文件)
在 tests/asm/ 目录下可以找到更多示例。
循环打印 A, B, C:
MOV 0, #3 ; 计数器
MOV 1, #65 ; 'A'
LOOP:
OUT 1
ADD 1, #1
SUB 0, #1
JNZ LOOP
HLT解释器默认初始化 30,000 字节内存,但会根据程序需求自动扩容:
- 当指针移动超出当前内存边界时自动扩容(翻倍策略)
- 默认最大内存限制:1GB
- 超过限制时程序会抛出错误
调试服务器提供以下端点:
GET /debug
- 获取当前解释器状态
- 返回内存快照、寄存器、PC、当前指令等信息
- 支持 CORS,可从浏览器访问
运行所有集成测试:
cargo test注意:某些测试(如 squares 和 fibonacci)由于算法复杂度较高,可能需要较长时间运行。