Brainfuck interpreter written in rust
Go to file
b1ek e34bb583a1
skip the loop if current is 0
2023-08-23 16:34:20 +10:00
examples add eval_file 2023-08-23 00:46:30 +10:00
src skip the loop if current is 0 2023-08-23 16:34:20 +10:00
.gitignore init repo 2023-08-22 17:28:55 +10:00
Cargo.toml init repo 2023-08-22 17:28:55 +10:00
README.md add guide to install as a cli 2023-08-23 01:09:32 +10:00

README.md

BrainRustFucked

YABI (Yet Another Brainfuck Interpretator)
This is designed to embed BrainFuck for applications.

This library provides 2 functions:


/**
 * Eval the code from a raw string returning the memory
 */
fn eval(bf_str: &&str) -> Result<[u8; 30000], String>

/**
 * A more low level function to run code in custom environment  
 * This is useful when you want to use presetted memory & pointer
 */
fn eval_mem(bf_str: &&str, mem: &mut [u8], pointer: &mut usize) -> Result<(), String>

Example code:

// print "Hello world!"
eval(&"++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.").unwrap();

Also check out examples/ directory

Using this as command-line interpreter

There is an example eval_file, which you can compile to a standalone binary

cargo b --release --example=eval_file
cd target/release/examples

# those two are optional, they are needed to reduce the size of binary
# its recommended but if they fail its no big deal
strip eval_file
upx eval_file

cp eval_file /usr/bin/eval_file # or other directory that is in $PATH
hash -r # run this just in case to refresh $PATH in your terminal

eval_file file.b # 1st argument is the name of the file