2023-11-15 10:55:14 +01:00
|
|
|
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),
|
2023-11-17 21:37:55 +01:00
|
|
|
#[regex("[\\d]+\\.[\\d]+", |lex| lex.slice().parse::<f64>().unwrap())]
|
2023-11-15 10:55:14 +01:00
|
|
|
FloatLiteral(f64),
|
|
|
|
#[regex(r#""([^"\\]|\\["\\bnfrt]|u[a-fA-F0-9]{4})*""#, |lex| lex.slice().to_owned())]
|
|
|
|
StringLiteral(String),
|
|
|
|
#[token("|")]
|
|
|
|
Pipe,
|
2023-11-19 16:49:27 +01:00
|
|
|
// #[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,
|
2023-11-15 10:55:14 +01:00
|
|
|
}
|