summaryrefslogtreecommitdiff
path: root/nandgame
diff options
context:
space:
mode:
authoruvok2026-01-14 17:02:16 +0100
committeruvok2026-01-14 17:02:16 +0100
commit3f9168c1be3422ecf0a24064de97cdc32158d255 (patch)
treef98389baafe71df5f7b209ab328aef0fbeba6a2c /nandgame
parent759ca7f3ad4f5fccf85a62a9a3e2fb7d623ecd5f (diff)
parsetypes: Fix hierarchy and rename as sep file
Diffstat (limited to 'nandgame')
-rw-r--r--nandgame/assembler/parser_types.py65
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