diff options
Diffstat (limited to 'nandgame/assembler')
| -rw-r--r-- | nandgame/assembler/parser_types.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/nandgame/assembler/parser_types.py b/nandgame/assembler/parser_types.py new file mode 100644 index 0000000..6453a44 --- /dev/null +++ b/nandgame/assembler/parser_types.py @@ -0,0 +1,65 @@ +from dataclasses import dataclass +from typing import Any + + +@dataclass +class Symbol: + """Define a symbol""" + + name: str + + +@dataclass +class Immediate: + """An immediate value loaded in a register.""" + + value: int + + +@dataclass +class Address: + """An address (used in 2nd stage assembler).""" + + value: int + + +@dataclass +class Register: + """Define a source or dest register""" + + name: str + + +@dataclass +class AsmLine: + lineno: int + + +@dataclass +class Instruction(AsmLine): + opcode: str + jumptarget: str + dest: Register + arg1: Any + arg2: Any + + @property + def num_args(self) -> int: + if self.dest is None: + return 0 + if self.arg1 is None: + return 1 + if self.arg2 is None: + return 2 + return 3 + + +@dataclass +class ErrorInstruction(AsmLine): + opcode: str + error_message: str + + +@dataclass +class JumpTarget(AsmLine): + label: Symbol |
