#brainfuck-compiler #brainfuck #toy #compiler

app 萨特科

一个玩具 brainfuck 编译器

1 个不稳定版本

0.1.0 2021 年 9 月 9 日

#818编程语言

BSD-3-Clause

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