51 lines
1.2 KiB
Rust
51 lines
1.2 KiB
Rust
#![allow(dead_code, unused)]
|
|
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 codegen;
|
|
mod tests;
|
|
|
|
lrlex_mod!("lexers/fudge.l");
|
|
lrpar_mod!("parsers/fudge.y");
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
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()
|
|
// }
|
|
// }
|