hack_asm 1.0.2

A Nand2Tetris Hack Assembly Language Assembler written in Rust
Documentation
use pest::iterators::Pair;

use crate::{
    hack_int::HackInt,
    instructions::{AInstruction, AValue},
};

use super::{ParseError, ParsedInstruction, Rule};

pub fn a_instruction(instruction: Pair<Rule>) -> Result<ParsedInstruction, ParseError> {
    let inner = instruction.into_inner().next().unwrap();

    let value = match inner.as_rule() {
        Rule::symbol => AValue::Symbol(inner.as_str()),
        Rule::literal => AValue::Literal(HackInt::parse(inner.as_str())?),
        _ => unreachable!(),
    };

    Ok(ParsedInstruction::AInstruction(AInstruction { value }))
}