libbf 0.1.3

Brainfuck-like language library
Documentation
  • Coverage
  • 93.07%
    94 out of 101 items documented3 out of 38 items with examples
  • Size
  • Source code size: 63.75 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 7.43 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 13s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • yoh2/libbf-rs
    1 0 2
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • yoh2

libbf

Brainfuck-like language library.

This library can define a variant of Brainfuck-like language parser and can run parsed program.

Examples

Use predefined Brainfuck interpreter

`bf' feature flag is needed to compile this example.

use libbf::{predefined::bf, runtime};
use std::io;

fn main() {
    let source = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
    let program = bf::parser()
        .parse_str(source)
        .expect("Failed to parse");
    runtime::run(&program, io::stdin(), io::stdout()).expect("Failed to run");
}

Define Brainfuck interpreter

use libbf::{parser::Parser, runtime, token::simple::SimpleTokenSpec};
use std::io;

fn main() {
    // Create parser with token specification.
    let parser = Parser::new(
        SimpleTokenSpec {
            // You can specify tokens with `ToString` (`char`, `&str`, `String`, etc.)
            ptr_inc: '>',              // char
            ptr_dec: "<",              // &str
            data_inc: "+".to_string(), // String
            data_dec: '-',
            output: '.',
            input: ',',
            loop_head: '[',
            loop_tail: ']',
        }
        .to_tokenizer(),
    );

    let source = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
    let program = parser.parse_str(source).expect("Failed to parse");
    runtime::run(&program, io::stdin(), io::stdout()).expect("Failed to run");
}

Feature flags

  • all - all features
  • predefined - predefined parsers below
  • bf - predefined Brainfuck parser
  • ook - predefined Ook! parser