hack_asm 1.0.1

A Nand2Tetris Hack Assembly Language Assembler written in Rust
Documentation
use crate::{
    assembler_context::{AssemblerContext, AssemblerError},
    parsing::parse_str,
};

pub struct Assembler<'a> {
    context: AssemblerContext,
    input: &'a str,
}

impl<'a> Assembler<'a> {
    pub fn new(input: &'a str) -> Self {
        Self {
            context: AssemblerContext::default(),
            input,
        }
    }

    pub fn assemble(mut self) -> Result<Vec<u16>, AssemblerError> {
        let parser_output = parse_str(self.input)?;

        for (label, index) in parser_output.labels {
            self.context.register_label(label, index)?;
        }

        for instruction in parser_output.instructions {
            self.context.feed_instruction(instruction)?;
        }

        Ok(self.context.into_output())
    }
}