37 lines
1003 B
Rust
37 lines
1003 B
Rust
use std::{path::PathBuf, process::ExitCode};
|
|
|
|
use clap::Parser;
|
|
// Importing logger here too cause the logger macros dont work outside the mclanc lib
|
|
mod logger;
|
|
|
|
|
|
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let cli = mclangc::cli::CliArgs::parse();
|
|
cli.set_log_level();
|
|
cli.validate();
|
|
let mut progs = Vec::new();
|
|
for file in &cli.input {
|
|
let fp = PathBuf::from(file);
|
|
if !fp.exists() {
|
|
error!("File {fp:?} doesnt exits, exiting");
|
|
anyhow::bail!("")
|
|
}
|
|
|
|
let data = std::fs::read_to_string(&fp).unwrap();
|
|
info!("Tokenising {file}");
|
|
let tokens = mclangc::tokeniser::tokenise(&data, &file)?;
|
|
info!("Parsing {file}");
|
|
let mut prog = mclangc::parser::parse_program(tokens)?;
|
|
info!("Validating {file}");
|
|
dbg!(&prog);
|
|
mclangc::validator::validate_code(&mut prog)?;
|
|
//dbg!(&prog);
|
|
progs.push((fp, prog));
|
|
}
|
|
|
|
mclangc::targets::compile(&cli, progs)?;
|
|
Ok(())
|
|
}
|