46 lines
780 B
Rust
46 lines
780 B
Rust
|
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<Ast<'s>>),
|
||
|
Leaf(&'s str),
|
||
|
}
|