use logos::Logos; #[derive(Logos, Debug, PartialEq, Eq, Clone)] #[logos(skip r"[ \t\n\f]+")] pub enum Token<'a> { // hack! // this isn't actually supposed to be in the language. // i just can't figure out how to automatically choose between a top level declaration // or a top level expression // so a declaration needs the keyword def until i can figure this out #[token("def")] Def, #[token("let")] Let, #[token("in")] In, #[regex("[a-zA-Z0-9_\\-]+", |lex| lex.slice())] Word(&'a str), #[regex("\\$[a-zA-Z0-9_\\-]+", |lex| &lex.slice()[1..])] VarIdent(&'a str), #[token("@..")] InputSpread, #[regex("\\@[a-zA-Z0-9_\\-]+", |lex| &lex.slice()[1..])] InputIdent(&'a str), #[token(",")] Comma, #[token("|")] Pipe, #[token("@|")] MappingPipe, #[token("!|")] NullPipe, #[token("@")] At, #[token(">")] GreaterThan, #[token("=")] Equals, #[token(":")] Colon, #[token(";")] SemiColon, #[token("[")] BracketOpen, #[token("]")] BracketClose, #[token("(")] ParenOpen, #[token(")")] ParenClose, #[token("{")] BraceOpen, #[token("}")] BraceClose, } #[cfg(test)] mod tests;