bfcc

Crates.iobfcc
lib.rsbfcc
version0.1.1
sourcesrc
created_at2021-12-26 20:11:22.24298
updated_at2021-12-27 23:57:16.503734
descriptionA brainfuck toolchain
homepage
repository
max_upload_size
id503435
size53,486
Valtýr Örn Kjartansson (valtyr)

documentation

README

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

🧠 🦀

Commit count: 0

cargo fmt