37 lines
799 B
Rust
37 lines
799 B
Rust
use chumsky::Parser;
|
|
use logos::Logos;
|
|
|
|
use crate::{parser::parser, tokens::Token};
|
|
|
|
mod tokens;
|
|
mod language_frontend;
|
|
mod parser;
|
|
mod llvm_backend;
|
|
|
|
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.evaluate());
|
|
}
|