hey it can calculate 4 again xP
This commit is contained in:
parent
e769b891ab
commit
d253497b3e
11 changed files with 137 additions and 95 deletions
39
src/main.rs
39
src/main.rs
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue