1pub mod lexer;
2pub mod parser;
3pub mod ast;
4pub mod ir;
5pub mod codegen;
6pub mod regeister;
7pub mod symbols;
8pub mod ir_handle;
9
10use lexer::tokenize;
11use parser::parsing;
12use std::io::{Result, Write};
13
14use crate::ir_handle::op;
15
16pub fn run(path: String, output: &mut impl Write) -> Result<()> {
17 let t = tokenize(path);
18 println!("Tokens: {:#?}", t);
19 let mut p = parsing(&t);
20 println!("Prog: {:#?}", &p.0);
21 let ir = ir::ast2ir(&p.0, &mut p.1);
22 println!("IR before dataflow op Prog: {:#?}", &ir);
23 let ir = op(&ir, &mut p.1);
24 println!("IR Prog: {:#?}", &ir);
25 codegen::write_asm(&ir,&mut p.1, output)
26}