use logos::Logos; #[derive(Logos, Debug, PartialEq)] #[logos(skip r"[ \t\n\f]+")] // Ignore this regex pattern between tokens enum Token { #[token("{")] LeftBrace, #[token("}")] RightBrace, #[token("(")] LeftParen, #[token(")")] RightParen, #[token(";")] Semicolon, #[token(":")] Colon, #[token("<")] LeftArrow, #[token(">")] RightArrow, #[token(",")] Comma, #[token("=")] Equals, #[regex(r#"[A-z]+"#, |lex| lex.slice().parse().ok())] Literal(String), #[regex("use [a-zA-Z/]+;", |lex| lex.slice().parse().ok())] Component(String), #[regex("U[0-9]+", |lex| lex.slice().parse().ok())] UnsignedType(String), #[regex("I[0-9]+", |lex| lex.slice().parse().ok())] SignedType(String), #[regex(r"//[ a-zA-Z!-+]+", |lex| lex.slice().parse().ok())] Comment(String), } fn main() { let mut lex = Token::lexer(include_str!("../../../programs/aidl/assets/vfs.idl")); for token in lex { // let ok_token = token.ok(); // if ok_token.is_some() { // println!("{:?}", ok_token.unwrap()); // } println!("{:?}", token); } }