#[macro_use] extern crate lalrpop_util; #[macro_use] extern crate anyhow; lalrpop_mod!(parser); mod ast; use std::fs::{self, File}; use std::path::PathBuf; use anyhow::Result; use clap::Parser; use inkwell::context::Context; use crate::parser::ProgramParser; #[derive(Debug, Parser)] struct Opt { path: PathBuf, #[clap(short = 'o', long = "out")] out_path: PathBuf, } fn main() -> Result<()> { let opts = Opt::parse(); let contents = fs::read_to_string(opts.path)?; let parser = ProgramParser::new(); let ast = parser.parse(&contents).unwrap(); println!("AST: {ast:?}"); let mut context = Context::create(); let module = ast::llvm::convert(&mut context, ast)?; { let file = File::create(&opts.out_path)?; module.write_bitcode_to_file(&file, true, true); println!("Emitted."); } Ok(()) }