diff options
Diffstat (limited to 'nandgame/assembler')
| -rw-r--r-- | nandgame/assembler/parsetypes.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/nandgame/assembler/parsetypes.py b/nandgame/assembler/parsetypes.py index 8ebb206..ccc1101 100644 --- a/nandgame/assembler/parsetypes.py +++ b/nandgame/assembler/parsetypes.py @@ -1,20 +1,26 @@ from dataclasses import dataclass from typing import Any + @dataclass class Symbol: """Define a symbol""" + name: str + @dataclass class Register: """Define a source or dest register""" + name: str + @dataclass class LinedElement: lineno: int + @dataclass class Instruction(LinedElement): opcode: str @@ -23,10 +29,34 @@ class Instruction(LinedElement): arg1: Any arg2: Any + @property + def num_args(self) -> int: + if not self.dest: + return 0 + if not self.arg1: + return 1 + if not self.arg2: + return 2 + return 3 + + @dataclass class ErrorInstruction(Instruction): error_message: str + @staticmethod + def from_instruction(i: Instruction, error_message: str): + return ErrorInstruction( + lineno=i.lineno, + opcode=i.opcode, + jumptarget=i.jumptarget, + dest=i.dest, + arg1=i.arg1, + arg2=i.arg2, + error_message=error_message, + ) + + @dataclass class JumpTarget(LinedElement): label: str |
