pomelo 0.2.3

Implementation of the Lemon parser generator as a Rust procedural macro
Documentation
use pomelo::*;

//You can use %token to add attributes to the Token enum or to add generic types.
//Generic arguments in Token will apply also to Parser.
pomelo! {
    %include {
        use std::marker::PhantomData;
    }
    %token
        #[derive(Debug, Clone, Copy)]
        pub enum Token<'a, 'b, A, B> {};

    %type Phantom PhantomData<&'b B>;
    %type Terminal &'a A;
    %type input &'a A;

    input ::= Terminal(T) { T }
}

#[test]
fn generic_parse() -> Result<(), ()> {
    use parser::*;
    let mut parse = Parser::new();
    let x = 42;
    parse.parse(Token::<_, u8>::Terminal(&x))?;
    let res = parse.end_of_input()?;
    assert_eq!(res, &42);
    Ok(())
}