first commit

This commit is contained in:
LunarAkai 2025-08-05 16:20:01 +02:00
commit d974798fcb
6 changed files with 184 additions and 0 deletions

33
src/lexer.rs Normal file
View file

@ -0,0 +1,33 @@
use logos::{Lexer, Logos};
#[derive(Logos, Debug, Clone, PartialEq)]
#[logos(skip r"[ \t\r\n\f]+")] // Skips whitespace
enum Token<'source> {
#[token("false", |_| false)]
#[token("true", |_| true)]
Bool(bool),
#[token("+")]
Add,
#[token("-")]
Substract,
#[token("*")]
Multiply,
#[token("/")]
Divide,
#[regex(r"[_a-zA-Z][_0-9a-zA-Z]*")]
Ident(&'source str),
#[regex(r#""([^"\\\x00-\x1F]|\\(["\\bnfrt/]|u[a-fA-F0-9]{4}))*""#, |lex| lex.slice().to_owned())]
String(String),
}
fn float<'a>(lex: &mut Lexer<'a, Token<'a>>) -> Result<f64, ()> {
lex.slice().parse().map_err(|_| ())
}