refactor(sema): Separated from ir

This commit is contained in:
2026-05-31 20:59:18 +08:00
parent 1eca4a225b
commit c42575c1c6
10 changed files with 829 additions and 260 deletions
+8 -5
View File
@@ -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")) {