1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
#![allow(dead_code)] extern crate pest; #[macro_use] extern crate pest_derive; extern crate byteorder; mod config; mod test_assembly; mod test_binary; mod test_descriptor; mod bits; mod task; mod lookup_table; use std::fs; use std::env; use task::TaskHandle; fn main() { let args: Vec<String> = env::args().collect(); let in_file_name = args.get(1).expect("Expected one command line argument with file name"); println!("Assembler Started\n"); let root_task = TaskHandle::new("Assembler"); let input_path = format!("./examples/assembly/{}.taf", in_file_name); let output_path = format!("./examples/target/{}.tbf", in_file_name); let _a = assemble(root_task.clone(), input_path, output_path); root_task.report_results(); } fn assemble(task: TaskHandle, input_path: String, output_path: String) -> Option<()> { let file_read_task = task.sub_task("read", Some(input_path.clone())); file_read_task.print_starting(); let input_text = file_read_task.res_error(fs::read_to_string(&input_path))?; file_read_task.print_finished(); let file_parse_task = task.sub_task("parse", Some(input_path)); file_parse_task.print_starting(); let test = test_assembly::parse(file_parse_task.clone(), input_text)?; file_parse_task.print_finished(); let binary_emit_task = task.sub_task("emit_binary", Some(output_path.clone())); binary_emit_task.print_starting(); test_binary::emit(binary_emit_task.clone(), test, output_path); binary_emit_task.print_finished(); Some(()) }