use logos::Logos; #[derive(Logos, Debug, PartialEq)] #[logos(skip r"[\s]+")] pub enum Token<'a> { #[regex("[\\w]+", |lex| lex.slice())] Word(&'a str), #[regex("[\\d]+", priority = 2, callback = |lex| lex.slice().parse::().unwrap())] IntLiteral(i64), #[regex("[\\d]+.[\\d]+", |lex| lex.slice().parse::().unwrap())] FloatLiteral(f64), #[regex(r#""([^"\\]|\\["\\bnfrt]|u[a-fA-F0-9]{4})*""#, |lex| lex.slice().to_owned())] StringLiteral(String), #[token("def")] Define, #[token("type")] Type, #[token("->")] RightArrow, #[token("|")] Pipe, #[token("[")] BracketOpening, #[token("]")] BracketClosing, #[token("(")] ParensOpening, #[token(")")] ParensClosing, #[token("{")] BraceOpening, #[token("}")] BraceClosing, #[token("+")] Plus, #[token("-")] Minus, #[token("*")] Multiply, #[token("/")] Divide, #[token("%")] Percent, #[token("&")] Ampersand, #[token(":")] Colon, #[token(";")] Semicolon, #[token(".")] Dot, #[token(",")] Comma, #[token("!")] ExclaimationMark, #[token("?")] QuestionMark, }