Macro parsit::wrap

source ·
macro_rules! wrap {
    ($pos:literal => $left:ident; $internal:ident; $right:ident ) => { ... };
    ($pos:literal => $left:ident; $internal:ident ?; $right:ident ) => { ... };
    ($pos:literal => $left:ident; $internal:ident or $default:ident; $right:ident ) => { ... };
    ($pos:literal => $left:ident; $internal:ident or $default:literal; $right:ident ) => { ... };
    ($pos:ident => $left:ident; $internal:ident; $right:ident ) => { ... };
    ($pos:ident => $left:ident; $internal:ident ?; $right:ident ) => { ... };
    ($pos:ident => $left:ident; $internal:ident or $default:ident; $right:ident ) => { ... };
    ($pos:ident => $left:ident; $internal:ident or $default:literal; $right:ident ) => { ... };
}
Expand description

Helps to parse a wrapper

<rule> ::= '(' "value" ')'

Examples

    use logos::Logos;
    use crate::parsit::parser::Parsit;
    use crate::parsit::wrap;
    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("word")]
        Word,
        #[token("none")]
        None,
    }

    let p:Parsit<TFQ> = Parsit::new("(word)").unwrap();
    let left = |pos:usize|{token!(p.token(pos) => TFQ::L)};
    let right = |pos:usize|{token!(p.token(pos) => TFQ::R)};
    let word = |pos:usize|{token!(p.token(pos) => TFQ::Word)};
    let pos = 0;
    wrap!(pos => left ; word; right );

    let p:Parsit<TFQ> = Parsit::new("()").unwrap();
    let word = |pos:usize|{token!(p.token(pos) => TFQ::Word).or_none()};
    wrap!(0 => left ; word ?; right );

    let p:Parsit<TFQ> = Parsit::new("()").unwrap();
    let word = |pos:usize|{token!(p.token(pos) => TFQ::Word => 1)};
    wrap!(0 => left ; word or 0; right ).print();