use crate::errors::CLIArgumentError; use lrlex::lrlex_mod; use lrpar::lrpar_mod; use std::error::Error; use std::fmt::Display; use std::io; use std::io::ErrorKind::InvalidInput; mod ast; mod errors; mod optimising; mod tests; lrlex_mod!("lexers/fudge.l"); lrpar_mod!("parsers/fudge.y"); fn main() -> Result<(), Box> { let src_path = std::env::args() .nth(1) .ok_or(Box::new(CLIArgumentError("Source File Not Provided")))?; let src_string = std::fs::read_to_string(&src_path)?; let lexer_def = fudge_l::lexerdef(); let lexer = lexer_def.lexer(src_string.as_str()); let (res, errs) = fudge_y::parse(&lexer); match (res, errs) { (Some(Ok(res)), _) => { println!("Parsed succesfully:"); println!("{:#?}", res); }, (Some(Err(e)), _) => { println!("Parsing failed:"); println!("{:#?}", e); } (_, vec) => { println!("LexParseErrors encountered:"); println!("{:#?}", vec); } } Ok(()) } // fn main() { // if let Err(ref e) = main_() { // return e.fmt() // } // }