47 lines
No EOL
1.6 KiB
Rust
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)
|
|
}
|
|
}
|
|
} |