#[derive(Clone, Debug)]
pub enum Expr {
    Label(String),
    Opcode(String, ArgType),
}

#[derive(Clone, Debug)]
pub enum Arg {
    Number(i32),
    Identifier(String),
}

#[derive(Clone, Debug)]
pub enum ArgType {
    Accumulator,
    DirectPage(Arg),
    DirectPageIX(Arg),
}

#[derive(Clone, Debug)]
pub enum OpName {
    Adc,
    And,
    Asl,
    Bcc,
    Bcs,
    Beq,
    Bit,
    Bmi,
    Bne,
    Bpl,
    Bra,
    Brk,
    Brl,
    Bvc,
    Bvs,
    Clc,
    Cld,
    Cli,
    Clv,
    Cmp,
    Cop,
    Cpx,
    Cpy,
    Dec,
    Dex,
    Dey,
    Eor,
    Inc,
    Inx,
    Iny,
    Jmp,
    Jsr,
    Lda,
    Ldx,
    Ldy,
    Lsr,
    Mvn,
    Mvp,
    Nop,
    Ora,
    Pea,
    Pei,
    Per,
    Pha,
    Phb,
    Phd,
    Phk,
    Php,
    Phx,
    Phy,
    Pla,
    Plb,
    Pld,
    Plp,
    Plx,
    Ply,
    Rep,
    Rol,
    Ror,
    Rti,
    Rtl,
    Rts,
    Sbc,
    Sec,
    Sed,
    Sei,
    Sep,
    Sta,
    Stp,
    Stx,
    Sty,
    Stz,
    Tax,
    Tay,
    Tcd,
    Tcs,
    Tdc,
    Trb,
    Tsb,
    Tsc,
    Tsx,
    Txa,
    Txs,
    Txy,
    Tya,
    Tyx,
    Wai,
    Wdm,
    Xba,
    Xce,
}