hey it can calculate 4 again xP

This commit is contained in:
LunarAkai 2025-08-07 00:29:16 +02:00
commit d253497b3e
11 changed files with 137 additions and 95 deletions

View file

@ -1,12 +1,23 @@
use chumsky::Parser;
use logos::Logos;
use crate::{language_frontend::parser::parser, language_frontend::tokens::Token};
use crate::language_frontend::abstract_syntax_tree;
use crate::{
language_frontend::lexer::tokens::Token, language_frontend::parser::parser};
use crate::language_frontend::abstract_syntax_tree::ast::{eval, Expression};
mod language_frontend;
/*
Simple Compiler -> 4 Stages:
- lex
- parse
- type-check
- translate to machine instructions
*/
fn main() {
let lexer = Token::lexer("(1 + 1) * 3");
let lexer = Token::lexer("1 + 1 * 3");
let mut tokens = vec![];
for (token, span) in lexer.spanned() {
@ -19,16 +30,28 @@ fn main() {
}
}
let ast = match parser().parse(&tokens).into_result() {
Ok(expr) => {
println!("[AST]\n{:#?}", expr);
expr
/*
match parser().parse(&tokens).into_result() {
Ok(expr) => match eval(&ast, &mut Vec::new(), &mut Vec::new()) {
Ok(output) => println!("{output}"),
Err(eval_err) => println!("Evaluation error: {eval_err}"),
}
Err(e) => {
println!("parse error: {:#?}", e);
return;
}
};
}; */
println!("\n[result]\n{}", ast.evaluate());
match parser().parse(&tokens).into_result() {
Ok(ast) => match eval(&ast, &mut Vec::new(), &mut Vec::new()) {
Ok(output) => println!("{output}"),
Err(eval_err) => println!("Evaluation error: {eval_err}"),
},
Err(parse_errs) => parse_errs
.into_iter()
.for_each(|err| println!("Parse error: {err}")),
};
//println!("\n[result]\n{}", abstract_syntax_tree::ast::eval(absyntr, vars, funcs));
}