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("|")] Pipe, // #[token("def")] // Define, // #[token("type")] // Type, // #[token("->")] // RightArrow, // #[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, }