refactor(sema): Separated from ir
This commit is contained in:
+8
-5
@@ -5,12 +5,13 @@ mod backend;
|
||||
mod utils;
|
||||
mod diagnostic;
|
||||
mod err;
|
||||
mod sema;
|
||||
|
||||
use std::{fs::File, io::BufRead};
|
||||
|
||||
use clap::Parser as ArgParser;
|
||||
|
||||
use crate::{frontend::{lexer::Lexer, parser::Parser}, ir::generator::Generator};
|
||||
use crate::{frontend::{lexer::Lexer, parser::Parser}, ir::generator::Generator, sema::analyzer::Analyzer};
|
||||
use crate::backend::generator::Generator as ASMGerenerator;
|
||||
/// Simple minic compiler built by Rust
|
||||
#[derive(ArgParser, Debug)]
|
||||
@@ -78,11 +79,13 @@ fn main() {
|
||||
if !parser.diagnostics.is_empty() {
|
||||
parser.diagnostics.print(&format!("{}", source_path.display()), &full_text);
|
||||
}
|
||||
let mut generator = Generator::new();
|
||||
let ir = generator.emit(compile_unit);
|
||||
if !generator.get_diagnostics().is_empty() {
|
||||
generator.get_diagnostics().print(&format!("{}", source_path.display()), &full_text);
|
||||
let mut analyzer = Analyzer::new();
|
||||
let hir = analyzer.analyze(compile_unit);
|
||||
if !analyzer.get_diagnostics().is_empty() {
|
||||
analyzer.get_diagnostics().print(&format!("{}", source_path.display()), &full_text);
|
||||
}
|
||||
let mut generator = Generator::new(&analyzer);
|
||||
let ir = generator.emit(hir);
|
||||
if args.output_ir {
|
||||
if let Some(output_path) = args.output {
|
||||
match std::fs::write(&output_path, ir.iter().map(|instr| instr.to_string()).collect::<Vec<_>>().join("\n")) {
|
||||
|
||||
Reference in New Issue
Block a user