Compare commits
1 Commits
6b13991e39
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| b0acadc601 |
@@ -13,6 +13,7 @@ use clap::Parser as ArgParser;
|
|||||||
|
|
||||||
use crate::{ast::parser::Parser, ir::{cfg, generator::Generator}, lexer::lexer::Lexer, sema::analyzer::Analyzer};
|
use crate::{ast::parser::Parser, ir::{cfg, generator::Generator}, lexer::lexer::Lexer, sema::analyzer::Analyzer};
|
||||||
use crate::backend::generator::Generator as ASMGerenerator;
|
use crate::backend::generator::Generator as ASMGerenerator;
|
||||||
|
|
||||||
/// Simple minic compiler built by Rust
|
/// Simple minic compiler built by Rust
|
||||||
#[derive(ArgParser, Debug)]
|
#[derive(ArgParser, Debug)]
|
||||||
#[command(version, about, long_about = None)]
|
#[command(version, about, long_about = None)]
|
||||||
@@ -76,16 +77,19 @@ fn main() {
|
|||||||
let (tokens, diagnostics) = lexer.finish();
|
let (tokens, diagnostics) = lexer.finish();
|
||||||
if !diagnostics.is_empty() {
|
if !diagnostics.is_empty() {
|
||||||
diagnostics.print(&format!("{}", source_path.display()), &full_text);
|
diagnostics.print(&format!("{}", source_path.display()), &full_text);
|
||||||
|
std::process::exit(1);
|
||||||
}
|
}
|
||||||
let mut parser = Parser::new(tokens, diagnostics);
|
let mut parser = Parser::new(tokens, diagnostics);
|
||||||
let compile_unit = parser.parse();
|
let compile_unit = parser.parse();
|
||||||
if !parser.diagnostics.is_empty() {
|
if !parser.diagnostics.is_empty() {
|
||||||
parser.diagnostics.print(&format!("{}", source_path.display()), &full_text);
|
parser.diagnostics.print(&format!("{}", source_path.display()), &full_text);
|
||||||
|
std::process::exit(1);
|
||||||
}
|
}
|
||||||
let mut analyzer = Analyzer::new();
|
let mut analyzer = Analyzer::new();
|
||||||
let hir = analyzer.analyze(compile_unit);
|
let hir = analyzer.analyze(compile_unit);
|
||||||
if !analyzer.get_diagnostics().is_empty() {
|
if !analyzer.get_diagnostics().is_empty() {
|
||||||
analyzer.get_diagnostics().print(&format!("{}", source_path.display()), &full_text);
|
analyzer.get_diagnostics().print(&format!("{}", source_path.display()), &full_text);
|
||||||
|
std::process::exit(1);
|
||||||
}
|
}
|
||||||
let mut generator = Generator::new(&analyzer);
|
let mut generator = Generator::new(&analyzer);
|
||||||
let ir = cfg::optimize_ir(generator.emit(hir));
|
let ir = cfg::optimize_ir(generator.emit(hir));
|
||||||
|
|||||||
Reference in New Issue
Block a user