logos calculator example

This commit is contained in:
LunarAkai 2025-08-05 17:17:11 +02:00
commit 0c30f0022d
9 changed files with 414 additions and 22 deletions

36
src/main.rs Normal file
View file

@ -0,0 +1,36 @@
use chumsky::Parser;
use logos::Logos;
use crate::{parser::parser, tokens::Token};
mod tokens;
mod ast;
mod parser;
fn main() {
let lexer = Token::lexer("(1 + 1) * 3");
let mut tokens = vec![];
for (token, span) in lexer.spanned() {
match token {
Ok(token) => tokens.push(token),
Err(e) => {
println!("lexer error at {:?}: {:?}", span, e);
return;
}
}
}
let ast = match parser().parse(&tokens).into_result() {
Ok(expr) => {
println!("[AST]\n{:#?}", expr);
expr
}
Err(e) => {
println!("parse error: {:#?}", e);
return;
}
};
println!("\n[result]\n{}", ast.eval());
}