forked from katzen-cafe/iowo
59 lines
1.2 KiB
Rust
59 lines
1.2 KiB
Rust
|
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::<i64>().unwrap())]
|
||
|
IntLiteral(i64),
|
||
|
#[regex("[\\d]+.[\\d]+", |lex| lex.slice().parse::<f64>().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,
|
||
|
}
|