Macro parsit::seq

source ·
macro_rules! seq {
    ($pos:ident => $elem:ident, $sep:ident ) => { ... };
    ($pos:ident => $elem:ident,$sep:ident, ) => { ... };
}
Expand description

Helps to parse a sequence

<rule> ::= el {delim el}

Examples

    use logos::Logos;
    use crate::parsit::parser::Parsit;
    use crate::parsit::wrap;
    use crate::parsit::seq;
    use crate::parsit::token;
    use crate::parsit::step::Step;
    use crate::parsit::parser::EmptyToken;
    #[derive(Logos,PartialEq)]
    pub enum TFQ {
        #[token("(")]
        L,
        #[token(")")]
        R,
        #[token(",")]
        C,

        #[token("word")]
        Word,
        #[token("none")]
        None,
    }

    let p:Parsit<TFQ> = Parsit::new("word,word,word").unwrap();
    let comma = |pos:usize|{token!(p.token(pos) => TFQ::C)};
    let word = |pos:usize|{token!(p.token(pos) => TFQ::Word)};
    let pos = 0;
    seq!(pos => word, comma );
    let p:Parsit<TFQ> = Parsit::new("word,word,word,").unwrap();
    seq!(pos => word, comma ,);