brainfuck.rs is a fast Brainfuck executor in Rust. It includes an interpreter, a Brainfuck-to-Rust transpiler, and a Brainfuck-to-C transpiler.
cargo install --git https://github.com/Someon1e/brainfuck.rs brainfuck
It works by first processing the brainfuck program into tokens. Then, the tokens are optimised into instructions (IR).
Input | Tokens | IR |
---|---|---|
++- |
Increment, Increment, Decrement | Increment(1) |
[-] |
LoopStart, Decrement, LoopEnd | SetZero |
>a>b< |
Forward, Comment, Forward, Comment, Backward | Forward(1) |
[->+>+<<] |
LoopStart, Decrement, Forward, Increment, Forward, Increment, Backward, Backward, LoopEnd | MultiplyForward(1, 1), MultiplyForward(2, 1), SetZero |
[->+++>+++++++<<] |
LoopStart, Decrement, Forward, Increment, Increment, Increment, Forward, Increment, Increment, Increment, Increment, Increment, Increment, Increment, Backward, Backward, LoopEnd | MultiplyForward(1, 3), MultiplyForward(2, 7), SetZero |
[.,] |
LoopStart, Input, Output, LoopEnd | LoopStart(4), Input, Output, LoopEnd(1) |
[>] |
LoopStart, Forward, LoopEnd | ForwardLoop(1) |
[<<] |
LoopStart, Backward, Backward, LoopEnd | BackwardLoop(2) |
Finally, the IR is interpreted or transpiled.