parse-it 0.1.0

A user-friendly, opinionated parser generator for Rust.
Documentation
use parse_it::ParseIt;

parse_it::parse_it! {
    #[parse_it(crate = "parse_it")]
    mod parse {
        Digit -> char {
            @['0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'] => self
        }

        Num -> i32 {
            digits:Digit+ => digits.into_iter().collect::<String>().parse::<i32>().unwrap(),
        }

        pub Expr -> i32 {
            AddExpr => self,
        }

        AddExpr -> i32 {
            lhs:AddExpr '+' rhs:MulExpr => {
                lhs + rhs
            }
            lhs:AddExpr '-' rhs:MulExpr => {
                lhs - rhs
            }
            MulExpr => self,
        }

        MulExpr -> i32 {
            lhs:MulExpr '*' rhs:Term => {
                lhs * rhs
            }
            lhs:MulExpr '/' rhs:Term => {
                lhs / rhs
            }
            Term => self,
        }

        Term -> i32 {
            Num => self,
            '(' expr:Expr ')' => expr,
        }
    }
}

fn main() {
    let parser = parse::Expr::default();

    let input = "11+(6-1-1)*(4/2/2)";

    let result = match parser.parse(input) {
        Ok(value) => value,
        Err(err) => {
            println!("span: {}..{}", err.span.start, err.span.end);
            return;
        }
    };

    println!("parser: {}", result);
    assert_eq!(result, 15);
}