10 releases (6 breaking)
0.7.0 | Sep 12, 2022 |
---|---|
0.6.1 | Apr 19, 2021 |
0.6.0 | Sep 16, 2020 |
0.5.0 | Feb 18, 2020 |
0.2.2 | Feb 19, 2019 |
#50 in Emulators
46KB
938 lines
brainhug
brainhug
is a crate that is used to interpret brainf*ck code to any other language
Current languages covered are :
- C
- C++
- C#
- Python
- Golang
- Haskell
- Lua
- JavaScript
Why the name brainhug ?
Inspired from link
Usage
Add this to your Cargo.toml
:
[dependencies]
brainhug = "*"
and this to your crate root:
extern crate brainhug;
use brainhug::Lang;
Contributing
Read contributing for Details
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 += 8;
while (*ptr) {
ptr += 1;
*ptr += 4;
while (*ptr) {
ptr += 1;
*ptr += 2;
ptr += 1;
*ptr += 3;
ptr += 1;
*ptr += 3;
ptr += 1;
*ptr += 1;
ptr -= 4;
*ptr -= 1;
}
ptr += 1;
*ptr += 1;
ptr += 1;
*ptr += 1;
ptr += 1;
*ptr -= 1;
ptr += 2;
*ptr += 1;
while (*ptr) {
ptr -= 1;
}
ptr -= 1;
*ptr -= 1;
}
ptr += 2;
putchar(*ptr);
ptr += 1;
*ptr -= 3;
putchar(*ptr);
*ptr += 7;
putchar(*ptr);
putchar(*ptr);
*ptr += 3;
putchar(*ptr);
ptr += 2;
putchar(*ptr);
ptr -= 1;
*ptr -= 1;
putchar(*ptr);
ptr -= 1;
putchar(*ptr);
*ptr += 3;
putchar(*ptr);
*ptr -= 6;
putchar(*ptr);
*ptr -= 8;
putchar(*ptr);
ptr += 2;
*ptr += 1;
putchar(*ptr);
ptr += 1;
*ptr += 2;
putchar(*ptr);
}
License
Licensed under
- MIT license (LICENSE.md or http://opensource.org/licenses/MIT)