#parser-generator #opinionated #user-friendly #left #read

parse-it

A user-friendly, opinionated parser generator for Rust

1 unstable release

new 0.1.0 Feb 18, 2025

#136 in Parser tooling

Apache-2.0

16KB
234 lines

Parse It

A user-friendly, opinionated parser generator for Rust.

Example

use parse_it::{ParseIt, parse_it};

#[derive(Debug, Clone)]
pub enum Instr {
    Left,
    Right,
    Incr,
    Decr,
    Read,
    Write,
    Loop(Vec<Self>),
}

parse_it! {
    mod parse {
        use super::Instr;

        pub Brainfuck -> Vec<Instr> {
            Primitive* => self,
        }

        Primitive -> Instr {
            '<' => Instr::Left,
            '>' => Instr::Right,
            '+' => Instr::Incr,
            '-' => Instr::Decr,
            ',' => Instr::Read,
            '.' => Instr::Write,
            '[' Primitive+ ']' => Instr::Loop(self)
        }
    }
}

fn main() {
    let parser = parse::Brainfuck::default();
    let src = "--[>--->->->++>-<<<<<-------]>--.>---------.>--..+++.>----.>+++++++++.<<.+++.------.<-.>>+";
    let instrs = parser.parse(src).unwrap();
    println!("{:?}", instrs);
}

Dependencies

~1–1.5MB
~29K SLoC