diff options
| author | uvok | 2026-01-14 17:02:16 +0100 |
|---|---|---|
| committer | uvok | 2026-01-14 17:02:16 +0100 |
| commit | 3f9168c1be3422ecf0a24064de97cdc32158d255 (patch) | |
| tree | f98389baafe71df5f7b209ab328aef0fbeba6a2c /nandgame/assembler | |
| parent | 759ca7f3ad4f5fccf85a62a9a3e2fb7d623ecd5f (diff) | |
parsetypes: Fix hierarchy and rename as sep file
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 |
