forked from AbleOS/ableos_userland
63 lines
1.2 KiB
Rust
63 lines
1.2 KiB
Rust
|
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);
|
||
|
}
|
||
|
}
|