Enum brainfuck::Instruction [] [src]

pub enum Instruction {
    IncPtr,
    DecPtr,
    IncVal,
    DecVal,
    Output,
    Input,
    SkipForward(usize),
    SkipBackward(usize),
}

An executable instruction in the language.

There are only 8 instructions in the brainfuck language. A pair for incrementing and decrementing the pointer, and values on the tape. Two instructions for reading and writing a char from STDIN and STDOUT respectivly. And finally the only control flow instructions for skipping ahead and skipping back. More information on control flow below.

Control Flow

Control flow in brainfuck is achieved by skipping forward, and backward. The [ instruction skips past it's matching ] instruction, and the ] instruction skips back to it's matching [ instruction. Matching brackets follow the intuitive notion, for example [+[+]+] has to pairs of matching brackets. Skips are conditional based on the value of the cell behind the pointer. A forward skip only happens when the value of the cell is 0, and the backward skip only happens when the value of the cell is not 0. This allows for a relatively simple syntax for decrementing iteration. For example +++[- > operate on cell 2 < ]>. is the boilerplate for a loop that operates 3 times.

Variants

IncPtr

Increment the pointer moving it up on the tape.

DecPtr

Decrement the pointer moving it down on the tape.

IncVal

Increment the value at the pointer on the tape.

DecVal

Decrement the value at the pointer on the tape.

Output

Write the value at the pointer as a char to STDOUT. This instruction can fail if writing to the underlying writer fails.

Input

Read from STDIN as a char to value at the pointer. This instruction can fail if reading from the underlying reader fails or has no more data.

SkipForward

Skip forward if the value at the pointer is 0. For more information see the section on control flow above.

SkipBackward

Skip backward if the value at the pointer is not 0. For more information see the section on control flow above.

Trait Implementations

impl Display for Instruction

fn fmt(&self, f: &mut Formatter) -> Result

Derived Implementations

impl Hash for Instruction

fn hash<__H: Hasher>(&self, __arg_0: &mut __H)

fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher

impl Eq for Instruction

impl PartialEq for Instruction

fn eq(&self, __arg_0: &Instruction) -> bool

fn ne(&self, __arg_0: &Instruction) -> bool

impl Debug for Instruction

fn fmt(&self, __arg_0: &mut Formatter) -> Result

impl Clone for Instruction

fn clone(&self) -> Instruction

fn clone_from(&mut self, source: &Self)

impl Copy for Instruction