1 个不稳定版本
0.1.0 | 2021 年 9 月 9 日 |
---|
#818 在 编程语言 中
29KB
720 行
萨特科 brainfuck
萨特科是一个玩具 brainfuck 编译器。
注意:这需要在您的机器上安装 LLVM 12。
编译
萨特科将 bf 脚本(例如 hello.bf)编译成 LLVM IR。构建可执行文件的过程取决于您的开发环境。构建一个典型的 bf 程序可能看起来像这样
$ sateko hello.bf
$ llc out.ll
$ gcc out.s
$ ./a.out
关于 Brainfuck
Brainfuck 是一种图灵机模型的天赋异禀的编程语言。虽然这种语言本身非常简单,但使用它通常并不那么简单。
在概念上,运行时环境(在这种情况下为萨特科)提供了一个由字节大小的单元组成的带子,以及一组操作,这些操作可以操作这个带子。
操作
- '[' 开始循环
- ']' 结束循环
- '>' 增加带子位置
- '<' 减少带子位置
- '+' 在带子位置增加值
- '-' 在带子位置减少值
- ',' 从标准输入读取一个字节并将其存储在带子当前位置
- '.' 将当前带子位置的值写入标准输出。
循环
每次循环开始时,解释器都会检查当前位置带子上的值。如果该值是 0,则循环将终止,否则,将执行 [ 和 ] 之间的所有操作。
理由
这是一个玩具项目。我想玩玩 Rust 并做一些解析。Brainfuck 语言解析起来非常简单,执行环境中的问题也非常少。
而且,有大量的实验空间。
一些想法
- 用解析器组合器替换标记化和解析
- 编写一个可以处理除了单字符命令之外更多命令的正确解析器
- JIT brainfuck
- REPL
- 编译到汇编或字节码 // 完成
- 优化传递
- 完全构建到可执行文件
- 语言扩展
- 添加 "函数"
- 多文件程序
许可证
萨特科使用 3 条款 BSD 许可证。请参阅 LICENSE 文件。
依赖关系
~2.8–9.5MB
~82K SLoC