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 ,);