sicompiler/
lib.rs

1pub mod models;
2pub mod structs;
3pub mod errors;
4
5use std::collections::HashMap;
6
7use structs::{tokenizer::Tokenizer, validator::Validator};
8use models::{program::Program, instruction::Instruction, args::Cli};
9use errors::error::SicompilerError;
10
11/// Executes the main functionality of the program based on the provided command-line arguments.
12///
13/// ## Arguments
14///
15/// - `cli` - A reference to the `Cli` struct containing command-line arguments.
16///
17/// ## Returns
18///
19/// Returns a `Result` indicating success (`Ok(())`) or an error (`Err(SicompilerError)`).
20///
21pub fn run(cli: &Cli) -> Result<(), SicompilerError> {
22    let tokenizer: Tokenizer = Tokenizer::new(&cli.input_path, &cli.repertoire_path);
23
24    let repertoire: HashMap<String, Instruction> = tokenizer.tokenize_repertoire()?;
25
26    let tokens: Program = tokenizer.tokenize()?;
27
28    let validator: Validator = Validator::new(tokens, &cli.output_path);
29    
30    validator.validate(&repertoire)?;
31
32    Ok(())
33}