2 releases
0.1.1 | Dec 27, 2021 |
---|---|
0.1.0 | Dec 26, 2021 |
#9 in #transpile
27KB
719 lines
bfcc
A Brainfuck interpreter, transpiler and inspector written in Rust
Usage
Installation
You can install the newest published version of the binary by running:
cargo install bfcc
Commands
bfcc transpile
- a Brainfuck to C optimizing transpilerbfcc run
- a Brainfuck interpreterbfcc spy
- a runtime inspector and soon to be debugger
Optimization
During transpilation the AST gets converted into an intermediary representation that gets optimized in multiple passes.
Although I haven't tested these optimizations enough to provide any sort of guarantee, these optimizations all seem to generate functionally equivalent programs.
Implementation status
Strategy | File | |
---|---|---|
✅ | Fusing increment/decrement commands | fuse_add.rs |
✅ | Fusing movements | fuse_movements.rs |
✅ | Deferring movements | defer_movements.rs |
✅ | Unrolling zero/clear loops | unroll_zero_loops.rs |
Unrolling copy loops | ||
Unrolling multiplication loops |
All transforms can be found under src/transpiler/transforms
References
These websites have served as great references during development:
- Calmer than you are - Brainfuck optimization strategies
- Project Nayuki - Optimizing brainfuck compiler
Todo
- Start implementing optimizations
- Implement breakpoints, single stepping and register peeking in debugger
- Add a command that generates LLVM IR, and compiles to a binary
🧠 🦀
Dependencies
~3.5–5.5MB
~101K SLoC