9 releases

0.1.9 Oct 31, 2023
0.1.8 Oct 31, 2023

#413 in Procedural macros

MIT license

13KB

BrainFuck compiler using Rust proc macro

More precisely, the BrainFuck-to-Rust transpiler using Rust proc macro

Crates.io License: MIT docs.rs

Examples:

  1. Hello World (run on dropping)
    brain_fuck!(
        ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.
        >---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
    );
    
  2. using into method to obtain (pc: usize, mem: Vec<u8>) after running (run on into calling)
    let (pc, mem) = brain_fuck!(
        ++++++++[>+>++++<<-]>++>>+<[-[>>+<<-]+>>]>+[
            -<<<[
                ->[+[-]+>++>>>-<<]<[<]>>++++++[<<+++++>>-]+<<++.[-]<<
            ]>.>+[>>]>+
        ]
    ).into();
    println!("{:?}", (pc, mem));
    
  3. use env method to set Program Counter pc and Memory mem for brainfuck codeblock (run on dropping)
    brain_fuck!(
        [.>]
    ).env(0, vec![79, 75, 10]);
    
  4. Altogether (run on into calling)
    let (pc, mem) = brain_fuck!(
        [.>]
    ).env(0, vec![72, 101, 108, 108, 79, 119, 104, 97, 116, 65, 115, 10]).into();
    println!("{:?}", (pc, mem));
    

Dependencies

~1.5MB
~36K SLoC