summaryrefslogtreecommitdiff
path: root/nandgame/assembler
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame/assembler')
-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