AstroLang/src/main.rs
2025-04-24 21:50:54 +02:00

47 lines
No EOL
1.6 KiB
Rust

use std::fs;
use parser::ASTPart;
mod lexer;
mod parser;
fn log_ast_part(part: &ASTPart, prefix: String) {
match part {
ASTPart::Number(number) => println!("{}{}: Number: {}", prefix, number.pos, number.value),
ASTPart::Assigment(assigment) => {
println!("{}{}: Assigment: {}", prefix, assigment.pos, assigment.variable);
println!("{} Value:", prefix);
log_ast_part(&assigment.value, format!("{} ", prefix));
},
ASTPart::Operation(operation) => {
println!("{}{}: Operation: {}", prefix, operation.pos, operation.operator);
println!("{} Left:", prefix);
log_ast_part(&operation.left, format!("{} ", prefix));
println!("{} Right:", prefix);
log_ast_part(&operation.right, format!("{} ", prefix));
},
ASTPart::VarRead(var_read) => println!("{}{}: Variable Read: {}", prefix, var_read.pos, var_read.variable),
_ => {}
}
}
fn main() {
let inp = fs::read_to_string("./test.as");
match inp {
Result::Ok(data) => {
let lexed = lexer::lex(data);
println!("Lexer output: ");
for token in &lexed {
println!(" {}: {:?}: {}", token.pos, token.typ, token.value);
}
let ast = parser::parse(lexed);
println!("AST: ");
for part in &ast {
log_ast_part(part, String::from(" "));
}
},
Result::Err(err) => {
panic!("Error while reading file: {}", err)
}
}
}