#brainfuck #interpreter

bin+lib brainhug

A simple brainf*ck translator

4 releases

✓ Uses Rust 2018 edition

0.2.2 Feb 19, 2019
0.2.1 Jan 5, 2019
0.2.0 Jan 4, 2019
0.1.0 Jan 4, 2019

#2 in #brainfuck

22 downloads per month

MIT license

14KB
197 lines

brainhug

Build Status crate documentation

brainhug is a crate that is used to interpret brainf*ck code to any other language

Current languages covered are :

  • C
  • C++

Why the name brainhug ?

Inspired from link

Usage

Add this to your Cargo.toml:

[dependencies]
brainhug = "0.2.1"

and this to your crate root:

extern crate brainhug;
use brainhug::Lang;

Example

extern crate brainhug;
use brainhug::Lang;

fn main() {
    // will print `Hello World!`
    let input = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";

    // `brainhug::generate` will generate a `String`
    println!("{}", brainhug::generate(Lang::C, input));
}

It will produce

#include "stdio.h"

int main() {
    char tape[20000] = {0};
    char *ptr = tape;

    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    while (*ptr) {
        ++ptr;
        ++*ptr;
        ++*ptr;
        ++*ptr;
        ++*ptr;
        while (*ptr) {
            ++ptr;
            ++*ptr;
            ++*ptr;
            ++ptr;
            ++*ptr;
            ++*ptr;
            ++*ptr;
            ++ptr;
            ++*ptr;
            ++*ptr;
            ++*ptr;
            ++ptr;
            ++*ptr;
            --ptr;
            --ptr;
            --ptr;
            --ptr;
            --*ptr;
        }
        ++ptr;
        ++*ptr;
        ++ptr;
        ++*ptr;
        ++ptr;
        --*ptr;
        ++ptr;
        ++ptr;
        ++*ptr;
        while (*ptr) {
            --ptr;
        }
        --ptr;
        --*ptr;
    }
    ++ptr;
    ++ptr;
    putchar(*ptr);
    ++ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    putchar(*ptr);
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    ++*ptr;
    putchar(*ptr);
    putchar(*ptr);
    ++*ptr;
    ++*ptr;
    ++*ptr;
    putchar(*ptr);
    ++ptr;
    ++ptr;
    putchar(*ptr);
    --ptr;
    --*ptr;
    putchar(*ptr);
    --ptr;
    putchar(*ptr);
    ++*ptr;
    ++*ptr;
    ++*ptr;
    putchar(*ptr);
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    putchar(*ptr);
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    --*ptr;
    putchar(*ptr);
    ++ptr;
    ++ptr;
    ++*ptr;
    putchar(*ptr);
    ++ptr;
    ++*ptr;
    ++*ptr;
    putchar(*ptr);
}

License

Licensed under

No runtime deps