brainhug
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
- MIT license (LICENSE.md or http://opensource.org/licenses/MIT)