use std::{env, fs}; use kabel::{debug::{debug_ast, debug_token_array}, run_lexer, run_parser, run_semantic_analysis}; fn main() { let args: Vec = env::args().collect(); let program = fs::read_to_string(args[1].clone()).unwrap(); let mut output = "".to_string(); let lexer = run_lexer(program.to_string()); for error in lexer.errors.clone() { output += &error.to_string(); output += "\n"; } output += &format!("{:?}", lexer.output); if lexer.errors.len() != 0 || lexer.output.len() == 0 { println!("{}", output); return; } //output += &debug_token_array(lexer.output.clone()); output += "\n\n"; let (ast, parser) = run_parser(program.to_string(), lexer.output); for error in parser.errors.clone() { output += &error.to_string(); output += "\n"; } if parser.errors.len() != 0 { println!("{}", output); return; } //output += &debug_ast(ast.clone(), 0); output += &format!("{:#?}", ast); output += "\n\n"; let analyzer = run_semantic_analysis(program.to_string(), ast); for error in analyzer.errors.clone() { output += &error.to_string(); output += "\n"; } println!("{}", output); }