2 releases

0.1.1 Dec 27, 2021
0.1.0 Dec 26, 2021

#9 in #transpile

MIT license

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 transpiler
  • bfcc run - a Brainfuck interpreter
  • bfcc 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:

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