Skip to content

Optimizing Brainfuck compiler, transpiler and interpreter

Notifications You must be signed in to change notification settings

unparalloser/bfpile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bfpile

Compile, transpile and interpret Brainfuck with bfpile!

This project was created by Tanya Nevskaya with the guidance and help of Yana Timoshenko <3

bfpile also implements peephole optimizations that turn consecutive Brainfuck commands into one CPU instruction!

How to build

This project can be built with Nimble that comes with Nim. Just run nimble build.

How to use

Compilation

To compile Brainfuck to a desired target, enter:

bfpile -t<TARGET> filename.bf

Supported compiler targets:

Target Description
aarch64-linux Linux AArch64 (Arm 64-bit)
riscv64-linux Linux RISC-V 64-bit
wasm32-wasi WebAssembly System Interface (WASI)
x86_64-linux Linux x86-64 (AMD64)
x86_64-freebsd FreeBSD x86-64 (AMD64)
x86_64-netbsd NetBSD x86-64 (AMD64)
x86_64-openbsd OpenBSD x86-64 (AMD64)
x86_64-illumos Illumos x86-64 (AMD64)

Transpilation

To transpile Brainfuck to a desired language, enter:

bfpile -l<LANGUAGE> filename.bf

Supported transpiler languages:

Language Description
c C
rust Rust
zig Zig

Interpretation

To interpret Brainfuck, enter:

bfpile -i filename.bf

If no option is provided, bfpile defaults to compiling to Linux x86-64.

Enter bfpile without any arguments to get help :)

How to Test

You can test bfpile with any of the programs in vendor folder. mandelbrot.bf is mostly useful for benchmarking.

Contributing

All contributions are very welcome! Found a confusing comment? Know a better way to write some part of the program? Want to submit an additional emitter? Feel free to create issues and pull requests to bfpile repository!