Crate brainfuck [] [src]

Simple brainfuck interpreter in Rust.

The brainfuck language was created with the purpose of being a very minimal language which is very easy to write an interpreter for. This is one such interpreter. For more information on the brainfuck language start with the documentation of each instruction in the language, or some material online. Brainfuck itself is syntactically challenging for humans, but is really not all that complicated. +. for example increments the value in the first cell and outputs that value. The instructions that trip people up the most are the control flow contructs [ and ]. +++>,<[>+.<-] for example prints the 3 values after the input value. For more about control flow in brainfuck read the section on control flow.

Examples

Basic usage.

use brainfuck;

// Evaluate a simple brainfuck program from a string.
brainfuck::eval_string("+>.");
// Evaluate a brainfuck program from a file.
brainfuck::eval_file("fixtures/helloworld.rs");

Advanced usage, with specified tape type.

use std::io;
use brainfuck::Interpreter;
use brainfuck::program::Program;
use brainfuck::tape::ArrayTape;

let mut stdin = io::stdin();
let mut stdout = io::stdout();
let program = Program::parse("++>+.").unwrap();
let mut interp = Interpreter::<ArrayTape>::new(program, &mut stdin, &mut stdout);

Semantics and Portability

The brainfuck language has a few areas that are undefined behavior. All of the undefined behaviors in brainfuck are listed below:

  1. The tape's length.
  2. Moving the tape's pointer above or below the range of the tape.
  3. The type of the values of the tape.
  4. Incrementing or decrementing the value out of range.
  5. Attempting to read input when there is no more input.
  6. Programs containing unmatching brackets.

For 1-4 see the tape's documentation. New tape's can be created to give arbitrary semantics for these points. For 5 and 6, attempts to read when there are no more input values are ignored. Programs with unmatched brackets are invalid.

Modules

program

Data structure for the logic of a user brainfuck program.

tape

Underlying data structure for brainfuck programs.

Structs

Interpreter

A brainfuck interpreter, with the needed state for execution.

Enums

Error

A general error type for problems inside of the interpreter.

Instruction

An executable instruction in the language.

Constants

CYCLE_LIMIT

The number of instructions allowed to execute before the interpreter errors with Error::CycleLimit.

Functions

eval_file

Parse a program from the given file path and run it.

eval_string

Parse a program from the given string and run it.