mod parser; use fs_err as fs; #[derive(Debug, PartialEq, logos::Logos)] enum Kind { #[token("(")] Lparen, #[token(")")] Rparen, #[regex(r"[A-Za-z0-9!$%&*+-./:<=>?@^_~]+")] // Most literals are floats, and can be seperated later Symbol, #[regex(r"#(f|t)")] Boolean, #[regex(r#""(\\.|[^"\\])*""#)] String, #[error] #[regex(r"[ \t\n\f\r]+", logos::skip)] #[regex(r";.*", logos::skip)] Error, } fn main() -> anyhow::Result<()> { let arg = std::env::args() .nth(1) .ok_or_else(|| anyhow::anyhow!("Useage: handball sources.scm"))?; let src = fs::read_to_string(&arg)?; dbg!(parser::parse(&src)); Ok(()) } #[derive(Debug)] enum Ast<'s> { Tree(Vec>), Leaf(&'s str), }