diff options
Diffstat (limited to 'src/assembler_eval.py')
| -rw-r--r-- | src/assembler_eval.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/assembler_eval.py b/src/assembler_eval.py new file mode 100644 index 0000000..3473ab8 --- /dev/null +++ b/src/assembler_eval.py @@ -0,0 +1,39 @@ +constants: dict[str, str] = { + # Registers + "rz": "0", + "ra": "1", + "rb": "2", + "rc": "3", + "rd": "4", + "rf": "5", + "rg": "6", + # ALU instructions + "al_plus": "0", + "al_minus": "1", + "al_and": "2", + "al_or": "3", + "al_xor": "4", + "al_shift_lr": "5", + "al_shift_ar": "6", + "al_shift_ll": "7", + # ALU flags + "f_carry": "0", + "f_overflow": "1", + "f_zero": "2", + "f_sign": "3", +} + +labels: dict[str, int] = {} + +def eval_symbol(c: str) -> str: + if c in labels: + return str(labels[c]) + + if c in constants: + return constants[c] + + return c + +def eval_expr(expr: str) -> int: + expr = eval_symbol(expr) + return eval(expr, labels.copy()) # eval as Python expr |
